我按照一些文档通过 sdcard 在 ARM 板上启动嵌入式 Linux(例如:飞思卡尔 Vybrid 塔)。在文档中有构建uImage和将u-boot写入sdcard的步骤如下:
sudo dd if=u-boot.imx of=/dev/sdX bs=512 seek=2
mkimage -A arm64 -O linux -T kernel -C none -a 0x81000000 -e 0x81000000 -n
“Linux” -d Image uImage
我想知道的是他们从哪个数据表/UM/RM 或任何文档中获得编号:bs=512 seek=2, -a 0x81000000(加载地址),-e 0x81000000(入口点)
还请解释加载地址/入口点地址是什么意思?
请您参考如下方法:
What I would like to know is from which datasheet/UM/RM or any document they get the number: bs=512 seek=2, -a 0x81000000 (Load address), -e 0x81000000 (Entry point)
bs=512 seek=2
规范应来自 SoC 的 NXP/Freescale 引用手册(例如“系统引导”一章的“扩展设备:SD、eSD 和 SDXC”部分)。
当配置为从 SD 卡启动时,(SoC 的)ROM 启动程序将在字节偏移 0x400(或 2 * 512 = 1024)处查找程序镜像(例如 U-Boot),这是第三个 512 字节扇区.
第一个扇区假定为 MBR,第二个扇区保留用于可选的次镜像表(使用 NXP 文档中的术语)。
Allwinner SoC 对 SD 卡使用类似的启动方案(即 U-Boot 镜像位于原始扇区中的固定位置,而不是分区的一部分),但镜像从第 17 个扇区开始。
某些 SoC(例如 Atmel)不是加载原始扇区,而是通过从 FAT 分区加载文件来从 SD 卡启动。
Please also explain what Load address/entry point address mean?
这些值指定给 mkimage 实用程序,以便它们可以安装在 uImage header 中。 U-Boot 将在 uImage 加载和解包时使用这些值。
load address
为 U-Boot 指定定位镜像所需的内存地址。图像被复制到该内存地址。
entry point
为 U-Boot 指定要跳转/分支到的内存地址,以便执行镜像。此值通常与
load address
的地址相同。 .
根据 (Vincent Sanders') Booting ARM Linux 的说法,对于 ARM Linux 内核,推荐的加载和入口点地址是从物理内存开始的 0x8000。 .
见 Building kernel uImage using LOADADDR更多细节。