[文章]轻鸿蒙设备启动流程鸿蒙相关部分

阅读量0
0
4
20.png

21.png

22.png


23.png

24.png

Hi3861 LiteOs-m启动介绍:

https://bbs.elecfans.com/jishu_2168238_1_1.html

从asm文件和map文件梳理函数调用关系并修改启动log信息
25.png


MODULE_INIT调用关系
  1. basestartupbootstrap_liteservicessourcecore_main.h
  2. MODULE_CALL
  3. MODULE_BEGIN
  4. MODULE_END
  5. __zinitcall_##name##_start
  6. __zinitcall_##name##_end
复制代码

SYS_INIT调用关系
  1. SYS_CALL
  2. SYS_BEGIN
  3. SYS_END
  4. __zinitcall_sys_##name##_start
  5. __zinitcall_sys_##name##_end
复制代码
26.png


为什么可以这样调用?
27.png

28.png

29.png

编译链接阶段生成指定的段,初始化时调用指定段

  1. SYS_RUN(LedExampleEntry);

  2. #define SYS_RUN(func) LAYER_INITCALL_DEF(func, run, "run")

  3. #define LAYER_INITCALL_DEF(func, layer, clayer)
  4.     LAYER_INITCALL(func, layer, clayer, 2)

  5. #define LAYER_INITCALL(func, layer, clayer, priority)            
  6.     static const InitCall USED_ATTR __zinitcall_##layer##_##func
  7.         __attribute__((section(".zinitcall." clayer #priority ".init"))) = func
复制代码

最后变成了
  1. zinitcall.run2.init

  2. zinitcall.run.start
复制代码
30.png

31.png

32.png

33.png

36.png


轻鸿蒙设备课件.pptx
(590.8 KB, 下载次数: 3)

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友