第一季6:海思方案中uboot、kernel和rootfs的烧写方法
以下內(nèi)容源于朱有鵬課程的學(xué)習(xí),以及海思方案的學(xué)習(xí)資料整理。如有侵權(quán),請告知?jiǎng)h除。
這里主要講“使用tftp,燒寫映像文件(uboot、kernel、rootfs)到SPI Flash”。(對比:開發(fā)階段,我們一般使用NFS來燒寫rootfs)海思還提供了“燒寫映像文件到NAND Flash”、“燒寫映像文件到eMMC”的方法,但大同小異,只是命令和地址空間不同而已。因?yàn)樗玫陌遄幽J(rèn)從SPI Flash啟動(dòng),因此介紹燒寫映像文件到SPI Flash的方法。
一、燒錄uboot
?假如沒有燒錄uboot,可以使用Hi_tool(/software/pc/Hi_TOOL目錄下,效果類似于三星的DNW工具)來燒錄uboot。使用Hi_tool時(shí),需要先安裝jre。
知識儲備:
(1)DDR(64MB的SDRAM)的地址范圍:80000000-83FFFFFF,地址范圍是由手冊查知的。
(2)一些命令含義
sf probe 0 (spiflash,probe表示查找探測,0表示板載spiflash(可能有多個(gè),這里0表示編號);整句表示查找spiflash)
sf erase 0 100000 (擦除分區(qū),0表示要擦除的起始地址,10000表示長度,這里剛好1M,和之前設(shè)置uboot長度1M相符)
sf write 82000000 0 100000(寫spiflash分區(qū),82000000表示源文件所在的SDRAM地址,后二者表示起始位置和長度)
mw.b 82000000 ff 100000(mw.b表示以字節(jié)為單位寫內(nèi)存,82000000表示起始地址,100000表示1M長度,ff表示全寫成ff)?
(2)燒寫過程
a、將映像文件從上位機(jī)下載到開發(fā)板的sdram中
b、擦除開發(fā)板的spiflash相應(yīng)的分區(qū)
c、將sdram的鏡像燒錄到spi的分區(qū)內(nèi)
二、燒錄uboot后
1、配置tftp服務(wù)器
- 可以使用任意的tftp服務(wù)器(我的是虛擬機(jī)里的linux系統(tǒng));
- 將SDK中的package/image_uclibc(或image_glibc)下的相關(guān)映像文件拷貝到tftp服務(wù)器目錄(我的是/tftpboot/)下。
2、參數(shù)配置
- 單板上電后,敲任意鍵進(jìn)入u-boot。設(shè)置serverip(即tftp服務(wù)器的ip)、ipaddr(單板ip)和ethaddr(單板的MAC地址)。
? ? setenv serverip xx.xx.xx.xx
? ? setenv ipaddr xx.xx.xx.xx?
? ? setenv ethaddr xx:xx:xx:xx:xx:xx
? ? setenv netmask xx.xx.xx.xx
? ? setenv gatewayip xx.xx.xx.xx
? ? ping serverip,確保能夠ping通,使得網(wǎng)絡(luò)暢通。
3、在板載uboot界面中,燒寫映像文件到SPI Flash(以16M SPI Flash為例)
從下圖可以知道各文件的大小
(1)地址空間說明
? ? ? ? | ? ? ?1M ? ? ? | ? ? ?3M ? ? ? | ? ? ?12M ? ? |
? ? ? ? |---------------|---------------|---------------|
? ? ? ? | ? ? boot ? ? ?| ? ?kernel? ? | ? ? rootfs? ? |
| 分區(qū) | 大小 | 起始地址 | 截止地址 |
| bootloader | 1M | 0x00000000? | 0x00100000 |
| kernel | 3M | 0x00100000 | 0x00400000 |
| rootfs | 12M | 0x00400000 | 0x01000000 |
以下的操作均基于圖示的地址空間分配,也可以根據(jù)實(shí)際情況進(jìn)行調(diào)整,但注意對應(yīng)。
(2)燒寫u-boot
? ? ? ? sf probe 0mw.b 82000000 ff 100000tftp 0x82000000 u-boot-hi3518ev200.binsf probe 0sf erase 0 100000sf write 82000000 0 100000?? ?reset(3)燒寫內(nèi)核
? ? ? ? mw.b 82000000 ff 300000tftp 82000000 uImage_hi3518ev200sf probe 0sf erase 100000 300000sf write 82000000 100000 300000(4)燒寫文件系統(tǒng)
? ? ? ? mw.b 82000000 ff C00000tftp 0x82000000 rootfs_hi3518ev200_64k.jffs2sf probe 0sf erase 400000 C00000sf write 82000000 400000 C00000(5)設(shè)置啟動(dòng)參數(shù)
1)參數(shù)含義
sf probe 0,表示查找spiflash;
sf read 0x82000000 0x100000 0x300000,表示從spiflash的0x100000開始,讀取長度為0x300000的內(nèi)容,寫到SDRAM以0x82000000開始的位置中;(從spiflash的kernel分區(qū)中讀取kernel)
root=/dev/mtdblock2,表示根文件系統(tǒng)在第2個(gè)分區(qū)中(0,1,2);
mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs),表示分區(qū)表(對比以前說過的、寫死的、靜態(tài)分區(qū)表,這里是傳參的、動(dòng)態(tài)的分區(qū)表,傳參分區(qū)表優(yōu)先級比靜態(tài)分區(qū)表高)。
2)注意mem=32M,實(shí)際硬件是64M
硬件上的64M內(nèi)存有兩個(gè)用途,部分分給OS用,部分分給MPP使用。這里32M指的是OS使用的。
set bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000' set bootargs 'mem=32M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1024K(boot),3072K(kernel),12288K(rootfs)' save總結(jié)
以上是生活随笔為你收集整理的第一季6:海思方案中uboot、kernel和rootfs的烧写方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机一级wps题库及答案,全国计算机一
- 下一篇: 安徽省计算机一级选择题题库,计算机等级考