[openharmony]liteos-a编译过程分析

背景

最近搞一个sensor接入openharmony的事情,在分析源码中的加速度计驱动相关源码时,发现不紧有BUILD.gn文件,还有Makefile文件,并且里面都有记录源文件路径。所以很困惑,openharmony是通过gn+ninja编译的还是通过make编译的?
为了搞清楚,所以针对liteos-a系统下的编译过程进行分析,在这里记录一下

入口

通过官方文档看,liteos-a系统编译时用的是官方的hb命令hb sethb build命令,所以入口肯定是hb工具
查看openharmony源码中build目录下有一个lite/hb目录(hb命令的源码目录,使用python脚本)

编译过程调试

看鸿蒙研究站里面有一篇介绍hb命令的调试方法,通过vscode+python插件调试,参见《v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程》

说明:

  • 主要是创建一个launch.json文件,里面定义调试命令的入口(详细信息可以在网上查询)。为了多次调试效果一样,在调试build命令时,我增加了-f选项,这样每次都会全新编译,如下
  {//hb build
      "name": "hb build debug",
      "type": "python",
      "request": "launch",
      "program": "./build/lite/hb/__main__.py",
      "console": "integratedTerminal",
      "args": ["build", "-f"],
      "stopOnEntry": true
  },
  • 在win+虚拟机linux编译系统场景,我没有调试成功,后面搞成功了再补充;这里我是直接在linux环境进行调试,这个依赖于linux本地编译,不要使用docker镜像

hb set

设置好之后就可以开始在vscode上调试

  1. 选择"hb set"调试目标并按F5,会停在./build/lite/hb/__main__.py的代码开始处

    hb命令调试.png

  2. 在80行打断点并按F5


    hb_set_1.png
  3. 按F11可以进入set.py的exec_command接口

    hb_set_2.png

  4. 然后就可以继续后续的调试工作,hb set命令主要是生成ohos_config.json这个后面编译要使用的配置文件,这里就不详细记录调试的过程了

    hb_set_3.png

hb build -f

这个是整个编译的重点,通过调试可以看到最终是调用了gn/ninja/fs_make,如下分析

  1. 前两步跟hb set命令一样,第三步会进入build.py的exec_command接口

    hb_build_1.png

  2. 这个接口的前面我们先略过,我们先在接口最后的build.build接口处加断点,并按F5


    hb_build_2.png
  3. 按F11进入,并在build_process.py的135行加断点再按F5

    hb_build_3.png

  4. 查看cmd_list变量的值有3个(除去内置的)接口,分别是Build.gn_buildBuild.ninja_buildPacker.fs_make

    hb_build_4.png

这个就是整体的编译过程了,先调用gn生成ninja文件,再通过ninja进行编译,最后通过fs_make制作镜像

因为内容太多,下面对这三个编译动作先做个整体的介绍,后续再对每一个进行详细分析

gn_build

继续调试,会先进入gn_build接口,看实现就是调用了gn gen命令,如下

hb_build_gn.png

查看gn_cmd变量,详细命令为(比较多,经过了整理):


hb_build_gn_cmd.png

这个命令之后,就会将工程中所有用到的BUILD.gn文件转换成<module_name>.ninja文件(类似makefile)供后面ninja命令(类似make)调用并进行编译

ninja_build

再继续调试就会进入ninja_build接口,实现以及执行的详细的ninja命令如下

hb_build_ninja.png

这个命令与make命令类似,但是注重速度(详细信息可以在网上搜索两者区别);此命令执行即是通过build.ninja/toolchain.ninja/各BUILD.gn转换的.ninja来进行编译,并生成.bin/.so/.a等文件

fs_make

  • fs_make接口会读取在vendor目录下定义好的fs.yml文件,获取到对镜像的配置信息,读取到mksh_rootfs/rootfs/userfs三个fs_cfg信息,如下

    hb_build_fs_make1.png

  • 对于每一个fs_cfg都会调用定义好的6个接口,如下


    hb_build_fs_make2.png

编译结束

整个编译OK之后会输出如下图中成功信息


hb_build_ok.png

在out目录下就会生成烧录用到的镜像文件,如下图


hb_build_ok_outfiles.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容