嵌入式linux ARM启动地址

问题描述 投票:0回答:3

我按照一些文档通过 SD 卡在 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(入口点)

请解释一下加载地址/入口点地址是什么意思?

linux-kernel arm embedded-linux u-boot
3个回答
8
投票

我想知道的是他们从哪个数据表/UM/RM或任何文档中获得了编号:bs=512eek=2,-a 0x81000000(加载地址),-e 0x81000000(入口点)

bs=512 seek=2
规范应来自 SoC 的 NXP/Freescale 参考手册(例如,系统启动章节的“扩展设备:SD、eSD 和 SDXC”部分)。

当配置为从 SD 卡启动时,(SoC 的)ROM 启动程序将在字节偏移 0x400(或 2 * 512 = 1024)处查找程序映像(例如 U-Boot),即第三个 512 字节部门。
第一个扇区假定为 MBR,第二个扇区保留用于可选的辅助映像表(使用 NXP 文档中的术语)。

Allwinner SoC 使用与 SDcard 类似的启动方案(即 U-Boot 映像位于原始扇区中的固定位置,而不是分区的一部分),但映像从第 17 个扇区开始。
某些 SoC(例如 Atmel)不是加载原始扇区,而是通过从 FAT 分区加载文件来从 SD 卡启动。

请解释一下加载地址/入口点地址是什么意思?

这些值被指定给 mkimage 实用程序,以便它们可以安装在 uImage 标头中。然后,U-Boot 将在加载和解压 uImage 时使用这些值。

load address
指定U-Boot所需的内存地址来定位图像。图像被复制到该内存地址。
entry point
指定 U-Boot 跳转/分支到的内存地址,以便执行映像。该值通常与
load address
的地址相同。

对于 ARM Linux 内核,建议的加载和入口点地址是从物理内存开始处的 0x8000,根据(Vincent Sanders)引导 ARM Linux
有关更多详细信息,请参阅使用 LOADADDR构建内核 uImage。


2
投票

请解释一下加载地址/入口点地址是什么意思?

加载地址:指从哪里加载内核。这是内核“加载地址”。 U-Boot 应将映像复制到该内存区域。地址取决于电路板设计/架构。一般设计中,指的是RAM地址。您需要检查您的主板规格。

入口点:这是映像写入 RAM 后控制/执行转移的地方。 (当引导加载程序调用 RAM 中的内核时,将首先执行此位置的代码。)


0
投票

我想知道的是他们从哪个数据表/UM/RM或任何文档中获得了编号:bs=512eek=2,-a 0x81000000(加载地址),-e 0x81000000(入口点)

请解释一下加载地址/入口点地址是什么意思?

bs=512 seek=2
是跳过SD卡的第一个扇区。它有某种启动信息(MBR - 主启动记录或分区表是类似的概念),如果您覆盖此信息(或者至少需要其他工具来修复它),您的卡将会变砖。它在 MMC/SD 卡标准中定义。我认为 JEDEC 网络视线有它。

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

© www.soinside.com 2019 - 2024. All rights reserved.