SDRAM の一部 (たとえば 4 バイト) を予約して、U-Boot と Linux カーネルの間でフラグを渡し、この予約済みメモリ ロケーションがリンカによって初期化されず、ウォーム ブート後に値が保持されるようにするにはどうすればよいですか? 組み込みアプリケーションで使用される NAND フラッシュの消耗を最小限に抑えるために、bootargs の使用を避けようとしています。私の質問は 、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 = .;
}
何か案は?