繁体   English   中英

Zynq Linux 内核加载地址

[英]Zynq Linux Kernel Load address

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

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

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

我不认为那是实际的加载地址。 默认情况下,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 的工具链(我以前不得不这样做,不好玩)。

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

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

使用该 env 变量可能会在主内存中使用输入命令定位内核映像。 由于这是一个 ARM 板,内核映像将是一个 zImage 或 uImage(将包含一个 zImage)。
zImage 能够解压缩自身并将内核映像重新定位到其正确的加载地址以供实际执行。
最终加载地址通常是物理内存的开始加上 0x8000。 请参阅使用 LOADADDR 构建内核 uImage

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM