1. 程式人生 > >ubootenv工具fw_printenv及配置檔案fw_env.config

ubootenv工具fw_printenv及配置檔案fw_env.config

希望朋友們多多指點,好的技術或心得一起分享:

    uboot向kernel傳參機制以及kernel如何解析cmdline引數大家可以參考其他前輩的博文,這方面的講解十分詳盡。

    在這裡我總結以下自己在uboot自定義一個引數並從kernel中取得的方法:

一.uboot新增自定義引數number

    在uboot命令列下,我通過setenv bootargs以及saveenv命令來在bootargs引數中新增自己的一個引數,例如:

  =>setenv bootargs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx number=${num}

  =>setenv num 0 

  =>saveenv

    其中bootargs前面部分省略,number為在原bootargs後新增的引數,它會去取num的值,因此以後只要修改num的值即可(這裡先設定為0)

二.kernel讀取uboot傳入的引數number:

在想要取得uboot傳入引數的檔案中進行如下操作:

  1.新增標頭檔案:   #include <linux/init.h>   2.新增如下內容:   static unsigned int number;   static int __init number_setup (char *num)   {       number = *num - '0';   }   __setup("number=", number_setup);

  巨集__setup("number=", number_setup)會在bootargs中取得"number="後的值作為函式number_setup的引數num,因此只要在number_setup函式中用全域性變數number接收該值即可(此處我將傳入的值作為數字處理)。

  至此,我們就能在kernel中讀取到uboot傳入的自定義引數值

****************************************************************************************************************

另:作為使用者來說,不可能每次啟動都先在uboot命令列下通過setenv,saveenv來修改傳入kernel的環境變數,因此uboot提供了fw_printenv工具來讓使用者在檔案系統下來檢視和修改環境變數,具體步驟如下:

1.編譯fw_printenv工具:

    在uboot原始碼目錄下,執行:

        make env ARCH=xxx CROSS_COMPILE=yyy

    其中xxx和yyy根據自己的交叉編譯環境來配置

    接著會在tools/env下生成fw_printenv的可執行檔案,將其拷貝到檔案系統中的/usr/bin(此路徑可以自己指定)目錄下,再建立fw_printenv的軟連結(直接cp也可以):

        ln -s /usr/bin/fw_printenv /usr/bin/fw_setenv

2.配置fw_env.config檔案

    根據mtd分割槽、UBOOT環境變數的位置、大小等內容修改uboot原始碼目錄的tools/env下的fw_env.config檔案,具體的修改方法見fw_env.config檔案中的說明及/tools/env/README檔案,我的修改內容如下作為參考(需根據實際情況來修改):

# MTD device name       Device offset   Env. size       Flash sector size /dev/mtd0               0xc0000         0x2000          0x10000

其中Device offset,Env size和Flash sector size應該分別對應於uboot原始碼目錄中include/configs/xxxx.h相關檔案中的

CONFIG_ENV_OFFSET,CONFIG_ENV_SIZE和CONFIG_ENV_SECT_SIZE三個巨集定義

修改完成後,將fw_env.config檔案拷貝到檔案系統的/etc目錄下。

3.fw_printenv的使用

    在檔案系統中輸入fw_printenv命令來檢視環境變數,輸入fw_setenv xxx yyy 來修改環境變數(xxx為變數名,yyy為變零值),方法類似setenv,修改後會自動儲存,詳細用法通過fw_printenv --help命令來檢視