当前位置: 首页 > 科技观察

Hi3861_WiFiIoT项目的一点认识

时间:2023-03-14 17:39:16 科技观察

更多信息请访问:Harmonyos技术社区https://harmonyos.51cto.com与华为官方共建目录1.关于项目本身2.ohos_bundles3.项目目录结构更新记录:1、关于项目本身的老规矩,从0开始,在Linux环境下的DevEcoIDE下新建一个项目“Hi3861_Wifiiot”,如下图设置,点击“Create”,出现一个默认项目将在Projs目录中生成。检查所有文件,似乎只有bundle.json有一些有用的信息:{"name":"default","version":"1.0.0","description":"Thisisdefaultbundle","publishAs":"source","scripts":{"build":"make"},"dirs":{"headers":["headers/*.h"],"src":["src/*.c"],".":"Makefile"},........[略]"dependencies":{},"devDependencies":{}}根据README.md的提示,执行"hpmbuild",生成bin/hello和bundle-lock.json,执行“./bin/hello”打印“Helloworld”,而bundle-lock.json为空。目前看来,该项目与鸿蒙系统/项目关系不大。其他文件可以删除,但是“bundle.json”不能删除。如果删除这个文件,下一步会安装失败。在DevEcoIDE的HPM选项卡下找到“@ohos/wifi_iot”,选择“Installtoproject”/“Hi3861_Wifiiot”。安装完成后会在Hi3861_Wifiiot目录下得到一个看起来很干净的目录。您无需在IDE中一键编译。首先在命令行上尝试“hpmbuild”lkz@ubuntu:~/Work/Projs/Hi3861_Wifiiot$hpmbuild[WARN]-Thelicenseof@ohos/gnisgnLICENSE.Noticeopen-sourcerisks.[WARN]-Thelicenseof@ohos/gcc_riscv32isGPLV2.Noticeopen-sourcerisks.[WARN]-Thelicenseof@ohos/wifi_iotisNA.Noticeopen-sourcerisks.Building:defaultmake:***Nottargetsmakespecified.nomakeStop.//可能是因为我删除了makefileBuilderror:Workerstoppedwithexitcode2Checkerrordetailsby"/home/lkz/.hpm/log/debug/debug.2021-04-24-15-40-57.log"lkz@ubuntu:~/Work/Projs/Hi3861_Wifiiot$ln-sbuild/lite/build.pybuild.pylkz@ubuntu:~/Work/Projs/Hi3861_Wifiiot$pythonbuild.pywifiiot[197/197]STAMPobj/vendor/hisi/hi3861/hi3861/run_wifiiot_scons.stampohoswifiiotbuil!out目录下也有正常输出。2、在ohos_bundlesHi3861_Wifiiot工程下,明显比鸿蒙系统的完整代码目录多了一个ohos_bundles文件夹和三个json文件。先生进入ohos_bundles目录。让我们看看这三个json文件和ohos_bundles目录里都有什么。bundle.json看起来比之前“Installtoproject”:“base”:{“name”:“@ohos/wifi_iot”,“version”:“^1.0.3”},bundle-lock。json中好像列出了本项目所有组件的24个压缩包的下载地址和校验码,最后的“@ohos/wifi_iot”也列出了本组件依赖以上所有组件。product.template.json"ohos_version":"OpenHarmony1.0","board":"hi3861v100","kernel":"liteos_riscv","compiler":"gcc","subsystem":[],"vendor_adapter_dir":"//vendor/hisi/hi3861/hi3861_adapter","third_party_dir":"//vendor/hisi/hi3861/hi3861/third_party",非常明显的信息。但为什么要特别列出“vendor_adapter_dir”?有什么特别的效果吗?不清楚。ohos_bundles/@ohos/目录显然是整个项目的24个组件的独立目录。直接进入build看看,熟悉的就不说了,直接看bundle.json:{"name":"@ohos/build","version":"1.0.1","publishAs":"code-segment","description":"编译构建提供了一个基于GN和ninja的编译构建框架,支持以下功能:构建不同芯片平台的产品。例如:Hi3518EV300平台上的ipcamera产品,ipcameraHi3516DV300平台产品,Hi3861平台wifi模块产品ipcamera产品。通过HPM包管理配置生成自定义产品。","scripts":{"install":"DEST_PATH=${DEP_BUNDLE_BASE}/build&&mkdir-p$DEST_PATH&&cp-r./*$DEST_PATH"},"keywords":["build"],"license":"ApacheV2","re??pository":"","homepage":"","tags":["build"],"ohos":{"os":"1.0.0","kernel":"liteos-a,liteos-m","board":"hi3516,hi3518,hi3861"}看起来很直白,就是"scripts”好像是执行脚本命令。DEP_BUNDLE_BASE应该是部署的bundle的基目录,也就是项目Hi3861_Wifiiot目录本身。在Hi3861_Wifiiot/build目录下递归创建子目录,递归复制当前目录下的所有内容到Hi3861_Wifiiot/build目录下。所以Hi3861_Wifiiot/build目录是Hi3861_Wifiiot/ohos_bundles/@ohos/build目录的副本。同样,其他组件也基本处于相同的情况。至于它们复制到代码根目录的位置,请仔细查看bundle.json进行整理。但是,三个组件有点例外:gcc_riscv32、gn、ninja。这三者属于建编系统。他们的bundle.json的共同点是在scripts目录下执行install.sh脚本,先去仓库地址下载压缩包,然后解压到同目录下。如前所述,“@ohos/wifi_iot”依赖于其他23个组件,因此您必须仔细查看其bundle.json。果然:"scripts":{"dist":"exportPATH=$PATH:${DEP_OHOS_gcc_riscv32}/gcc_riscv32/bin:${DEP_OHOS_gn}/gn:${DEP_OHOS_ninja}/ninja&&hpmrunparse&&hpmrunselect&&hpmrunco??nnect&&hpmrunco??mpile","parse":"node./dist_scripts/parse_platform_hpm.jshi3861v100_liteos_riscv"js/nodeelect"ist/selectd,"connect":"node./dist_scripts/connect_subsystem.jswifiiot","compile":"ln-sf${DEP_BUNDLE_BASE}/build/lite/build.py${DEP_BUNDLE_BASE}/build.py&&cd${DEP_BUNDLE_BASE}&&python${DEP_BUNDLE_BASE}/build.pywifiiot","install":"cpproduct.template.json${DEP_BUNDLE_BASE}","eco":"echo$target"},首先将三个build编译工具所在目录的bin添加到环境变量中,然后执行parse、select、connect、compile命令,前三个命令的脚本都在当前目录的dist_scripts中,并且编译命令首先在代码的根目录下创建build.py的软链接,然后切换到根目录下执行pythonbuild.pywifiiot开始构建编译。根据《鸿蒙系统的编译流程及分析》一文中提到的Gn+Ninja的工作原理和步骤,我们首先将其依赖的23个组件全部编译,最后生成一个用于烧写开发板的bin文件。这很清楚。3、项目的目录结构我在《鸿蒙系统的编译流程及分析》一文(链接:https://harmonyos.51cto.com/posts/4070)中大致梳理了HarmonyOS系统的build和out目录结构。比较复杂,我的理解不到位,所以没法整理。不过这个Hi3861_Wifiiot项目被hpm砍掉了。总共只有24个组件。是时候做个整理了,于是又整理了下这张表。粗浅的了解,希望能对大家有所帮助。更详细的信息,还是需要自己阅读README和代码。自己在开发板上调试会更好。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区