1. 程式人生 > >詳解Linux平臺晶片燒寫流程

詳解Linux平臺晶片燒寫流程

這裡的燒寫是針對板子裡的nandflash中已經有uboot的情況。目的在於熟悉燒寫流程及原理!

連線好開發板,重新啟動,進入u-boot互動介面,執行如下操作:

一、配置網路
 
# print
# setenv ipaddr 192.168.64.11  (注:ipaddr 為開發板IP)
# setenv serverip 192.168.64.12 (注:serverip 為Windows主機IP)
# setenv gatewayip 192.168.64.1 (注:gatewayip 為閘道器)
# saveenv

# ping 192.168.64.12 (如果能通,則繼續往下做)

二、燒寫系統檔案(先由tftp下載到ddr,再由ddr燒寫到nandflash)

燒寫流程為從PC機伺服器到板子記憶體,再從板子記憶體到nandflash

首先,啟動tftp服務,選擇好待下載目標檔案的路徑,執行如下動作:

注意:可以先tftp到記憶體,然後用“bootm 地址”啟動測試,不用去擦寫nandflash

1)燒寫kernel

// 將核心映象下載到記憶體
# tftp 0x40000000 uImage

// 可以用此命令驗證核心是否能正常啟動(可選)
# bootm 0x40000000

// 從地址0x600000開始擦除0x500000位元組大小的nandflash空間 
# nand erase 0x600000 0x500000

// 將記憶體裡0x40000000開始0x500000位元組的資料燒寫到nandflash
# nand write 0x40000000 0x600000 0x500000

2)燒寫fs

// 將檔案系統映象下載到記憶體
# tftp 0x40000000 rootfs.img

// 從nandflash地址0xe00000開始擦除0xf200000大小的空間
# nand erase 0xe00000 0xf200000

// 將記憶體裡的檔案系統映象燒寫到nandflash
# nand write.yaffs 0x40000000 0xe00000 0xxxxx(0xxxxx根據執行tftp 0x40000000 rootfs.img下載的大小確定)

3)燒寫u-boot

// 將u-boot.bin檔案下載到記憶體
# tftp 0x40000000 u-boot.bin

// 從nandflash地址0開始擦除0x600000大小的空間
# nand erase 0x0 0x600000

// 將記憶體裡0x40000000開始0x600000位元組的資料燒寫到nandflash
# nand write 0x40000000 0x0 0x600000

三、重啟進入u-boot互動介面,配置uboot的啟動引數

測試1(啟動核心):

// 設定啟動命令:先從nandflash裡讀到記憶體,再從記憶體啟動核心
// 將兩條命令同時存到bootcmd裡面,要用分號隔開,反斜槓可以提高解析速度
# setenv bootcmd nand read 0x40000000 0x600000 0x500000\; bootm 0x40000000

// 儲存以上設定的環境變數
# saveenv

重啟,觀察效果。

測試2(設定機器碼):

// uboot和核心的機器碼要相同
# setenv machid 0xXXX(根據情況而定)
# saveenv

重啟,觀察效果。

測試3(啟動本地檔案系統):

// uboot在啟動核心時需要傳遞引數給核心,最重要的是讓核心掛載根檔案系統
// 在磁碟檔案系統掛載成功後, 系統會執行磁碟檔案系統下的/sbin/init程式
// 除錯終端是串列埠0,波特率為115200bps
// 根檔案系統型別是yaffs,可讀寫
# setenv bootargs root=/dev/mtdblock4 init=/sbin/init console=ttySAC0,115200 rootfstype=yaffs rw
# saveenv

重啟,觀察效果。

四、若要實現nfs掛載檔案系統則進行如下操作:

1、確保虛擬機器virtualbox裡的網絡卡為有線網絡卡(因為是通過網線掛載的)

2、設定ip地址
# setenv serverip 192.168.64.13

# setenv ipaddr 192.168.64.11
# setenv gatewayip 192.168.64.1
# saveenv

注:serverip為Windows裡virtualbox裡的Ubuntu的IP

測試4(掛載ubuntu裡的根檔案系統):
# setenv bootargs root=/dev/nfs nfsroot=192.168.64.13:/mini_rootfs ip=192.168.64.11:192.168.64.1::255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
# saveenv

重啟,觀察效果。