我试图了解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
和内核LOADADDRESS
是10008000
(32K偏移量)。 bootm
命令将内核映像从10008000
解压缩到10008000
地址,然后调用kernel entry point
。
检查include / configs文件夹。 它包含了所有的电路板定义
i.MX uboot include / configs
要将uboot移植到另一个端口,需要在一块非常相似的电路板上进行修改。