[文章]Hi3861系统FlashBoot代码介绍

阅读量0
2
5
接上一篇Hi3861系统LoaderBoot流程介绍,这次再说一下FlashBoot。
企业微信截图_16316628111292.png

FlashBoot负责启动固件也就是启动操作系统的,它的入口函数如下:
企业微信截图_163167472399.png

套路很一样,配方很一样,从汇编跳转到c入口:
start_fastboot中设置了看门狗,初始化了io,flash,nv等最后调用
execute_upg_boot,execute_upg_boot中获取配置判断是升级还是启动,然后调用boot_head,boot_head如下:
企业微信截图_16316750104994.png

获取完启动地址后调用boot_kernel启动了操作系统内核,boot_kernel函数实现
如下:
  1. hi_void boot_kernel(uintptr_t kaddr)
  2. {
  3.     __asm__ __volatile__("ecall");  /* switch U-MODE -> M-MODE */
  4.     hi_void (*entry)(hi_void) = (hi_void*)(kaddr);
  5.     entry();
  6. }
复制代码

这个函数有意思吧,不光嵌入了汇编,还拿地址当函数去跳转,为啥这样,
因为FlashBoot和kernel,是两套代码程序,他们之间没有依赖引用关系,
但是他们在一个地址空间,所以直接地址跳转,这也是从boot到kernel通用
的跳转方式。


回帖

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