正点原子 linux 开发板学习 uboot 篇 一
源碼選擇
出廠可以直接使用 原子出廠源碼, 出廠源碼會隨時修復bug或者添加新的驅動以兼容正點原子的其他模塊
學習的時候
U-Boot 燒寫與啟動
uboot 啟動位置根據撥碼開關
燒寫 通過.imxdownload 工具把 編譯后的u-boot.bin 燒進sd 卡
/imxdownload u-boot.bin /dev/sdd
U-Boot 輸出信息詳解
U-Boot 2016.03 (Apr 12 2019 - 02:33:00 +0800)
/*版本 和當前時間*/
CPU: Freescale i.MX6ULL rev1.1 69 MHz (running at 528MHz)
/*飛思卡爾單片機? imx屬于飛思卡爾 被NXP收購 */
CPU: Industrial temperature grade (-40C to 105C) at 46C
/*CPU溫度 */
Reset cause: POR
/*復位原因 POR*/
Board: MX6ULL 14x14 EVK
/*板卡名稱*/
I2C: ready
DRAM: 512 MiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
/*IMX6ull 支持2個MMC/SD卡控制器? ?FSL_SDHC(0)? 接SD卡? ?FSL_SDHC(1)?接EMMC*/
Display: ATK-LCD-7-1024x600 (1024x600)
Video: 1024x600x24
/*上2行 表示LCD型號*/
In: serial
/*標準輸入終端? 此處串口*/
Out: serial
/*標準輸入終端? 此處串口*/
Err: serial
/*標準輸入終端? 此處串口*/
switch to partitions #0, OK
mmc0 is current device
/*切換到emmc的第0分區。因為當前的uboot 是emmc版本的 也就是從emmc啟動*/
Net: FEC1
/*網口信息? 用的網口1*/
Normal Boot
/*正常啟動? 也就是說uboot 要從 emmc? 讀取環境變量 和參數信息啟動linux內核了*/
Hit any key to stop autoboot: 0
/*倒計時*/
U-Boot 常用命令
-
help? or ???查看支持的所有命令
- help or ? + 命令名稱 查看該命令用法
信息查詢命令
- bdinfo? ? 打印boot 參數地址位置? DRAM起始地址 網卡信息? 波特率信息? ?堆棧指針等信息
????????????????????????????????
- printenv? 打印環境變量
??
- version? 查看 boot版本號
環境變量操作命令
- setenv? bootdelay 5? ?設置
- saveenv? ? ? ? ? ? ? ? ? ? ?保存
? ?
- setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
設置多個值的環境變量 用 ' ' 包含? 各組值 用 空格隔開
- setenv? author kongbin? ?當沒有此變量? 該命令會 創建環境變量
- ? ? ?setenv author? ? ? ? ? ? ? ? ?無參, 刪除環境變量
網絡操作命令
setenv ipaddr 192.168.1.50? ? ? 板卡IP地址
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0? ? ? ? ??
setenv serverip 192.168.1.253? ? 服務器IP地址? 也就是ubutun 主機IP地址
saveenv
- ping 命令? ?例 ping 192.168.1.105
- dhcp 命令? 從路由器獲取IP地址? 該命令還會通過TFTP來啟動linux 內核
- nfs [loadAddress] [[hostIPaddr:]bootfilename]?? 網絡文件系統命令? 通過nfs 協議獲取網絡文件文件到 指定地址
例如:nfs 80800000 192.168.1.253:/home/zuozhongkai/linux/nfs/zImage
? ? ? ? ? ? 把主機中的 zImage 加載到DRAM的0x8080000 地址處
- tftp [loadAddress] [[hostIPaddr:]bootfilename] 通過tftp協議 獲取網絡文件文件到 指定地址
ubutun 主機端設置
sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
在目錄/etc/xinetd.d/ 中創建??tftp文件
并輸入以下內容
server tftp {socket_type = dgramprotocol = udpwait = yes user = root server = /usr/sbin/in.tftpdserver_args = -s /home/kongbin/linux_aph/tftpboot/ disable = no per_source = 11 cps = 100 2 flags = IPv4 }并修改? ?/etc/default/tftpd-hpa? ? 中 TFTP_DIRECTORY的值為 tftp 目錄
EMMC 和SD卡操作命令
- mmc? 一系列命令 操作emmc 和sd 卡
- mmc info? ?
- mmc read? ?addr blk# cnt? ? ? 從mmc 讀取內容到 dram中? ? ?
- mmc write? ?addr blk# cnt? ? ? 把dram中的數據寫入到 mmc中
- mmc rescan? ? 掃描mmc社保
- mmc part? ? ? ? ?列出mmc設備分區
- mmc dev? ? ? ? 切換mmc設備? ?例如 mmc dev 0? //切換到sd卡? ?0:sd卡? 1:eMMC
- mmc list
- mmc hwpartition
- mmc rst
- mmc setdsr
- mmc part? 可以查看emmc 分區情況? ?完整的應該是?
part 0 : uboot? ?
part1:linux內核 image? 和 設備樹 dts?
part2:根文件系統
- mmc dev 1 2? 把emmc 的分區2 設置為當前mmc設備? 然后就可以完成一些讀寫操作
- mmc read? addr blk# cnt? ?emmc >> dram? addr DRAM地址? blkMMC:塊地址?cnt:塊數量
例如 mmc read 80800000 600 10? ?0x10 = 16? ? ?一個扇區512? ? ? 16? * 512? = 0x2000
讀完可以通過 md.b? 80800000 2000? 查看DRAM中的內容
- mmc write? addr blk# cnt? ??dram>> write
? ? 綜合應用 更新sd 卡中uboot程序?
????????tftp 80800000 u-boot.imx
? ? ? ? mmc dev 0 0?
? ? ? ?mmc write 80800000 2 32E
? ? 綜合應用 更新emmc 卡中uboot程序?
????????tftp 80800000 u-boot.imx? ? //下載u-boot.imx 到dram中
????????mmc dev 1 0? ? ? ? ? ? ? ? ? ? ? ?//切換到emmc的分區0
? ? ? ??mmc write 80800000 2 32E //燒寫u-boot.imx到emmc中
? ? ? ? mmc partconf 1 1 0 0 //分區配置, EMMC需要這一步!? ? ? ? ?
FAT? 一系列操作命令??
? ? ? ? 對SD、EMMC 存儲的文件進行操作
-
fatinfo <interface> [<dev[:part]>]? 查詢文件系統信息? ?例如?fatinfo mmc 1:1
-
fatls??<interface> [<dev[:part]>] [directory]? ?列出該目錄下 有哪些文件? 和linux中的ls 命令類似
- fstype <interface> <dev>:<part>? ?查詢分區文件系統類型
- fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]? 加載文件到DRAM
? ? ? ? 例如?fatload mmc 1:1 80800000 zImage? 加載zImage? 到dram中
boot?操作命令? 重中之中
? ? ? ? uboot 本質工作就是引導linux??
- bootz [addr [initrd[:size]] [fdt]]??
? ? ? ? addr: linux 內核 imge dram地址
????????initrd是initrd文件在dram中的地址? ?可用-代替
? ? ? ? fdt:設備樹地址
? ? ? ? 例:
????????tftp 80800000 zImage
????????tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
????????bootz 80800000 - 83000000?
????????8080000 加載linux鏡像文件??
????????83000000??加載設備樹文件
? ? ? ?
- bootm? ?參數、功能和 bootz類似
? ? ? ??boot 命令
最重要的2個環境變量
bootcmd?
uboot啟動后會運行環境變量 bootcmd 中的命令 去加載 內核 和設備樹
調試階段 可通過tfp 從服務器獲取 文件 加載?內核 zImage 文件? 和設備樹文件
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000'
生產階段? 從emmc中 加載文件
把linux keneral 和? 設備樹 (dts)文件?
setenv bootcmd fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800*480-c.dtb; bootz 80800000 - 83000000'
? ? ? ??
bootargs?
? 調試階段 通過 nfs 加載根文enü
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.14:/home/kongbin/linux_aph/nfs/rootfs,v3 ip=192.168.1.50:192.168.1.14:192.168.1.1:255.255.255.0::eth0:off'
注意:nfs 服務 系統是ubutun18.04? 加個v3
生產階段? 從emmc的分區2 中加載根文件系統
setenv bootcmd ‘console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw’
bootz 命令啟動流程如下圖:
?
? ? ??
????????
????????
總結
以上是生活随笔為你收集整理的正点原子 linux 开发板学习 uboot 篇 一的全部內容,希望文章能夠幫你解決所遇到的問題。