フラッシュを接続せずに U-Boot 環境変数を保存する

フラッシュを接続せずに U-Boot 環境変数を保存する

U-Bootのbootdelay 0環境変数を回避してU-Boot CLIにアクセスする方法についてのブログ投稿をいくつか見ました。例は次のとおりです。ここ私が理解している一般的なプロセスは次のとおりです。

  1. フラッシュチップをはんだ付け解除/ショートして、U-Boot がアクセスできないようにします。
  2. デバイスの電源をオンにする
  3. U-Boot がフラッシュ チップを見つけられず、CLI に落ちる

    eth1 up
    eth0, eth1
    Qualcomm Atheros SPI NAND Driver, Version 0.1 (c) 2014  Qualcomm Atheros Inc.
    ath_spi_nand_ecc: Couldn't enable internal ECC
    Setting 0x181162c0 to 0x3061a100
    Hit any key to stop autoboot:  0 
    ** Device 0 not available
    ath>
    
  4. bootdelay をゼロ以外の値に変更します。

    ath> setenv bootdelay 3
    ath> saveenv
    Saving Environment to Flash...
    Protect off 9F040000 ... 9F04FFFF
    Un-Protecting sectors 4..4 in bank 1
    Un-Protected 1 sectors
    Protect off 9F050000 ... 9F05FFFF
    Un-Protecting sectors 5..5 in bank 1
    Un-Protected 1 sectors
    Erasing Flash... 9F050000 ... 9F05FFFF ...Erasing flash... 
    First 0x5 last 0x5 sector size 0x10000 5
    Erased 1 sectors
    Writing to Flash...  9F050005 ... 9F060000 ...write addr: 9f050000
    write addr: 9f040004
    done
    Protecting sectors 5..5 in bank 1
    Protected 1 sectors
    Protecting sectors 4..4 in bank 1
    Protected 1 sectors
    ath>
    
  5. デバイスの電源をオフにして、フラッシュ チップを再接続します。

私の知る限り、U-Boot とその環境変数はフラッシュに存在します。フラッシュ チップが CPU から切断されている場合、U-Boot はどのようにしてロードされ、bootdelay 変数はどのようにして永続ストレージに保存されるのでしょうか。

答え1

これは非常に特殊な例です。この特定の例では、U-Boot が NOR フラッシュ (1 つのチップ) に存在し、Linux カーネルが NAND フラッシュ (2 つ目のチップ) に存在します。参照ガイドでは、ボードから NAND チップを取り外してブートが失敗するように指示されています。U-Boot のコマンド ラインにドロップし、この場合 U-Boot は NOR フラッシュにも環境を保存するように構成されているため、ブート遅延を変更して保存できます。

関連情報