web-dev-qa-db-ja.com

u-bootブートローダーはどのように環境変数を読み取り/保存しますか?

  • U-bootブートローダーが環境変数を読み取る/保存する方法は?
  • フラッシュのu-boot環境変数セクションのアドレスをどのように宣言しますか?

  • ここ の説明から:U-Boot環境は、永続ストレージに保持され、RAM)にコピーされるメモリのブロックです。 U-Bootの起動時

"RAMにコピー"の意味は何ですか?

U-bootは、環境変数のメモリブロックをRAM?

ありがとう

12
Thang Le

はい、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用です) )。

10
Joe Kul

環境変数ブロックのアドレスとサイズは、ボードヘッダーファイルで定義されます。 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を介して保存できます。

6
yegorich