Exynos4412 Uboot 的使用与烧写
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],如是內存地址,則從地址處加載文件系統
總結
以上是生活随笔為你收集整理的Exynos4412 Uboot 的使用与烧写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由器 VS OSI七层模型
- 下一篇: 移动web开发(三)——字体使用