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