uboot的環境變量bootcmd和bootargs

bootcmd

bootcmd是自動啓動時默認執行的一些命令,你可以在當前環境中定義各種不同配置,不同環境的參數設置,然後設置bootcmd爲你經常使用的那種參數。

bootargs

    bootargs是環境變量中的重中之重,甚至可以說整個環境變量都是圍繞着bootargs來設置的。bootargs的種類非常多,我們平常只使用幾種。bootargs非常靈活,內核和文件系統的不同搭配就會有不同的設置方法,甚至你也可以不設置bootargs,而直接將其寫到內核中去(在配置內核的選項中可以進行這樣的設置)正是這些原因導致了bootargs使用上的困難。

下面介紹一下bootargs常用參數

A. root 

用來指定rootfs的位置, 常見的情況有

    root=/dev/ram rw   

    root=/dev/ram0 rw

  請注意上面的這兩種設置情況是通用的,我做過測試甚至root=/dev/ram1 rwroot=/dev/ram2 rw也是可以的,網上有人說在某些情況下是不通用的,即必須設置成ram或者ram0,但是目前還沒有遇到,還需要進一步確認,遇到不行的時候可以逐一嘗試。

    root=/dev/mtdx rw

    root=/dev/mtdblockx rw

    root=/dev/mtdblock/x rw

    root=31:0x

  上面的這幾個在一定情況下是通用的,當然這要看你 當前的系統是否支持,不過mtd是字符設備,而mtdblock是塊設備,有時候你的挨個的試到底當前的系統支持上面那種情況下,不過root=/dev /mtdblockx rw比較通用。此外,如果直接指定設備名可以的話,那麼使用此設備的設備號也是可以的。

    root=/dev/nfs

    在文件系統爲基於nfs的文件系統的時候使用。當然指定root=/dev/nfs之後,還需要指定nfsroot=serverip:nfs_dir,即指明文件系統存在那個主機的那個目錄下面。

B. rootfstype 

    這個選項需要跟root一起配合使用,一般如果根文件系統是ext2的話,有沒有這個選項是無所謂的,但是如果是jffs2、squashfs等文件系統的話,就需要rootfstype指明文件系統的類型,不然會無法掛載根分區.

C. console 

console=tty  使用虛擬串口終端設備 .

console=ttyS[,options] 使用特定的串口,options可以是這樣的形式bbbbpnx,這裏bbbb是指串口的波特率,p是奇偶位(從來沒有看過使用過),n是指的bits

console=ttySAC[,options] 同上面。

看你當前的環境,有時用ttyS,有時用ttySAC,網上有人說,這是跟內核的版本有關,2.4ttyS2.6用 ttySAC,但實際情況是官方文檔中也是使用ttyS,所以應該是跟內核版本沒有關聯的。可以查看Documentation/serial- console.txt找到相關描述。

D. mem

mem=xxM 指定內存的大小,不是必須的

E. ramdisk_size

ramdisk=xxxxx       不推薦   

ramdisk_size=xxxxx   推薦

上面這兩個都可以告訴ramdisk驅動,創建的ramdisksize,默認情況下是4m(s390默認8M),你可以查看Documentation/ramdisk.txt找到相關的描述,不過ramdisk=xxxxx在新版的內核都已經沒有提了,不推薦使用。

F. initrd, noinitrd

當你沒有使用ramdisk啓動系統的時候,你需要使用noinitrd這個參數,但是如果使用了的話,就需要指定initrd=r_addr,size, r_addr表示initrd在內存中的位置,size表示initrd的大小。

G. init

init 指定的是內核啓起來後,進入系統中運行的第一個腳本,一般init=/linuxrc, 或者init=/etc/preinitpreinit的內容一般是創建console,null設備節點,運行init程序,掛載一些文件系統等等操 作。請注意,很多初學者以爲init=/linuxrc是固定寫法,其實不然,/linuxrc指的是/目錄下面的linuxrc腳本,一般是一個連接罷 了。

H. mtdparts

mtdparts=fc000000.nor_flash:1920k(linux),128k(fdt),20M(ramdisk),4M(jffs2),38272k(user),256k(env),384k(uboot)

要 想這個參數起作用,內核中的mtd驅動必須要支持,即內核配置時需要選上Device Drivers  ---> Memory Technology Device (MTD) support  ---> Command line partition table parsing

mtdparts的格式如下:

mtdparts=[;

  := :[,]

  := [@offset][][ro]

   := unique id used in mapping driver/device

    := standard linux memsize OR "-" to denote all remaining space

    := (NAME)

因此你在使用的時候需要按照下面的格式來設置:

mtdparts=mtd-id:@(),@()

這裏面有幾個必須 要注意的:

a.  mtd-id 必須要跟你當前平臺的flashmtd-id一致,不然整個mtdparts會失效

b.  size 在設置的時候可以爲實際的size(xxM,xxk,xx),也可以爲'-'這表示剩餘的所有空間。

舉例:

假設flash mtd-idsa1100,那麼你可以使用下面的方式來設置:

mtdparts=sa1100:-     → 只有一個分區

mtdparts=sa1100:256k(ARMboot)ro,-(root)  → 有兩個分區

可以查看drivers/mtd/cmdlinepart.c中的註釋找到相關描述。

I. ip

指定系統啓動之 後網卡的ip地址,如果你使用基於nfs的文件系統,那麼必須要有這個參數,其他的情況下就看你自己的喜好了。設置ip有兩種方法:

ip = ip addr

ip=ip addr:server ip addr:gateway:netmask::which netcard:off

這兩種方法可以用,不過很明顯第二種要詳細很多,請注意第二種中which netcard 是指開發板上的網卡,而不是主機上的網卡。

說完常見的幾種bootargs,那麼我們來討論平常我經常使用的幾種組合:

1). 假設文件系統是ramdisk,且直接就在內存中,bootargs的設置應該如下:

setenv bootargs ‘initrd=0x32000000,0xa00000 root=/dev/ram0 console=ttySAC0 mem=64M init=/linuxrc’

2). 假設文件系統是ramdisk,且在flash中,bootargs的設置應該如下:

setenv bootargs ‘mem=32M console=ttyS0,115200 root=/dev/ram rw init=/linuxrc’

注 意這種情況下你應該要在bootm命令中指定ramdiskflash中的地址,如bootm kernel_addr ramdisk_addr (fdt_addr)

3). 假設文件系統是jffs2類型的,且在flash中,bootargs的設置應該如下

setenv bootargs ‘mem=32M console=ttyS0,115200 noinitrd root=/dev/mtdblock2 rw rootfstype=jffs2 init=/linuxrc’

4). 假設文件系統是基於nfs的,bootargs的設置應該如下

setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.3:/nfs ip=192.168.0.5:192.168.0.3:192.168.0.3:255.255.255.0::eth0:off’

或者

setenv bootargs ‘noinitrd mem=64M console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.3:/nfs ip=192.168.0.5’

上面就是我們經常使用的幾種 bootargs的組合,老實說,bootargs非常非常的靈活,所以設置的方法有很多中形式,具體的還應該根據你的平臺具體的情況來設置。

 

u-boot的環境變量是使用u-boot的關鍵,它可以由你自己定義的,但是其中有一些也是大家經常使用,約定熟成的,有一些是u-boot自己定義的,更改這些名字會出現錯誤,下面的表中我們列出了一些常用的環境變量:

環境變量

描述

bootdelay

執行自動啓動的等候秒數

baudrate

串口控制檯的波特率

netmask

以太網接口的掩碼

ethaddr 

以太網卡的網卡物理地址

bootfile

缺省的下載文件

bootargs

傳遞給內核的啓動參數

bootcmd

自動啓動時執行的命令

serverip

服務器端的 ip 地址

ipaddr

本地 ip 地址

stdin

標準輸入設備

stdout

標準輸出設備

stderr

標準出錯設備

上面只是一些最基本的環境變量,請注意,板子裏原本是沒有環境變量的,u-boot的缺省情況下會有一些基本的環境變量,在你執行了saveenv之後,環境變量會第一次保存到flash中,之後你對環境變量的修改,保存都是基於保存在flash中的環境變量的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章