内存 – 保留一部分SDRAM以在U-Boot和Linux内核之间传递数据

内存 – 保留一部分SDRAM以在U-Boot和Linux内核之间传递数据,第1张

概述如何保留SDRAM的一部分,比如4个字节,在U-Boot和 Linux内核之间传递一个标志,以便链接器不会初始化这个保留的内存位置,并在热启动后保留该值?我试图避免使用bootargs来最小化嵌入式应用程序中使用的NAND闪存的磨损.我的问题可以被认为是对解决方案的扩展: How to detect cold boot versus warm boot on an ARM processor? 我 如何保留SDRAM的一部分,比如4个字节,在U-Boot和 Linux内核之间传递一个标志,以便链接器不会初始化这个保留的内存位置,并在热启动后保留该值?我试图避免使用bootargs来最小化嵌入式应用程序中使用的NAND闪存的磨损.我的问题可以被认为是对解决方案的扩展:
How to detect cold boot versus warm boot on an ARM processor?

我用下面的链接器脚本构建了u-boot.lds并使用以下代码构建它:
-fno-zero-initialized-in-bss没有成功.

OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{ . = 0x00000000; . = AliGN(4); .text : {  cpu/arm926eJs/start.o (.text)  *(.text) } . = AliGN(4); .rodata : { *(SORT_BY_AlignmENT(SORT_BY_name(.rodata*))) } . = AliGN(4); .data : { *(.data) } . = AliGN(4); .got : { *(.got) } . = .; __u_boot_cmd_start = .; .u_boot_cmd : { *(.u_boot_cmd) } __u_boot_cmd_end = .; . = AliGN(4); __bss_start = .; _U_BOOT_FLAG = .;  . = . + 4; .bss (NolOAD) : { *(.bss) . = AliGN(4); } _end = .;}

有任何想法吗?

解决方法 已经有一种在U-Boot和linux ARM内核之间传递数据的方法.它被称为ATAG内存列表.使用此数据列表将可用内存区域和板信息等信息从U-Boot传递到linux ARM内核.您可以为数据定义自定义ATAG.在U-Boot中,添加例程以在lib_arm / armlinux.c中构建ARM标记.然后在arch / arm / kernel / setup.c中处理ATAG.

有关文档,请参见this或this alt site的第8节.

附录
引用的ATAG文档的链接很脆弱(即使Google有一个错误的链接).
尝试搜索文档的实际名称,即vincent Sanders的“Booting ARM linux”.
目前在Google的simtec网站缓存中有一个副本,更广泛的搜索出现了translation in Korean(?).

Russel King在ARM启动时的另一个或更早版本(?)(但似乎已经更新)是here.

总结

以上是内存溢出为你收集整理的内存 – 保留一部分SDRAM以在U-Boot和Linux内核之间传递数据全部内容,希望文章能够帮你解决内存 – 保留一部分SDRAM以在U-Boot和Linux内核之间传递数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1039820.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存