嵌入式linux ARM启动地址

时间:2016-09-29 10:06:04

标签: arm embedded-linux u-boot

我按照一些文档通过sdcard在ARM板上启动嵌入式Linux(例如:Freescale 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(入口点)

还请解释加载地址/入口点地址的含义?

3 个答案:

答案 0 :(得分:8)

  

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

bs=512 seek=2规范应该来自SoC的恩智浦/飞思卡尔参考手册(例如"扩展设备:SD,eSD和SDXC" 系统启动部分章节)。

当配置为从SD卡启动时,ROM启动程序(SoC)将在字节偏移0x400(或2 * 512 = 1024)处寻找程序映像(例如U-Boot),这是第三个512 - 字节。
第一个扇区被假定为MBR,第二个扇区被保留用于可选的二级图像表(使用恩智浦文件中的术语)。

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

  

还请解释加载地址/入口点地址的含义?

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

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

根据(Vincent Sanders')Booting ARM Linux,对于ARM Linux内核,建议的加载和入口点地址从物理内存开始是0x8000。 有关详细信息,请参阅Building kernel uImage using LOADADDR

答案 1 :(得分:2)

  

还请解释加载地址/入口点地址的含义?

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

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

答案 2 :(得分:0)

  

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

     

还请解释加载地址/入口点地址的含义?

test "bar" do # < Setup code that triggers your process under test goes here > # I put this here because I noticed that sometimes the process would not be # fast enough to be registered - this was a quick fix. :timer.sleep(100) ref = Process.monitor(Process.whereis(:worker)) # assert_receive will block the test until your registered process exits, # or 10 seconds have passed (then something is wrong with the external service perhaps and the test will fail) assert_receive {:DOWN, ^ref, :process, _, :normal}, 10000 # At this point the process has exited, continue with whatever assertions you want to make end 是跳过SD卡的第一个扇区。这有一些启动信息(MBR - 主启动记录或分区表是类似的概念),如果你覆盖这些信息(或者至少需要其他工具来修复它),你将会破坏卡。它在MMC / SD卡标准中定义。我认为JEDEC网站有它。

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