使用Uboot下載Kernel和燒寫(xiě)Kernel
最近決定把自己的OK210板子玩起來(lái),會(huì)寫(xiě)一些筆記把我自己的移植過(guò)程和學(xué)習(xí)過(guò)程記錄下來(lái),其中的資料參考了一些網(wǎng)上的學(xué)習(xí)筆記和Forlinx的源碼。
1.首先準(zhǔn)備資料
按照光盤(pán)里面的軟件使用教程上的方法,將SD卡分區(qū)。其中mmc-210.bin是燒錄到SD卡上的引導(dǎo)文件(說(shuō)白了就是Uboot燒錄在SD卡上,從SD卡啟動(dòng)),用SD_writer.exe程序把mmc-210.bin燒錄到SD卡上,在SD卡文件夾下新建sdfuse文件夾,把光盤(pán)里面的zImage-210(Kernel文件),u-boot-210.bin(燒寫(xiě)到nand Flash的Uboot文件),rootfs-210.yaffs2(燒寫(xiě)到Nand flash上的文件系統(tǒng)),全部復(fù)制到sdfuse文件夾。
2.OK210開(kāi)機(jī)
將開(kāi)發(fā)板設(shè)置成SD卡啟動(dòng),開(kāi)機(jī)后觀察一下串口的輸出消息:
OK210 nand分區(qū)信息就出現(xiàn)了:
Partition table on NAND
ptn 0 name='bootloader' start=0x0 len=0x100000(~1024KB) (Uboot)
ptn 1 name='kernel' start=0x100000 len=0x500000(~5120KB)
ptn 2 name='system' start=0x600000 len=N/A (Yaffs)
所以我們要做的就是把自己編譯的Kernel燒錄到nand Flash的0x100000 處,長(zhǎng)度為5120KB
如何燒錄呢?
這里就要講解幾條命令:
tftp <ram_addr> <file_name>
將file_name的文件通過(guò)TFTP下載到內(nèi)存中的ram_addr處
例子:tftp C0008000 uImage
nand erase <起始地址start> <長(zhǎng)度len>
擦掉Nand Flash中內(nèi)容
例子:nand erase 0x100000 0x500000
nand write <ram_addr> <flash_addr> <length>
將內(nèi)存起始地址處,長(zhǎng)度為len的數(shù)據(jù),寫(xiě)入flash起始地址處
例子:nand write C0008000 100000 500000
nand read <ram_addr> <flash_addr> <length>
將flash起始地址處,長(zhǎng)度為len的數(shù)據(jù),讀到內(nèi)存起始地址處
例子:nand read C0008000 100000 500000
3.其它設(shè)置
我們不知道怎么設(shè)置網(wǎng)絡(luò),先開(kāi)機(jī),在倒數(shù)的時(shí)候迅速按下鍵盤(pán)上的任意字符,進(jìn)入U(xiǎn)boot:
此時(shí)輸入print,可以把所有的設(shè)置打印出來(lái)
bootcmd=nand read C0008000 100000 500000; bootm C0008000
mtdpart=80000 400000 3000000
bootdelay=3
baudrate=115200
ethaddr=00:22:12:34:56:90
ipaddr=192.168.1.20
serverip=192.168.1.129
gatewayip=192.168.1.1
netmask=255.255.255.0
bootargs=console=ttySAC2,115200 root=/dev/mtdblock2 init=/linuxrc lcdsize=70
這里要提到兩個(gè)重要的命令:bootargs和bootcmd
uboot的啟動(dòng)參數(shù):
bootcmd:加載并且啟動(dòng)內(nèi)核
setenv bootcmd tftp C0008000 zImage \; bootm C0008000
或者
setenv bootcmd nand read C0008000 100000 500000\; bootm C0008000
bootargs:內(nèi)核就是一個(gè)大程序而已,執(zhí)行最后需要掛接一種根文件系統(tǒng),將權(quán)限交給用戶(hù),
掛接文件系統(tǒng)的類(lèi)型需要bootargs來(lái)指定
setenv bootargs root=/dev/nfs nfsroot=.....
或者
setenv bootargs root=/dev/mtdblock2....
或者
setenv bootargs root=/dev/ram ....
所以總結(jié)一下:
====================================================================================
1.開(kāi)發(fā)模式命令設(shè)置:
====================
1.1 服務(wù)器ip地址設(shè)置,服務(wù)器的ip為ubuntu的ip
set serverip 192.168.1.xx
save
1.2 板子ip地址設(shè)置
set ipaddr 192.168.1.yy
save
1.3 網(wǎng)關(guān)設(shè)置
set gatewayip 192.168.1.1
save
1.4 內(nèi)核鏡像下載命令配置
set bootcmd tftp C0008000 zImage\;bootm C0008000
save
1.5 內(nèi)核參數(shù)配置
set bootargs root=/dev/nfs nfsroot=192.168.7.xx:/opt/rootfs console=ttySAC2,115200 ip=192.168.1.yy
save
============================
2.產(chǎn)品模式命令設(shè)置
============================
2.1 內(nèi)核鏡像下載命令配置
set bootcmd tftp C0008000 zImage \; bootm C0008000
save
2.2 內(nèi)核參數(shù)配置
set bootargs root=/dev/mtdblock3 rootfstype=yaffs2 init=/init console=ttySAC2,115200
save
在這里注意:OK210板子上使用的串口是ttySAC2,不是ttySAC0,如果這里寫(xiě)錯(cuò)了,板子起來(lái)的時(shí)候沒(méi)有串口輸出。
我們最后可以做個(gè)實(shí)驗(yàn)來(lái)燒寫(xiě)一下uboot(如果不成功就回到SD卡啟動(dòng),重來(lái)一遍)
burn u-boot:
tftp 20008000 u-boot.bin
nand erase 0x0 0x1000000
nand write 0x20008000 0x0 0x100000
今天就先熟悉到這里,后面等我們編譯好Kernel的時(shí)候再根據(jù)今天學(xué)的內(nèi)容來(lái)啟動(dòng)我們自己編譯的內(nèi)核。