Zynq Linux内核加载地址

时间:2018-11-07 18:02:50

标签: linux linux-kernel u-boot zynq

我想为zed board构建linux。当我查看u-boot / include / configs目录中的zynq-common.h文件时,我看到kernel_load_address为0x02080000。

为什么内核加载地址为0x02080000? 它的逻辑是什么?

我正在使用版本2018.01。 我在CONFIG_EXTRA_ENV_SETTINGS中提到的值为“ kernel_load_address = 0x2080000”

2 个答案:

答案 0 :(得分:1)

我认为这不是实际的加载地址。 UBoot默认情况下应将其加载到0x8000。它可以被修改,但是您不会想要通过头文件来做到这一点。

(您不必查看这些文件,尤其是无需修改它们。)

如果您要为zedboard构建内核,我建议您遵循以下两个指南: https://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/software/linux/zynq_2014r2 https://highlevel-synthesis.com/2016/10/31/how-to-compile-xilinx-linux-kernel-for-zynq/

如果您不想在需要4到6个小时甚至更多小时的平台上构建内核,那么您还将需要Xilinx的工具链(我以前已经做过,很有趣)。

答案 1 :(得分:0)

  

我提到的值是CONFIG_EXTRA_ENV_SETTINGS中的“ kernel_load_address = 0x2080000”

该特定环境变量不是U-Boot的主线版本。因此,显然您正在使用自定义版本。

使用该env变量很可能通过主存储器中的输入命令来定位内核映像。由于这是ARM板,因此内核映像将是zImage或uImage(其中将包含zImage)。
zImage能够解压缩自身,并将内核映像重新定位到其适当的加载地址以进行实际执行。
该最终加载地址通常是物理内存的开头加上0x8000。参见https://stackoverflow.com/questions/31725605/buhttps://stackoverflow.com/questions/31725605/building-kernel-uimage-using-loadaddrilding-kernel-uimage-using-loadaddr

由于内核将在解压缩期间重定位,因此U-boot用于读取压缩内核映像的中间内存地址不是至关重要的。附加到zImage的解压缩代码与位置无关,因此可以灵活地将zImage加载到内存中。只要zImage驻留在高于内核实际加载地址的内存中,就不会出现问题(即额外的重定位)。