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

时间:2015-01-24 17:41:11

标签: linux arm embedded-linux boot u-boot

我试图理解嵌入式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内核移植到另一个主板上。

谢谢!

2 个答案:

答案 0 :(得分:10)

如果检查u-boot的环境变量,您会发现内核映像通过12000000之类的命令从引导设备复制到RAM位置(此处为fatload)。 p>

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

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

答案 1 :(得分:1)

签出include / configs文件夹。它包含所有电路板定义

i.MX uboot include/configs

将uboot移植到另一个端口,基于非常相似的板并从那里进行修改。