嵌入式 linux ARM 启动地址
embedded linux ARM booting address
我按照一些文档通过 SD 卡在 ARM 板(例如:Freescale Vybrid 塔)上启动嵌入式 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
我想知道的是他们从哪个 datasheet/UM/RM 或任何文档中获得编号:bs=512 seek=2, -a 0x81000000(加载地址),-e 0x81000000(入口点)
还请解释一下加载address/entry点地址是什么意思?
Please also explain what Load address/entry point address mean?
加载地址:指的是从哪里加载内核。这是内核"load address"。 U-Boot 应将图像复制到该内存区域。地址取决于开发板 design/architecture。在一般设计中,这应指RAM 地址。您需要检查您的电路板规格。
入口点: 这是图像写入 RAM 后 control/execution 传输的位置。 (当bootloader调用RAM中的内核时,该位置的代码将首先执行。)
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)
Please also explain what Load address/entry point address mean?
bs=512 seek=2
是跳过SD卡的第一个扇区。这有某种引导信息(MBR - 主引导记录或分区 table 是类似的概念),如果你覆盖此信息(或至少需要其他工具来修复它),你将把卡变砖。它在 MMC/SD 卡标准中定义。我想 JEDEC web sight 有它。
加载地址是将SD卡镜像移动到内存(即SDRAM)的地方。入口点是图像加载后手动控制的位置。如果引导代码是用汇编程序编写的并且使用链接器,它们通常是相同的。但是,有时硬编码矢量 table 位于图像的开头,而入口点位于中间的某个位置。无论如何,两者都是物理地址。对于较小的内核,它可能是 'IRAM'(内部静态 ram),但对于 Linux(这需要您的 SDRAM 正常工作),它必须是 SDRAM。如果它是定制板而不是现成的 Vybrid Tower,您可能对此有疑问。此外,还有不同的塔板修订版,它们的工作方式也不同。检查它们的勘误表。最后,不同的U-boot版本支持不同的启动模式。即u-boot是从哪里存储和执行的?地址位于 Cortex-A5 的物理内存映射中的 Vybrid TRM CPU。
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 参考手册(例如 系统启动 章节的 "Expansion Device: SD, eSD and SDXC" 部分).
当配置为从 SD 卡启动时,(SoC 的)ROM 启动程序将在字节偏移量 0x400(或 2 * 512 = 1024)处查找程序映像(例如 U-Boot),它是第三个512字节的扇区。
第一个扇区被假定为 MBR,第二个扇区保留用于可选的次映像 Table(使用 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 内存地址到jump/branch 以执行图像。该值通常与 load address
的地址相同。
对于 ARM Linux 内核,根据 (Vincent Sanders) Booting ARM Linux.[=32=,推荐的加载和 entry-point 地址是从物理内存开始的 0x8000 ]
有关详细信息,请参阅 Building kernel uImage using LOADADDR。
我按照一些文档通过 SD 卡在 ARM 板(例如:Freescale Vybrid 塔)上启动嵌入式 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
我想知道的是他们从哪个 datasheet/UM/RM 或任何文档中获得编号:bs=512 seek=2, -a 0x81000000(加载地址),-e 0x81000000(入口点)
还请解释一下加载address/entry点地址是什么意思?
Please also explain what Load address/entry point address mean?
加载地址:指的是从哪里加载内核。这是内核"load address"。 U-Boot 应将图像复制到该内存区域。地址取决于开发板 design/architecture。在一般设计中,这应指RAM 地址。您需要检查您的电路板规格。
入口点: 这是图像写入 RAM 后 control/execution 传输的位置。 (当bootloader调用RAM中的内核时,该位置的代码将首先执行。)
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)
Please also explain what Load address/entry point address mean?
bs=512 seek=2
是跳过SD卡的第一个扇区。这有某种引导信息(MBR - 主引导记录或分区 table 是类似的概念),如果你覆盖此信息(或至少需要其他工具来修复它),你将把卡变砖。它在 MMC/SD 卡标准中定义。我想 JEDEC web sight 有它。
加载地址是将SD卡镜像移动到内存(即SDRAM)的地方。入口点是图像加载后手动控制的位置。如果引导代码是用汇编程序编写的并且使用链接器,它们通常是相同的。但是,有时硬编码矢量 table 位于图像的开头,而入口点位于中间的某个位置。无论如何,两者都是物理地址。对于较小的内核,它可能是 'IRAM'(内部静态 ram),但对于 Linux(这需要您的 SDRAM 正常工作),它必须是 SDRAM。如果它是定制板而不是现成的 Vybrid Tower,您可能对此有疑问。此外,还有不同的塔板修订版,它们的工作方式也不同。检查它们的勘误表。最后,不同的U-boot版本支持不同的启动模式。即u-boot是从哪里存储和执行的?地址位于 Cortex-A5 的物理内存映射中的 Vybrid TRM CPU。
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 参考手册(例如 系统启动 章节的 "Expansion Device: SD, eSD and SDXC" 部分).
当配置为从 SD 卡启动时,(SoC 的)ROM 启动程序将在字节偏移量 0x400(或 2 * 512 = 1024)处查找程序映像(例如 U-Boot),它是第三个512字节的扇区。
第一个扇区被假定为 MBR,第二个扇区保留用于可选的次映像 Table(使用 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 内存地址到jump/branch 以执行图像。该值通常与 load address
的地址相同。
对于 ARM Linux 内核,根据 (Vincent Sanders) Booting ARM Linux.[=32=,推荐的加载和 entry-point 地址是从物理内存开始的 0x8000 ] 有关详细信息,请参阅 Building kernel uImage using LOADADDR。