1. 程式人生 > >在linux系統中通過fw_printenv檢視和設定u-boot中的環境變數

在linux系統中通過fw_printenv檢視和設定u-boot中的環境變數

uboot下可以通過命令訪問和修改環境變數,但是如果需要在Linux系統下訪問這些資料該怎麼辦呢?其實uboot早就幫我們想好了。
 
    1、編譯fw_printenv工具
    在你使用的uboot程式碼中用以下編譯指令:
    make env
    這樣就可以編譯tools/env下的程式碼,編譯出的fw_printenv工具有讀寫uboot環境變數區的能力。這個工具是針對目標機的,也就是說如果你的uboot程式碼之前是針對ARM編譯的話,fw_printenv也是交叉編譯給ARM晶片的。

    2、安裝fw_printenv工具
    到/tools/env目錄中,將編譯好的fw_printenv拷貝到目標機的檔案系統中,並通過"ln -s fw_printenv fw_setenv",建立一個fw_setenv到fw_printenv的軟鏈。

    這個工具還需要一個配置檔案,以獲取uboot的ENV區域的位置資訊。預設狀態下,請將fw_env.config檔案拷貝到目標機的檔案系統的/etc目錄下。然後結合uboot配置中定義的ENV區和Linux下mtd分割槽的情況修改配置檔案。具體的修改方法見fw_env.config檔案中的說明及/tools/env/README檔案。

以s3c2416為例,s3c2416的配置檔案在include/configs/smdk2416.h,在檔案中找到了這樣幾個定義:

#define CFG_ENV_ADDR        0
#define CFG_ENV_SIZE        0x4000  /* Total Size of Environment Sector */
#define CFG_ENV_OFFSET      0x0003c00

跟據以上三個定義修改fw_env.config:


    3、fw_printenv工具的使用
    其實fw_printenv使用起來和uboot下的printenv和setenv指令是一模一樣的。
    列印uboot環境變數:

    fw_printenv [[ -n name ] | [ name ... ]]

   如果不指定name,fw_printenv會打印出ENV區中的所有環境變

      

設定uboot環境變數:
fw_setenv name [ value ... ]

如果不指定value,表示要刪除這個name的環境變數。