我试图理解嵌入式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内核移植到另一个主板上。
谢谢!
答案 0 :(得分:10)
如果检查u-boot的环境变量,您会发现内核映像通过12000000
之类的命令从引导设备复制到RAM位置(此处为fatload
)。 p>
现在,这不是LOADADDRESS
。在编译内核时将LOADADDRESS
赋予命令行,该地址大多数位于处理器物理地址空间中RAM的起始位置偏移32K。
您的RAM映射到10000000
,内核LOADADDRESS
为10008000
(32K偏移量)。 bootm
命令将内核映像从12000000
解压缩到10008000
地址,然后调用kernel entry point
。
答案 1 :(得分:1)