Eng*_*999 1 embedded-linux bootloader u-boot beagleboneblack partition
我是嵌入式系统上 Linux 编程的新手。我想了解更多关于嵌入式引导加载程序和 U-boot。我的主要问题无疑是通用的,但我试图了解 U-boot 如何准确地找到 Linux 内核。
更具体地说,我使用的是 BeagleBone Black。我有一个 SD 卡分区如下(取自在线示例),一个包含 MLO + U-Boot 的 FAT32 分区,一个包含内核 + 设备树的 EXT4 分区和另一个包含 rootfs 的 EXT4 分区。
我知道 ROM 主引导加载程序首先加载,在 FAT 分区中定位 MLO 文件,然后将控制权传递给 U-Boot。
U-Boot 如何最终准确定位内核?这和uEnv.txt启动配置文件有关吗?我知道 U-Boot 有一个学习曲线,需要一些阅读,但只是为了提前获得一些知识。
如果我更改 SD 卡映像并放置更多分区并尝试从它启动,而内核在不同的分区上,现在会发生什么?我是否需要特别告诉 U-Boot 在哪里可以找到内核,或者它会一直搜索直到找到它?
小智 5
您应该告诉 U-Boot 内核位于何处以及 U-Boot 应如何将内核加载到内存中。它可以在网络、uSD 卡、NAND Flash、NOR Flash 或其他地方。
不同的设备有不同的配置。对于您当前的 u-boot,您可以查看此文件。它应该是am335x_evm.h文件。
https://github.com/antmicro/u-boot/blob/master/include/configs/am335x_evm.h
Run Code Online (Sandbox Code Playgroud)
在文件中,NAND Flash 和 MMC 卡有两种不同的配置。它告诉 u-boot 内核所在的位置,内核文件名是什么,内核应该如何加载内存。
这是 NAND Flash 的配置。
"mtdids=" MTDIDS_DEFAULT "\0" \
"mtdparts=" MTDPARTS_DEFAULT "\0" \
"nandargs=setenv bootargs console=${console} " \
"${optargs} " \
"root=${nandroot} " \
"rootfstype=${nandrootfstype}\0" \
"nandroot=ubi0:rootfs rw ubi.mtd=NAND.file-system,2048\0" \
"nandrootfstype=ubifs rootwait=1\0" \
"nandboot=echo Booting from nand ...; " \
"run nandargs; " \
"nand read ${fdtaddr} NAND.u-boot-spl-os; " \
"nand read ${loadaddr} NAND.kernel; " \
"bootz ${loadaddr} - ${fdtaddr}\0
Run Code Online (Sandbox Code Playgroud)
如果你在这里修改。它告诉 U-Boot 它应该使用“nand read”命令从“${loadaddr}”读取“NAND.Kernel”文件。
| 归档时间: |
|
| 查看次数: |
2355 次 |
| 最近记录: |