我按照一些文档通过 sdcard 在 ARM 板(例如:Freescale Vybrid tower)上启动嵌入式 Linux。在文档中,有构建 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=512eek=2,-a 0x81000000(加载地址),-e 0x81000000(入口点)
还请解释一下加载地址/入口点地址是什么意思?
我想知道的是他们从哪个数据表/UM/RM或任何文档中获得了编号:bs=512eek=2,-a 0x81000000(加载地址),-e 0x81000000(入口点)
The 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 卡启动。
还请解释一下加载地址/入口点地址是什么意思?
这些值被指定给mkimage实用程序,以便它们可以安装在 uImage 标头中。然后,U-Boot 将在加载和解压 uImage 时使用这些值。
The load address
指定 U-Boot 所需的内存地址来定位映像。图像被复制到该内存地址。
The entry point
指定 U-Boot 要跳转/分支到的内存地址,以便执行映像。该值通常与load address
.
根据(Vincent Sanders),对于 ARM Linux 内核,建议的加载和入口点地址是从物理内存开始处的 0x8000引导 ARM Linux.
See 使用 LOADADDR 构建内核 uImage更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)