一目了然
- 1 简述
- 2 启动流程分析
- 2.1 Boot ROM
- 2.2 启动追踪
1 简述
u-boot学习笔记是基于NXP i.MX8系列芯片中imx8mq芯片学习记录的心得体会,各位大神在阅读过程中如发现有错误的地方,还请在评论区中指出,小生在此先拜谢了。
学习过程中使用的开发板是米尔科技开发的MYD-JX8MQ6-8E2D-130-E套装系列,软件工程是米尔科技提供的官方Yocto工程,此工程是米尔科技为适配自家设计的开发板而基于NXP官方软件驱动包修改的。有关软件代码包的获取可参考米尔科技官方提供的《MYD-JX8MX Linux开发手册》,可至米尔科技提供的官方链接处下载:http://d.myirtech.com/MYD-JX8MX/,本文是基于git commit 5de575f69729f48fc8f3a1b1c0c7337c9b678e1a (HEAD -> imx_v2018.03_4.14.98_2.0.0_ga-2gddr-MT3D1024M)对应的代码进行学习分析的。
2 启动流程分析
2.1 Boot ROM
在imx8mq芯片内部设计有128KB(查看NXP官方芯片数据手册发现实际大于128KB)的Boot ROM区域,此区域用于存储NXP官方提供的固化代码,一般不允许用户对此区域做操作。NXP官方提供的固化代码用于帮助芯片通过检测熔丝位的连接状态,判断芯片的启动方式,如下载烧录程序或者启动程序,从SD卡或者eMMC启动。所使用的米尔开发套件的熔丝位设计如下图所示。
2.2 启动追踪
当需要启动程序时,Boot ROM区域固化代码会负责找到程序的入口,加载运行程序。在此需要注意两个lds文件,即u-boot-spl.lds和u-boot.lds文件。在“include/configs/imx8mq_evk.h”文件中指定了使用“arch/arm/cpu/armv8/u-boot-spl.lds”文件,u-boot.lds文件路径为“arch/arm/cpu/armv8/u-boot.lds”。其中u-boot-spl.lds指定了SPL程序的入口,SPL程序也是Boot ROM首先加载启动的程序,其主要工作为负责板子的简单初始化和eMMC初始化、引导运行BL31、BL32和u-boot等程序。对于NXP iMX8M系列芯片,SPL与BL31等程序的启动流程如下图所示。
SPL运行完成时会加载运行BL31程序,即上图中ARM Trusted Firmware(ATF),在ATF运行过程中会检测BL32程序是否存在,若存在则加载运行BL32程序,即启动上图中OP-TEE OS,当OP-TEE OS加载运行起来之后,ATF会继续加载运行u-boot程序。在u-boot.lds指定了u-boot程序的入口,根据u-boot.lds文件的设置,可追寻u-boot程序的函数调用关系。追踪源码包并绘制从SPL程序启动到u-boot程序正常运行的函数调用图如下图所示。
与上图关系对应的每个函数的说明在文件IMX8 Uboot 2019启动流程分析.pdf中有详细描述。图片查看感觉不方便的开发者可直接下载思维导图文件:IMX8 Uboot 2019启动流程分析.xmind,也可直接私信或评论区联系博主获取。