一. uboot運行時環境變量分布
1.1. 環境變量有2份,一份在Flash中,另一份在DDR中。uboot開機時一次性從Flash中讀取全部環境變量到DDR中作為環境變量的初始化值,然后使用過程中都是用DDR中這一份,用戶可以用saveenv指令將DDR中的環境變量重新寫入Flash中去更新Flash中環境變量。下次開機時又會從Flash中再讀一次。
二. ubooth環境變量分析

x210 # print baudrate=115200 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.1.1 ipaddr=192.168.1.20 netmask=255.255.255.0 serverip=192.168.1.141 bootdelay=3 bootcmd=movi read kernel 30008000; bootm 30008000 bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3 Environment size: 276/16380 bytes
2.1. 常見變量說明
a. bootdelay:啟動運行倒數時間
b. baudrate:通訊波特率
c. ipaddr是開發板的本地IP地址
d. serverip是開發板通過tftp指令去tftp服務器下載東西時,tftp服務器的IP地址。
e. gatewayip是開發板的本地網關地址
f. netmask是子網掩碼
g. ethaddr是開發板的本地網卡的MAC地址。
2.2. bootcmd變量
a. uboot啟動后會開機自動倒數bootdelay秒,如果沒有人按下回車打斷啟動,則uboot會自動執行啟動命令來啟動內核。
b. uboot開機自動啟動時實際就是在內部執行了bootcmd這個環境變量的值所對應的命令集。
c. bootcmd=movi read kernel 30008000; bootm 30008000 意思是:將iNand的kernel分區讀取到DDR內存的0x30008000地址處,然后使用bootm啟動命令從內存0x30008000處去啟動內核。
2.3. bootargs變量
2.3.1. linux內核啟動時可以接收uboot給他傳遞的啟動參數,這些啟動參數是uboot和內核約定好的形式、內容,linux內核在這些啟動參數的指導下完成啟動過程。這樣的設計是為了靈活,為了內核在不重新編譯的情況下可以用不同的方式啟動。
2.3.2. 在uboot的環境變量中設置bootargs,然后bootm命令啟動內核時會自動將bootargs傳給內核。
2.3.3. 示例:bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3
a. console=ttySAC2,115200 控制台使用串口2,波特率115200.
b. root=/dev/mmcblk0p2 rw 根文件系統在SD卡端口0設備(iNand)第2分區,根文件系統是可讀可寫的
c. init=/linuxrc linux的進程1(init進程)的路徑
d. rootfstype=ext3 根文件系統的類型是ext3
三. uboot階段對Flash的分區
3.1. 分區一般規則
a. 各分區彼此相連,前面一個分區的結尾就是后一個分區的開頭。
b. 整個flash充分利用,從開頭到結尾。
c. uboot必須在Flash開頭,其他分區相對位置是可變的。
d. 各分區的大小由系統移植工程師自己來定,一般定為合適大小(不能太小,太小了容易溢出;不能太大,太大了浪費空間)
e. 分區在系統移植前確定好,在uboot中和kernel中使用同一個分區表。將來在系統部署時和系統代碼中的分區方法也必須一樣。
3.2. 查看uboot分區

x210 # fastboot [Partition table on MoviNAND] ptn 0 name='bootloader' start=0x0 len=N/A (use hard-coded info. (cmd: movi)) ptn 1 name='kernel' start=N/A len=N/A (use hard-coded info. (cmd: movi)) ptn 2 name='ramdisk' start=N/A len=0x300000(~3072KB) (use hard-coded info. (cmd: movi)) ptn 3 name='config' start=0xAECC00 len=0x1028DC00(~264759KB) ptn 4 name='system' start=0x10D7A800 len=0x1028DC00(~264759KB) ptn 5 name='cache' start=0x21008400 len=0x65F7000(~104412KB) ptn 6 name='userdata' start=0x275FF400 len=0xC0C6FC00(~3158463KB)
3.2.1. bootloader:存放uboot一類的啟動文件,最終目標是啟動操作系統內核。
3.2.2. kernel:存放內核,操作系統的核心。
3.2.3. ramdisk:內存盤,把系統內存划出一部分當作硬盤使用,速度快。
3.2.4. config:存放配置文件。
3.2.5. system:存放系統鏡像文件。
3.2.6. cache:存放緩存數據。
3.2.7. userdata:存放用戶數據。
PS:刷系統常用bootloader,kernel,system三個分區。
參考《朱老師.1.2ARM裸機課件》