嵌入式Linux ARM启动地址

4

我按照一些文件的指导,通过SD卡在ARM板(例如:Freescale Vybrid tower)上启动嵌入式Linux。在文件中有以下构建uImage和将u-boot写入SD卡的步骤:

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(入口点)。
请解释一下“加载地址”和“入口点地址”的含义。
3个回答

8
我想知道的是他们从哪个数据表/UM/RM或任何文档中获得了数字:bs=512 seek=2,-a 0x81000000(加载地址),-e 0x81000000(入口点)。 bs=512 seek=2规范应该来自SoC的NXP/Freescale参考手册(例如“系统启动”章节的“扩展设备:SD、eSD和SDXC”部分)。
当配置为从SD卡引导时,SoC的ROM引导程序将在字节偏移量0x400(或2 * 512 = 1024,第三个512字节扇区)处查找程序映像(例如U-Boot)。 第一个扇区被认为是MBR,第二个扇区保留用于可选的Secondary Image Table(使用NXP文档的术语)。
Allwinner SoCs使用类似的启动方案来启动SD卡(即U-Boot映像位于原始扇区的固定位置,不是分区的一部分),但该映像从第17个扇区开始。
某些SoC(例如Atmel)不加载原始扇区,而是从FAT分区加载文件来引导SD卡。
请解释一下Load address/entry point address是什么意思?
这些值由mkimage实用程序指定,以便它们可以安装在uImage头中。当uImage被加载和解压缩时,U-Boot将使用这些值。
"load address"指定给U-Boot所需的内存地址来定位映像。映像被复制到该内存地址。 "entry point"指定给U-Boot要跳转/分支到的内存地址,以执行映像。该值通常与“load address”相同。
对于ARM Linux内核,根据(Vincent Sanders') Booting ARM Linux,推荐的加载和入口地址是从物理内存开始的0x8000。
有关更多详细信息,请参见使用LOADADDR构建内核uImage

首扇区被认为是MBR,第二个扇区保留用于可选的Secondary Image Table。ROM引导程序(SoC的)将在第三个512字节扇区查找程序映像(例如U-Boot)。- 你能告诉我具体的手册/章节链接吗? - ManiAm
1
请参见图8-17,文档编号:IMX6DQRM,i.MX 6Dual/6Quad应用处理器参考手册,版本2,06/2014。 - sawdust
锯末,你在这里的回答清晰简明,用通俗易懂的语言描述 - 我非常感激。我希望 NXP 的文档也能以同样的方式编写。 - Chris Warth

2
加载地址:指内核从哪里加载。这是内核的“加载地址”。U-Boot将把镜像复制到该内存区域。该地址取决于板子设计/架构。在一般的设计中,这将指RAM地址。您需要检查您的板子规格。 入口点:这是图像写入RAM后控制/执行转移的位置。(当引导程序调用RAM中的内核时,此位置处的代码将首先被执行。)

0
我想知道的是他们从哪个数据表/UM/RM或任何文档中获取了这个数字:bs=512 seek=2,-a 0x81000000(加载地址),-e 0x81000000(入口点)。
请解释一下什么是加载地址/入口点地址? bs=512 seek=2 是为了跳过SD卡的第一个扇区。这里有一些引导信息(MBR - 主引导记录或分区表是类似的概念),如果你覆盖了这些信息,你将砖化卡片(或者至少需要其他工具来修复它)。它在MMC/SD卡标准中定义。我认为JEDEC网站上有相关信息。

加载地址是将SD卡映像移动到内存(即SDRAM)的位置。入口点是在图像加载后要交出控制权的位置。如果引导代码是用汇编语言编写并使用链接器,则它们通常相同。然而,有时候硬编码的向量表位于图像的开头,而入口点则在中间某个位置。无论如何,两者都是物理地址。对于较小的内核,它可能是“IRAM”(内部静态RAM),但对于需要工作的Linux来说必须是SDRAM(需要您的SDRAM正常工作)。如果这是自定义板而不是现成的Vybrid Tower,则可能会遇到问题。此外,不同的Tower板修订版工作方式也不同。请检查它们的勘误表。最后,不同的U-boot版本支持不同的启动模式。即,u-boot存储和执行的位置在Cortex-A5 CPU的物理内存映射中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接