(1)Uboot常用命令

使用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)核。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容