uboot修改linux源码中参数,将自定义参数从uboot传入kernel的并读取的方法【转】
希望朋友們多多指點(diǎn),好的技術(shù)或心得一起分享:
uboot向kernel傳參機(jī)制以及kernel如何解析cmdline參數(shù)大家可以參考其他前輩的博文,這方面的講解十分詳盡。
在這里我總結(jié)以下自己在uboot自定義一個(gè)參數(shù)并從kernel中取得的方法:
一.uboot添加自定義參數(shù)number
在uboot命令行下,我通過setenv bootargs以及saveenv命令來在bootargs參數(shù)中添加自己的一個(gè)參數(shù),例如:
=>setenv bootargs xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?number=${num}
=>setenv num 0
=>saveenv
其中bootargs前面部分省略,number為在原bootargs后添加的參數(shù),它會(huì)去取num的值,因此以后只要修改num的值即可(這里先設(shè)置為0)
二.kernel讀取uboot傳入的參數(shù)number:
在想要取得uboot傳入?yún)?shù)的文件中進(jìn)行如下操作:
1.添加頭文件:
#include
2.添加如下內(nèi)容:
static unsigned int number;
static int __init number_setup (char *num)
{
number = *num - '0';
}
__setup("number=", number_setup);
宏__setup("number=", number_setup)會(huì)在bootargs中取得"number="后的值作為函數(shù)number_setup的參數(shù)num,因此只要在number_setup函數(shù)中用全局變量number接收該值即可(此處我將傳入的值作為數(shù)字處理)。
至此,我們就能在kernel中讀取到uboot傳入的自定義參數(shù)值
****************************************************************************************************************
另:作為用戶來說,不可能每次啟動(dòng)都先在uboot命令行下通過setenv,saveenv來修改傳入kernel的環(huán)境變量,因此uboot提供了fw_printenv工具來讓用戶在文件系統(tǒng)下來查看和修改環(huán)境變量,具體步驟如下:
1.編譯fw_printenv工具:
在uboot源碼目錄下,執(zhí)行:
make env ARCH=xxx CROSS_COMPILE=yyy
其中xxx和yyy根據(jù)自己的交叉編譯環(huán)境來配置
接著會(huì)在tools/env下生成fw_printenv的可執(zhí)行文件,將其拷貝到文件系統(tǒng)中的/usr/bin(此路徑可以自己指定)目錄下,再創(chuàng)建fw_printenv的軟鏈接(直接cp也可以):
ln -s /usr/bin/fw_printenv /usr/bin/fw_setenv
2.配置fw_env.config文件
根據(jù)mtd分區(qū)、UBOOT環(huán)境變量的位置、大小等內(nèi)容修改uboot源碼目錄的tools/env下的fw_env.config文件,具體的修改方法見fw_env.config文件中的說明及/tools/env/README文件,我的修改內(nèi)容如下作為參考(需根據(jù)實(shí)際情況來修改):
# MTD device name ? ? ? Device offset ? Env. size ? ? ? Flash sector size
/dev/mtd0 ? ? ? ? ? ? ? 0xc0000 ? ? ? ? 0x2000 ? ? ? ? ?0x10000
其中Device offset,Env size和Flash sector size應(yīng)該分別對(duì)應(yīng)于uboot源碼目錄中include/configs/xxxx.h相關(guān)文件中的
CONFIG_ENV_OFFSET,CONFIG_ENV_SIZE和CONFIG_ENV_SECT_SIZE三個(gè)宏定義
修改完成后,將fw_env.config文件拷貝到文件系統(tǒng)的/etc目錄下。
3.fw_printenv的使用
在文件系統(tǒng)中輸入fw_printenv命令來查看環(huán)境變量,輸入fw_setenv xxx yyy 來修改環(huán)境變量(xxx為變量名,yyy為變零值),方法類似setenv,修改后會(huì)自動(dòng)保存,詳細(xì)用法通過fw_printenv --help命令來查看
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的uboot修改linux源码中参数,将自定义参数从uboot传入kernel的并读取的方法【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux环境下c回车,linux_C
- 下一篇: linux WiFi源码解析,Wifi移