arch文件夹
这个文件夹里面存放着和架构有关的文件
可以看出有很多架构,比如 arm、m68k、x86 等,我们现在用的是 ARM 芯片,所以只需要关心 arm 文件夹即可,打开 arm 文件夹里面内容
只截取了一部分,还有一部分 mach-xxx 的文件夹。mach 开头的文件夹是跟具体的设备有关的,比如“mach-exynos”就是跟三星exyons 系列 CPU 有关的文件。我们使用的是 STM32MP1,所以要关注“mach-stm32mp”这个文件夹。另外“cpu”这个文件夹也是和 cpu架构有关的
可以看出有多种 ARM 架构相关的文件夹,STM32MP1 使用的 Cortex-A7 内核,Cortex-A7 属于 armv7,所以我们要关心“armv7”这个文件夹。cpu 文件夹里面有个名为“u-boot.lds”的链接脚本文件,这个就是 ARM 芯片所使用的 u-boot 链接脚本文件!armv7 这个文件夹里面的文件都是跟 ARMV7 架构有关的,是我们分析 uboot 启动源码的时候需要重点关注的
configs文件夹
此文件夹为 uboot 配置文件夹,uboot 是可配置的,但是你要是自己从头开始一个一个项目的配置,那就太麻烦了,因此一般半导体或者开发板厂商都会制作好一个配置文件。我们可以在这个做好的配置文件基础上来添加自己想要的功能,这些半导体厂商或者开发板厂商制作好的配置文件统一命名为“xxx_defconfig”,xxx 表示开发板名字,这些 defconfig 文件都存放在configs 文件夹,因此,ST 官方开发板配置文件肯定也在这个文件夹中。
使用“make xxx_defconfig”命令即可配置 uboot
make stm32mp15_fsmp1a_basic_defconfig
代码分析启动流程
入口
要分析 uboot 的启动流程,首先要找到“入口”,找到第一行程序在哪里。程序的链接是由链接脚本来决定的,所以通过链接脚本可以找到程序的入口。如果没有编译过 uboot 的话链接脚本为 arch/arm/cpu/u-boot.lds。但是这个不是最终使用的链接脚本,最终的链接脚本是在这个链接脚本的基础上生成的。编译一下 uboot,编译完成以后就会在 uboot 根目录下生成 u-boot.lds文件。
只有编译 u-boot 以后才会在根目录下出现 u-boot.lds 文件!