【发布时间】:2017-04-08 08:30:10
【问题描述】:
如何保留 SDRAM 的一部分,比如 4 个字节,以便在 U-Boot 和 Linux 内核之间传递一个标志,以便链接器不会初始化这个保留的内存位置,并且在热启动后保留该值?我试图避免使用引导参数来最大限度地减少嵌入式应用程序中使用的 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 = .;
}
有什么想法吗?
【问题讨论】:
-
你用的是什么板子?多功能板还是定制板?你在说什么 SRAM?
-
板子是at91sam9g45,实际上是DDR2-SDRAM。
-
为知道如何正确拼写 U-Boot 点赞。
-
你已经有一块 ram 用于放置 linux 内核,可选择放置根文件系统,在该空间内你还放置 ATAG 和/或设备树,然后传递该地址进入内核。不知道你为什么要“分配”那个空间,你是一个引导加载程序,你拥有所有的芯片资源,包括内存。您不用于引导加载程序的是上述项目的所有可用空间。此外,您还可以根据需要使用更多空间来传递您认为需要的任何其他东西。
标签: memory linux-kernel arm embedded-linux u-boot