还没吃饭 · 2023年12月09日 · 河南

【XR806开发板试用】+4.OpenHarmony编译顺序

接上三篇:

【XR806开发板试用】+1.嵌入式

【XR806开发板试用】+2.鸿蒙内核

【XR806开发板试用】+3.实战OpenHarmony固件编译

大家好,今天我们来谈一谈编程时一个很有趣的话题——编译顺序。我知道,一提到编译可能大家会感到有点儿头疼,但请放心,我不会让大家头疼的。我们要明白,在开始写代码之前,了解整个程序的编译路径是十分有必要的。这就好比你要去一个陌生的地方,首先得知道怎么走才能到达目的地,对吧?

首先呢,得看看这个"vendor/xradio/xr806/config.json",这可是个关键角色。它就像是一个交通警察,告诉编译器:“嘿,你得先编译这个,然后再编译那个。”其中的"product_name"就是交通警察手中的指挥棒,它决定了执行hb set时会出现的选项。而"device_company"、"board"、"kernel_type"这三位则是一同决定了代码的行走路径。

当你用hb set选定了"wifi_skylark"后,就会在根目录中生成一个叫做ohos_config.json的文件。这个文件就像是一张地图,上面清楚地标明了各个代码文件应该放置的位置。这样,编译器就知道去哪里找这些代码了。
image.png
然后,当你执行hb build -f命令时,HarmonyOS的编译脚本就会从device_path中获取编译工具和编译选项,从product_path下寻找BUILD.gn文件。这个过程就像是在准备一场演出,编译工具是音响设备,编译选项是音量调节器,而BUILD.gn文件则是节目单。
image.png
BUILD.gn文件中的内容可是相当精彩的。其中build_ext_component("libSDK")就像是一个大明星,有很多依赖项需要先行准备。这些依赖项就像是它的伴舞团队和乐队,得提前到位才能确保演出的顺利进行。
image.png
同样的道理也适用于group("xr806")和ohosdemo/BUILD.gn中的内容。这些文件和文件夹都需要按照一定的顺序进行编译,才能确保整个程序的顺利运行。

最后呢,当你打开hello_demo/BUILD.gn时,你会看到import("//device/xradio/xr806/liteos_m/config.gni")这句话。这就像是在演出开始前,主持人走上台说:“感谢大家的支持,现在我们开始演出!”然后,static_library("app_hello")就像是第一个节目,闪亮登场!
你想想看,一群代码如果不按照顺序来,岂不是乱成一锅粥了?好在Harmony给我们提供了明确的编译顺序,让代码们可以乖乖排队,一个个等待被编译。所以说啊,编译顺序可是个大学问。只有掌握了正确的顺序,才能让代码们和谐共处,共同演绎出一场精彩的程序运行秀!

以XR806_OpenHarmony为例,当你通过hb set选定wifi_skylark后,会在根目录中生成一个叫ohos_config.json的文件。这个文件里主要包括以下内容:

{
 "root_path": "/home/workspace/Harmony_XR806",
 "board": "xr806",
 "kernel": "liteos_m",
 "product": "wifi_skylark",
 "product_path": "/home/workspace/Harmony_XR806/vendor/xradio/xr806",
 "device_path": "/home/workspace/Harmony_XR806/device/xradio/xr806/liteos_m"
}

然后,当你执行hb build -f时,HarmonyOS的编译脚本就会从device_path中获取编译工具和编译选项,然后从product_path下寻找BUILD.gn文件。

现在让我们看看这个BUILD.gn文件的内容:

build_ext_component("libSDK") {
  exec_path = rebase_path(".", root_build_dir)
  outdir = rebase_path("$root_out_dir")
  command = "./build.sh ${outdir}"
  deps = [
      "//kernel/liteos_m:kernel",       #(3)
      "os:liteos_glue",
      "adapter/hals:adapter",
      "adapter/console:app_console",
      "ohosdemo:ohosdemo",              #(2)
  ]
}

group("xr806") {
    deps = [
        ":libSDK"       #(1)
    ]
}

这里有三个需要注意的地方:

  1. deps关键字代表执行group("xr806")前需要先执行libSDK,也就是build_ext_component("libSDK")
  2. 在执行build_ext_component("libSDK")前,需要先找到ohosdemo文件夹下的BUILD.gn,并且这个文件里会有ohosdemo的定义。
  3. //代表绝对路径,可以理解为根目录。比如//kernel/liteos_m代表根目录下的kernel/liteos_m文件夹。
    最后,关于演示部分:
    XR806_OpenHarmony串口默认配置为:波特率115200,无校验,8位数据位,1位停止位。开发板成功连接PC上对串口调试助手后按下开发板的复位按键串口输出。这段文字描述了如何配置串口以及如何通过串口输出信息。当你连接开发板到PC并使用串口调试助手进行调试时,你可以通过发送复位信号来启动应用程序,然后你将看到“Hello World!”消息输出到串口上。这个过程就像是我们在家里看电视,按下遥控器上的播放键就能看到精彩的节目一样简单!希望大家在编码的道路上越走越顺!

谢谢!

本人在本论坛内的试读[经验] :

《嵌入式Linux系统原理与应用》读后感第八章-设备驱动程序设计

本人在本论坛内的帖子:

GD32F427开发板试用+唱歌跳舞主控5加非接触式换歌功能

希望这些经验能对您有所帮助!

如果转载我的文章请注明出处,谢谢!我上篇文章【XR806开发板试用】+3.实战OpenHarmony固件编译已被转载。

推荐阅读
关注数
3
文章数
15
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息