了解U-Boot进程的Linux加载地址

我试图了解embedded式Linux的原理,并不能找出u-boot输出的地址。

例如,我有基于i.MX6四核处理器的UDOO板,并从U-Boot获得以下输出:

U-Boot 2013.10-rc3 (Jan 20 2014 - 13:33:34) CPU: Freescale i.MX6Q rev1.2 at 792 MHz Reset cause: POR Board: UDOO DRAM: 1 GiB MMC: FSL_SDHC: 0 No panel detected: default to LDB-WVGA Display: LDB-WVGA (800x480) In: serial Out: serial Err: serial Net: using phy at 6 FEC [PRIME] Warning: FEC MAC addresses don't match: Address in SROM is 00:c0:08:88:a5:e6 Address in environment is 00:c0:08:88:9c:ce Hit any key to stop autoboot: 0 Booting from mmc ... 4788388 bytes read in 303 ms (15.1 MiB/s) ## Booting kernel from Legacy Image at 12000000 ... Image Name: Linux-3.0.35 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 4788324 Bytes = 4.6 MiB Load Address: 10008000 Entry Point: 10008000 Verifying Checksum ... OK Loading Kernel Image ... OK Starting kernel ... 

我不明白加载地址0x10008000的值。 根据这个特定处理器的文档,在地址区域0x10000000 – 0xffffffff被映射的主存储器。 但什么是0x8000抵消? 我找不出这个价值的原因。

我也不明白地址0x12000000,从哪里加载内核图像。 有没有映射SD卡的内存区域?

请给我一些这些地址的解释,甚至更好地提供一些关于这个主题的资源。 我的目标是学习如何将u-boot和Linux内核移植到另一个主板上。

谢谢!

如果你检查u-boot的环境变量,你会发现通过像fatload这样的命令将内核映像从引导设备复制到RAM位置(这里是fatload

现在,这不是LOADADDRESS 。 在编译内核时,您将LOADADDRESS给命令行,该地址大多位于处理器的物理地址空间中RAM的起始偏移32K处。

您的RAM映射到10000000和内核LOADADDRESS10008000 (32K偏移量)。 bootm命令将内核映像从10008000解压缩到10008000地址,然后调用kernel entry point

检查include / configs文件夹。 它包含了所有的电路板定义

i.MX uboot include / configs

要将uboot移植到另一个端口,需要在一块非常相似的电路板上进行修改。