All about Bootloaders
准备工作:
- Linux主机需要安装 device-tree-compiler, git, make, patch, and u-boot-tools
- 第二章利用 Crostool-NG 编译的工具链,由于个人使用的是 BeagleBone-AI,所以使用的工具链为 arm-cortex_a15-gnueabihf
- 一个SD卡和读卡器
- BeagleBone Black 开发板,本人使用的是BeagleBone AI 开发板
- 5V1A直流电源
Bootloader 作用
最基本的初始化系统,并加载 Linux 内核,在开始上电之初,DRAM、NAND flash、MMC 都无法使用,唯一可以操作的是 CPU 的一个核,以及片上 RAM 和 boot ROM
boot 顺序
若 Bootloader 存储在 NOR flash(线性存储,支持随机访问),根据处理器的复位向量(将处理器指向第一条指定的地址,也就是处理器开始运行的位置),来决定 Bootloader 存储在 Flash 的顶端或者底端,即 Bootloader 的入口位于处理器上电第一条指令的位置。Bootloader 在 NOR flash 中运行后先初始化 DRAM 控制器,初始化成功后,Bootloader 将内核从 NOR flash 加载到 DRAM 中。
若不是使用 NOR flash, 则一般需要三个阶段:
1. 芯片上电或复位后,最开始运行的程序称作 ROM code,保存在片上 ROM 中,ROM code 可以从 NAND falsh 或 MMC 设备(EMMC 或 SD 卡)等加载一小段代码到 SRAM (SRAM 不需要内存控制)中,如果从这些 flash 设备上读取失败,则会通过以太网,USB 或 UART 接口读取一个字节流。而 SRAM 太小无法加载完整的 Bootloader 程序,因此需要辅助加载程序(SPL)。也就是 ROM code 将 SPL 加载到 SRAM 当中,当 ROM