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



我试图理解嵌入式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位置(这里,12000000)。

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

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

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

i.MX uboot 包含/配置

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

最新更新