Uboot版本:u-boot-2013.01
開發闆:Exynos4412
本文主要是熟悉U-boot 的使用以及如何将Uboot 燒入Exynos4412。當然在這之前首先必須保證開發闆上已經有了U-boot。如果沒有,請先燒入一個已經編譯好的Uboot.bin,可以利用JTAG或DNW。
一、環境搭建
為了友善開發,這裡利用網絡傳輸資料,主要用到 tftp 與 nfs。tftp用于資料傳輸,nfs用于挂載根檔案系統。
1、tftp模式設定
具體配置可以移步http://blog.csdn.net/zqixiao_09/article/details/50319877,這裡使用tftp有兩種模式:a、互動模式(手動)b、自動模式。
a -- 互動模式
在Uboot界面輸入以下指令:
tftp 41000000 uImage // 将tftp主機端uImage 拷貝到4412記憶體位址41000000處
tftp 42000000 exynos4412-fs4412.dtb
bootm 41000000 - 420000000
b-- 自動模式:
設定bootcmd,這樣Uboot 加載成功後,會執行bootcmd指令,自動下載下傳檔案,并引導核心
setenv bootcmd tftp 41000000 uImage \; tftp 42000000 exynos4412-fs4412.dtb\; bootm 41000000 - 42000000
saveenv
bootcmd每條指令間要用到 '\' ,用于多條指令的輸入。
2、通過NFS挂載根檔案系統
1)配置nfs
a -- 下載下傳
sudo apt-get install nfs-kernel-server
b -- 配置
sudo vi /etc/exports
在最後一行添加你的nfs共享目錄
/nfsboot *(rw,sync,no_subtree_check) note:保證此目錄已存在(權限:777)
c -- 重新開機nfs服務
sudo /etc/init.d/nfs-kernel-server restart
d -- 測試
第一種方法)showmount -e
第二種方法)自己挂載
mount -t nfs 127.0.0.1:/nfsboot /mnt/xxx
具體配置可以移步http://blog.csdn.net/zqixiao_09/article/details/50337933
2) 拷貝解壓已制作好的根檔案系統
cp xxx/rootfs.tar.xz /nfsboot
tar xvf rootfs.tar.xz
3) 設定開發闆bootargs
setenv bootargs root=/dev/nfs nfsroot=虛拟機ip:/nfsboot/rootfs rw console=ttySAC2,115200 ip=開發闆ip init=/linuxrc
saveenv
注:root=/dev/nfs 表示根檔案系統在/dev/nfs 上;nfsroot=虛拟機ip:/nfsboot/rootfs 為虛拟機檔案系統所在位置;init=/linuxrc 為開機後啟動的第一個程序;
4) 測試
寫程式在開發闆運作
二、常用Uboot指令詳解
1、環境設定指令
a -- 檢視目前環境變量
printenv
b -- 增加環境變量
setenv
例: set ipaddr 192.168.1.1 ====>ipaddr=192.168.1.1
c -- 修改環境變量
setenv 變量名 值
d -- 删除環境變量
setenv 變量名
e--常用環境變量作用
ipaddr:設定開發平台ip
serverip:tftp伺服器ip
netmask:子網路遮罩
gatewayip:網關
bootcmd:啟動核心變量(自動啟動時執行的指令)
bootargs:傳輸給核心的參數(到核心階段,原環境變量已經不起作用)
bootdelay:設定互動延時
2、資料傳輸指令
a -- 網絡
tftp 記憶體位址 檔案名 (利用TFTP協定傳輸檔案)
b -- 序列槽
loadb 記憶體位址 (利用Kermit 傳輸協定)
3、存儲器通路指令
a -- 記憶體:
md 顯示記憶體内容
格式:md 41000000
mm 修改記憶體值(位址自動加一)
格式:mm 41000000
以 . 結束
mm.w (2B) mm.l(4B,預設)
mw 用指定的資料填充記憶體
格式:mw 41000000 12345678 10
向0x41000000起始位址寫0x10次 0x12345678
b-- 外存:
1) -- nand:
nand write 20008000 0 40000
nand read 20008000 0 40000
nand erase 0 40000
2) -- emmc:
movi write kernel 41000000
将記憶體41000000 資料寫入到emmc的kernel分區
movi read kernel 41000000
将emmc的kernel分區中的内容載入到記憶體41000000位址
注:Exynos4412 用的外存都是emmc,沒有nand flash、nor flash.
4、運作
a -- bootm
bootm指令是專門用于啟動在SDRAM中用U-boot 的mkimage工具處理過的記憶體映像(将pc指針指向記憶體位址,還有其它操作)
b -- go
将pc指針指向記憶體位址
c -- boot
重新開機開發闆
5、其它
run:運作指定環境變量的内容
help:檢視所有指令
三、下載下傳與燒寫
1、産品模式:
産品模式指Uboot、Kernel、rootfs已經移植制作成功,可以燒入外存中直接使用.
下面主要是将uboot,kernel,dtb,rootfs燒寫到emmc的方法,這裡将uboot,kernel,dtb,rootfs加載到記憶體中的方法都是用的tftp,當然還有其他方法,nfs 、SD卡都可以
1) -- uboot 燒寫:
a) -- emmc中已經存在uboot
通過網絡 :
tftp 41000000 u-bootxxx.bin
movi write u 41000000
重新開機生效。
b) -- emmc為空
通過sd卡燒錄:
一:開關拔到1000 (sd卡啟動)
輸入指令: sdfuse flashall
二:開關拔回到0110 (emmc啟動)
重新開機生效
2)-- kernel及dtb燒寫
通過網絡 tftp 41000000 uImage
movi write k 41000000
通過網絡 tftp 41000000 exynos4412-fs4412.dtb
movi write d 41000000
3) -- ramdisk燒寫(rootfs的鏡像)
通過網絡 tftp 41000000 ramdisk.img
movi write r 41000000 300000
4) -- 設定啟動參數bootcmd
setenv bootcmd movi read k 41000000\; movi read d 42000000\;movi read r 43000000 300000\; bootm 41000000 43000000 42000000
NOTE:bootm中間的資料如是'-',說明從nfs挂載[參考bootargs],如是記憶體位址,則從位址處加載檔案系統