use*_*586 8 linux-kernel embedded-linux u-boot
在构建内核时,我将LOADADDR作为"0x80008000":
make uImage LOADADDR=0x80008000
Run Code Online (Sandbox Code Playgroud)
你能帮忙了解一下这有什么用吗?我可以更改LOADADDR,LOADADDR的长度是否有任何限制?
saw*_*ust 12
(我假设您在使用U-Boot和LOADADDR的值时使用ARM.)
你能帮忙了解一下这有什么用吗?
LOADADDR指定链接器将内核映像定位的地址.(对于一些架构(例如Blackfin)来说这是事实,但对于ARM则不然.
LOADADDR通过U-Boot指定内核映像所在的地址,并由mkimage实用程序存储在U-Boot头中.通常,加载地址(用于放置在存储器中)也是起始地址(用于执行).请注意,uImage文件通常只是带有U-Boot包装器的(自解压缩的)zImage文件.
我可以更改LOADADDR吗?
是的,但根据(Vincent Sanders)的引导ARM Linux,这将违反ARM惯例:
(你问题中提到的uImage可能只是带有U-Boot包装器的zImage,所以引用确实适用.)
对LOADADDR的长度有任何限制吗?
" 长度 "?如果您使用的是32位处理器,则该地址的长度为32位.
附录
arch/arm/boot/Makefile仅使用LOADADDR从zImage构建uImage.
从(Russel King)引导ARM Linux开始,对此LOADADDR的约束是:
内核应该放在第一个128MiB的RAM中.建议将其加载到32MiB以上,以避免在解压缩之前重新定位,这将使引导过程稍微加快.
在引导原始(非zImage)内核时,约束更严格.在这种情况下,内核必须在系统的偏移处加载,等于TEXT_OFFSET - PAGE_OFFSET.
设备树或ATAG或initramfs的预期位置可以在此LOADADDR上添加更多约束.
| 归档时间: |
|
| 查看次数: |
11085 次 |
| 最近记录: |