フラッシュのu-boot環境変数セクションのアドレスをどのように宣言しますか?
ここ の説明から:U-Boot環境は、永続ストレージに保持され、RAM)にコピーされるメモリのブロックです。 U-Bootの起動時
"RAMにコピー"の意味は何ですか?
U-bootは、環境変数のメモリブロックをRAM?
ありがとう
はい、U-bootは環境変数のメモリブロックをRAMにコピーします。
ブロックの元となる永続ストレージは、プラットフォーム固有です。いくつかの一般的なストレージオプション(およびそのストレージオプションを処理するソースファイル):
NOR flash env/flash.c
SPI flash env/sf.c
MMC env/mmc.c
Include/configs /yourboard.hのCONFIG_定義が詳細を決定します。たとえば、SPIフラッシュがメモリの上部にマップされている場合、次のようになります。
#define CONFIG_ENV_IS_IN_SPI_FLASH
#define CONFIG_ENV_SIZE 0x00001000
#define CONFIG_ENV_ADDR 0xFFFFF000
CONFIG_ENV_ADDRは、フラッシュのu-boot環境変数セクションのアドレスです。
U-bootは、環境を永続ストレージに書き込むときに、このセクションにCRC32を自動的に作成することに注意してください。そのCRCは、起動時に環境が読み取られるときにチェックされます。 CRCチェックに合格しない場合、保存された環境は使用されません。代わりに、プログラムコードにハードコードされた新しいデフォルト環境が使用されます。これは特別な場合です。
U-Bootの初期化中に、環境変数がハッシュテーブルにインポートされます。動作中、すべての読み取り/書き込み操作、およびすべての「printenv」(環境変数の表示)および「setenv」(環境変数の設定)コマンドは、これらのテーブルエントリを使用します。永続ストレージに書き込むコマンド「saveenv」が実行されるまで、変更は保存されません。
詳細については、 -boot/common/cmd_nvedit.c 14〜24行目および -boot/README 3474〜3881行目を参照してください(行番号はv2013.10用です) )。
環境変数ブロックのアドレスとサイズは、ボードヘッダーファイルで定義されます。 include/configs/am3517_evm.h を参照してください。例:
#define CONFIG_SYS_ENV_SECT_SIZE (128 << 10) /* 128 KiB */
#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
#define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
u-bootはCONFIG_SYS_ENV_SECT_SIZE
からSMNAND_ENV_OFFSET
をロードします。値を変更してから、saveenv
を介して保存できます。