Резервирование части SDRAM для передачи данных между U-Boot и ядром Linux

Как я могу зарезервировать часть SDRAM, скажем, 4 байта, чтобы передать флаг между U-Boot и ядром Linux, чтобы это зарезервированное место в памяти не инициализируется компоновщиком и значение сохраняется после горячей перезагрузки? Я стараюсь избегать использования bootargs, чтобы свести к минимуму износ флэш-памяти NAND, используемой во встроенном приложении. Мой вопрос можно считать расширением решения, предоставленного: Как отличить холодную перезагрузку от «горячей» на процессоре ARM?

Я собрал 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 = .;
}

Есть идеи?

8
задан Community 23 May 2017 в 10:30
поделиться