大致流程如下:
開機預設執行 bootcmd → 執行 mmcboot → 執行 loadbootenv → 執行 importbootenv 載入環境變數 → 執行 uenvcmd (如果有的話)。
開機執行的 bootcmd 會去執行 mmcboot:
bootcmd=run findfdt; run mmcboot;setenv mmcdev 1; setenv bootpart 1:2; run mmcboot;run nandboot;mmcboot 執行 loadbootenv 成功的話,執行 importbootenv 載入環境變數。如果 uEnv.txt 有 uenvcmd,就執行它。
mmcboot=mmc dev ${mmcdev};
if mmc rescan; then
echo SD/MMC found on device ${mmcdev};
if run loadbootenv; then
echo Loaded environment from ${bootenv};
run importbootenv;
fi;
if test -n $uenvcmd; then
echo Running uenvcmd ...;
run uenvcmd;
fi;
if run loadimage; then
run mmcloados;
fi;
fi;
loadbootenv 將 bootenv (也就是 uEnv.txt) 載入到記憶體 loadaddr 的位置:
loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}
importbootenv 將記憶體中的環境變數用 env import 載入:
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
註解:#
參考來源:
- BeagleBone Black u-boot
- u-boot source code: lib/hashtable.c himport_r()
沒有留言:
張貼留言