• 正文
    • 一、查看環(huán)境變量
    • 二、增改刪環(huán)境變量
    • 三、bootargs
    • 四、bootcmd
    • 五、bootdelay
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-Uboot常用命令之環(huán)境變量命令

5小時(shí)前
129
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

uboot中環(huán)境變量的作用就是在不改變?cè)创a、不用重新編譯的情況下,可以使我們通過(guò)設(shè)置環(huán)境變量的值來(lái)改變uboot的一些設(shè)置。uboot開(kāi)機(jī)時(shí)會(huì)一次性從存儲(chǔ)介質(zhì)(啟動(dòng)介質(zhì))中讀取全部的環(huán)境變量到內(nèi)存中作為環(huán)境變量的初始值,uboot運(yùn)行過(guò)程中用到的環(huán)境變量,都是內(nèi)存中的環(huán)境變量,用戶可以使用saveenv指令將內(nèi)存中的環(huán)境變量重新寫入存儲(chǔ)介質(zhì)(啟動(dòng)介質(zhì))中,下次重啟系統(tǒng)時(shí)會(huì)從存儲(chǔ)介質(zhì)(啟動(dòng)介質(zhì))中讀取更新過(guò)的環(huán)境變量。

一、查看環(huán)境變量

輸入printenv命令,即可查看所有環(huán)境變量(圖片只截取了一部分):

圖中我們看到環(huán)境變量的基本模式是:變量名=變量值,這個(gè)變量值就是一串字符串,程序通過(guò)解析字符串,得到所需參數(shù)(如baudrate=115200)或者所要執(zhí)行的操作(如mmcargs)。

二、增改刪環(huán)境變量

(一)我們可以添加一個(gè)自己的環(huán)境變量,比如添加一個(gè)firstenv變量,并設(shè)置值為elf:

=>setenv firstenv elf

保存:

=>saveenv

saveenv命令是保存環(huán)境變量到eMMC Flash,如果不使用此命令,那么只是將環(huán)境變量存儲(chǔ)到了內(nèi)存中,斷電之后,此變量將丟失。

然后使用printenv命令查看環(huán)境變量添加成功:

=>printenv

filesize=5fa38

firstenv=elf

image=zImage

或者使用“printenv 變量名”查看:

=> printenv firstenv

firstenv=elf

(二)更改環(huán)境變量的值,這次我們不保存saveenv:

=> setenv firstenv imx6ull

然后使用printenv命令查看結(jié)果,變量值更改成功:

=> printenv firstenv

firstenv imx6ull

(三)刪除一個(gè)環(huán)境變量,刪除firstenv環(huán)境變量,使用setenv變量名,不賦任何值:

=> setenv firstenv

=> saveenv

使用printenv查看結(jié)果,發(fā)現(xiàn)該變量不存在,表示刪除成功:

=> printenv firstenv

# # Error: “firstenv” not defined

三、bootargs

bootargs是一個(gè)重要的環(huán)境變量,主要是給內(nèi)核傳遞參數(shù),整個(gè)環(huán)境變量都是圍繞著bootargs來(lái)設(shè)置的。bootargs非常的靈活,內(nèi)核和文件系統(tǒng)的不同搭配就會(huì)有不同的設(shè)置方法。下面介紹一下bootargs常用參數(shù),bootargs的種類繁多,而且隨著kernel的發(fā)展會(huì)出現(xiàn)一些新的參數(shù),使得設(shè)置會(huì)更加靈活多樣。

我們現(xiàn)在使用printenv bootargs命令查看一下bootargs環(huán)境變量:

=> printenv bootargs

# # Error: “bootargs” not defined

可以看到bootargs并沒(méi)有設(shè)置,使用printenv命令查看,發(fā)現(xiàn)bootargs是在mmcargs環(huán)境變量中設(shè)置的,而mmcargs是在bootdelay倒計(jì)時(shí)結(jié)束之后,由bootcmd(bootcmd介紹在下一節(jié))執(zhí)行的:

我們使用run命令執(zhí)行一下mmcargs:

=> run mmcargs

然后再printenv bootargs,可以看到bootargs環(huán)境變量設(shè)置成功:

=> printenv bootargs

bootargs=console=ttymxc0,115200 calibrate=y root=/dev/mmcblk1p2 rootwait rw

其中:

console:表示使用的串口終端控制臺(tái),這里使用的是ttymxc0,波特率是115200。

root:表示文件系統(tǒng)相關(guān)參數(shù)。其中/dev/mmcblk1p2表示rootfs文件系統(tǒng)掛載分區(qū)為mmcblk1的p2分區(qū)。

rootwait是指等待設(shè)備/dev/mmcblk1p2設(shè)備就緒后才嘗試掛載rootfs。如果沒(méi)有此參數(shù),Linux內(nèi)核啟動(dòng)時(shí)可能會(huì)在存儲(chǔ)設(shè)備尚未就緒時(shí)就嘗試掛載rootfs,此時(shí)肯定掛載失敗,那么啟動(dòng)也就失敗了。

rw:聲明啟動(dòng)權(quán)限,即以讀寫方式啟動(dòng)。

四、bootcmd

bootcmd在bootdelay倒計(jì)時(shí)結(jié)束之后開(kāi)始執(zhí)行的第一條命令,主要用于啟動(dòng)內(nèi)核。例如:

=> printenv bootcmd

bootcmd=run findfdt;mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi

這個(gè)bootcmd的就是一個(gè)命令集,根據(jù)設(shè)置好的環(huán)境變量,按照一定的邏輯啟動(dòng)內(nèi)核。關(guān)于此處的啟動(dòng)邏輯不再深入講解,有興趣的可以展開(kāi)其中環(huán)境變量進(jìn)行深究。

五、bootdelay

用于倒計(jì)時(shí),等待用戶進(jìn)入命令行。經(jīng)過(guò)以上章節(jié)講解,通過(guò)senenv可以設(shè)置bootdelay時(shí)間。

=> printenv bootdelay

bootdelay=3

相關(guān)推薦