4 STM32MP1 Linux系统启动过程

1. ROM代码

  这是ST官方写的代码,在STM32MP1出厂时就已经烧录进去,不能被修改。ROM代码是上电以后首先执行的程序,它的主要工作就是读取STM32MP1的BOOT引脚电平,然后根据电平来判断当前启动设备,最后从选定的启动设备里面读取FSBL代码,将FSBL代码放在对应的RAM空间。

  STM32MP1启动Linux内核是链式结构:ROM Code → FSBL → SSBL → Linux kernel → rootfs,系统启动的时候要保证整个链式结构都是安全的。ROM首先对FSBL进行鉴权,同样,FSBL对下个阶段鉴权以此类推,直到设备系统正确启动。

2. FSBL

  FSBL代码是初始化时钟树和外部RAM控制器,也就是DDR。FSBL将SSBL加载到DDR里面运行SSBL代码。

  一般FSBL代码是TF-A或Uboot的SPL代码,但可以换成STM32MP1 A7的内核裸机代码。

3. SSBL

  因为SSBL代码是在DDR内,无需担心空间不足,所以SSBL代码就有使能USB、网络、显示等等。SSBL一般是Uboot,用来启动Linux内核。

4. Linux内核

  SSBL部分的Uboot就只有一个使命,启动Linux内核,Uboot将Linux内核加载到DDR上并运行。Linux内核启动就是初始化开发板上的各种外设。

5. Linux用户空间

   系统启动的时候会通过 init 进程切换到用户空间,在这个过程中会初始化根文件系统里面的各种框架以及服务。

猜你喜欢

转载自blog.csdn.net/qq_45475497/article/details/134798817