簡體   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