1. 前言
U-boot是一種開源bootloader, 作用是用來引導操作,以及給開發(fā)人員提供測試調試工具。本身算是個精簡的Linux系統(tǒng),主要是負責硬件的初始化和引導,本身帶有一些工具,作為引導程序,常作為嵌入式設備的引導。當真正的系統(tǒng)開始運行的時候U-boot就把管理權限交了出去。
選擇U-Boot的理由: ① 開放源碼; ② 支持多種嵌入式操作系統(tǒng)內核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android; ③ 支持多個處理器系列,如PowerPC、ARM、x86、MIPS; ④ 較高的可靠性和穩(wěn)定性; ⑤ 高度靈活的功能設置,適合U-Boot調試、操作系統(tǒng)不同引導要求、產品發(fā)布等; ⑥ 豐富的設備驅動源碼,如串口、以太網、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等; ⑦ 較為豐富的開發(fā)調試文檔與強大的網絡技術支持;
U-BOOT工作模式
U-Boot的工作模式有啟動加載模式和下載模式。啟動加載模式是Bootloader的正常工作模式,嵌入式產品發(fā)布時,Bootloader必須工作在這種模式下,Bootloader將嵌入式操作系統(tǒng)從FLASH中加載到SDRAM中運行,整個過程是自動的。下載模式就是Bootloader通過某些通信手段將內核映像或根文件系統(tǒng)映像等從PC機中下載到目標板的FLASH中。用戶可以利用Bootloader提供的一些命令接口來完成自己想要的操作。
當前測試uboot命令的開發(fā)板是友善之臂tin441,使用三星的EXYNOS4412,本篇文章重點是介紹uboot命令行的命令功能,用法,使用的uboot版本是2010.12,是友善之臂官方提供的uboot。
2. UBOOT命令介紹
2.1 幫助命令--help
查看當前的UBOOT支持那些命令。
TINY4412 # help
? - alias for 'help'
base - 打印一組地址偏移量
bdinfo - 開發(fā)板的信息結構
boot - boot default, i.e., run 'bootcmd'
bootd - boot default, i.e., run 'bootcmd'
bootelf - Boot from an ELF image in memory
bootm - 從內存啟動應用程序
bootp - 通過使用BOOTP / TFTP協(xié)議的網絡引導映像
bootvx - Boot vxWorks from an ELF image
chpart - 更改活動分區(qū)
cmp - memory compare
coninfo - print console devices and information
cp - 內存拷貝
crc32 - 檢驗和的計算
dcache - 啟用或禁用數(shù)據緩存
dnw - dnw - USB設備進行初始化并準備好接受Windows server(特定的)
?
echo - echo args to console
editenv - 修改環(huán)境變量
emmc - 打開/關閉eMMC引導分區(qū)
env - 環(huán)境處理命令
exit - 退出腳本
ext2format- ext2 ext2format——磁盤格式
?
ext2load- 從Ext2文件系統(tǒng)加載二進制文件
ext2ls - 在一個目錄列表文件(默認/)
ext3format- ext3 ext3format——磁盤格式
?
false - 什么也不做,但沒有成功
fastboot- fastboot——使用USB fastboot協(xié)議
?
fatformat- FAT32 fatformat——磁盤格式
?
fatinfo - fatinfo——打印文件系統(tǒng)的信息
fatload - fatload——從dos加載二進制文件的文件系統(tǒng)
?
fatls - 一個目錄列表文件(默認/)
fdisk - fdisk for sd/mmc.
?
go - 在“addr”啟動應用程序
help - 打印命令描述/使用幫助
icache - enable or disable instruction cache
iminfo - print header information for application image
imxtract- extract a part of a multi-image
itest - return true/false on integer compare
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loady - load binary file over serial line (ymodem mode)
loop - infinite loop on address range
md - memory display
mm - memory modify (auto-incrementing address)
mmc - MMC子系統(tǒng)
mmcinfo - mmcinfo -- display MMC info
movi - movi - sd/mmc r/w sub system for SMDK board
mtdparts- define flash/nand partitions
mtest - simple RAM read/write test
mw - memory write (fill)
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
reginfo - print register information
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv - set environment variables
showvar - print local hushshell variables
sleep - delay execution for some time
source - run script from memory
test - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
true - do nothing, successfully
usb - USB sub-system
version - print monitor version
復制代碼
2.2 查看具體命令的使用方法--help
格式: help <你想要查的指令> 或者 ? <你想要查的指令> , 甚至 h <你想要查的指令縮寫>。
TINY4412 # help sleep
sleep - 延遲執(zhí)行一段時間
?
Usage:
sleep N
- 延遲執(zhí)行N秒(N是_decimal_ ! ! !)
復制代碼
2.3 打印環(huán)境變量--printenv
TINY4412 # printenv
baudrate=115200
bootargs=root=/dev/nfs nfsroot=192.168.18.3:/work/rootfs ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
bootcmd=movi read kernel 0 40008000;movi read rootfs 0 41000000 400000;bootm 40008000 41000000
bootdelay=3
ethaddr=00:40:5c:26:0a:5b
gatewayip=192.168.0.1
ipaddr=192.168.0.20
netmask=255.255.255.0
serverip=192.168.0.10
?
Environment size: 416/16380 bytes
復制代碼
baudrate: 當前的波特率。 一般不修改。 bootcmd: 啟動命令。 bootdelay:啟動命令 bootcmd 延時執(zhí)行的時間。 ethaddr: 網卡 MAC 地址。 gatewayip:網關 IP 地址。 ipaddr: 開發(fā)板 IP 地址。 netmask: 子網掩碼。 serverip: 服務器 IP(一般是 PC 的 IP,給開發(fā)板提供各種網絡服務的主機的 IP) bootargs: u-boot 傳遞給操作系統(tǒng)內核的啟動參數(shù)。(很重要)
使用示例 打印指定的環(huán)境變量
格式: printenv 打印的環(huán)境變量名稱
TINY4412 # printenv bootargs
bootargs=root=/dev/nfs nfsroot=192.168.18.3:/work/rootfs ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
復制代碼
2.4 設置環(huán)境變量--setenv
查看幫助:
TINY4412 # help setenv
setenv - set environment variables -->作用是設置環(huán)境變量
?
Usage: //命令使用方法
setenv name value ... //使用格式
- set environment variable 'name' to 'value ...'
//設置環(huán)境變量“名稱”“數(shù)值……格式
setenv name
- delete environment variable 'name'
//刪除環(huán)境變量
復制代碼
使用示例
設置上電的延時時間:
TINY4412 # setenv bootdelay 10 //設置上電延時時間為10秒
TINY4412 # saveenv //保存設置
Saving Environment to SMDK bootable device...
done
?
設置波特率示例:
TINY4412 # setenv baudrate 115200 //設置波特率為115200
## Switch baudrate to 115200 bps and press ENTER ... //設置完需要重啟開發(fā)板,自動生效
?
刪除環(huán)境變量示例:
setenv baudrate //刪除baudrate環(huán)境變量
復制代碼
引用環(huán)境變量示例:
TINY4412 # setenv timer 10 //隨便設置一個環(huán)境變量
TINY4412 # setenv bootdelay ${timer} //引用環(huán)境變量
TINY4412 # save //保存環(huán)境變量
Saving Environment to SMDK bootable device...
done
TINY4412 # print
baudrate=115200
bootargs=root=/dev/nfs nfsroot=192.168.18.3:/work/rootfs ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
bootcmd=movi read kernel 0 40007fc0;bootm 40007fc0
bootdelay=10 //設置成功
ethaddr=00:40:5c:26:0a:5b
gatewayip=192.168.18.1
ipaddr=192.168.18.123
netmask=255.255.255.0
serverip=192.168.18.124
timer=10 //設置的新環(huán)境變量
?
Environment size: 389/16380 bytes
TINY4412 #
復制代碼
2.5 設置bootargs參數(shù)
bootargs是環(huán)境變量中的重中之重,甚至可以說整個環(huán)境變量都是圍繞著bootargs來設置的。
coherent_pool參數(shù):
設置DMA的大小
示例: coherent_pool=2M
復制代碼
本地掛載示例
set bootargs root=/dev/mmcblk0p2 rootfstype=ext3 init=/linuxrc console=ttySAC0,115200
?
set bootargs root=/dev/mmcblk0p2 rw rootfstype=ext3 init=/linuxrc console=ttySAC0,115200
復制代碼
NFS網絡掛載示例:
set bootargs root=/dev/nfs nfsroot=192.168.18.3:/work/nfs_root ip=192.168.18.123:192.168.18.3:192.168.18.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
復制代碼
root參數(shù)用來指定根文件系統(tǒng)掛載的位置。
nfsroot參數(shù)是NFS網絡文件系統(tǒng)掛載才需要設置,后面跟著服務器的NFS地址,掛載目錄
ip參數(shù)是設置開發(fā)板的網卡IP地址,NFS網絡掛載時必須設置。
init 是指定掛載文件系統(tǒng)之后運行的腳本,用來做一些系統(tǒng)初始化。
2.6 查看開發(fā)板的配置信息--bdinfo
TINY4412 # bdinfo
arch_number = 0x00001200 ->開發(fā)板的機器碼, 用來引導操作系統(tǒng)的內核
boot_params = 0x40000100 ->啟動參數(shù)存儲的內存位置
DRAM bank = 0x00000000 -> DRAM 編號,這里表示是第 0 個 DDR
-> start = 0x40000000 -->DRAM 的起始地址
-> size = 0x10000000 -->DRAM 的大小 ( 0x10000000 /1024 /1024 = 256M)
DRAM bank = 0x00000001 -> DRAM 編號,這里表示是第 1 個 DDR
-> start = 0x50000000 -->DRAM 的起始地址
-> size = 0x10000000 -->DRAM 的大小( 0x10000000 /1024 /1024 = 256M)
DRAM bank = 0x00000002-> DRAM 編號,這里表示是第 2 個 DDR
-> start = 0x60000000 -->DRAM 的起始地址
-> size = 0x10000000 ->DRAM 的大小( 0x10000000 /1024 /1024 = 256M)
DRAM bank = 0x00000003-> DRAM 編號,這里表示是第 3 個 DDR
-> start = 0x70000000 ->DRAM 的起始地址
-> size = 0x0FF00000 ->DRAM 的大小( 0x10000000 /1024 /1024 = 256M)
ethaddr = 00:40:5c:26:0a:5b ->網卡 MAC 地址(DM9600)
ip_addr = 192.168.0.20 ->開發(fā)板的 IP
baudrate = 0 bps ->波特率,這里是代碼有問題,應該 115200
TLB addr = 0x3FFF0000 ->MMU(CPU) 映射表存儲位置
relocaddr = 0xC3E00000 ->代碼重新定位的地址
reloc off = 0x00000000 ->重定位地址
irq_sp = 0xC3CFBF58 ->irq堆棧指針
sp start = 0xC3CFBF50 ->開始地址堆棧指針
FB base = 0x00000000 ->framebuffer基地址
復制代碼
2.7 內存數(shù)據顯示->md
查看幫助:
TINY4412 # ? md
md - memory display 內存數(shù)據顯示---只能顯示內存中的數(shù)據,就是說只能在DDR地址中操作
?
Usage:
md [.b, .w, .l] address [# of objects]
復制代碼
Md.b : 以字節(jié)方式顯示數(shù)據 Md.w : 以字(2 個字節(jié)) Md.l : 以雙字(4 個字節(jié)) 以上表示以字節(jié)、字(2 個字節(jié))、雙字(4 個字節(jié))為單位進行顯示
格式: Md.b <要顯示的地址> [顯示的數(shù)據個數(shù)]
TINY4412 # md.b 1000000 10 //將起始地址1000000處的10個數(shù)據顯示到終端
01000000: 06 00 00 ea fe ff ff ea fe ff ff ea fe ff ff ea ................
復制代碼
示例:
TINY4412 # md.b 1000000 10 一個字節(jié)顯示:
01000000: 06 00 00 ea fe ff ff ea fe ff ff ea fe ff ff ea ................
TINY4412 # md.w 1000000 10 兩個字節(jié)顯示
01000000: 0006 ea00 fffe eaff fffe eaff fffe eaff ................
01000010: fffe eaff fffe eaff 301a ea00 301b ea00 .........0...0..
TINY4412 # md.l 1000000 10 四個字節(jié)顯示
01000000: ea000006 eafffffe eafffffe eafffffe ................
01000010: eafffffe eafffffe ea00301a ea00301b .........0...0..
01000020: e59f01a4 e3a01000 e5801000 e59f019c ................
01000030: e5900000 e200003e e330003e 1a00000d ....>...>.0.....
復制代碼
2.8 復制內存命令 cp
查看幫助:
TINY4412 # help cp
cp - memory copy 內存拷貝 --只能在內存中拷貝,就是說只能在DDR地址中操作
?
Usage:
cp [.b, .w, .l] source target count 源地址 目標地址 數(shù)量個數(shù)
復制代碼
示例1:
TINY4412 # cp 100000 4000000 10
從起始地址100000開始拷貝10個數(shù)據到4000000的地址處
復制代碼
示例2:
TINY4412 # md.b 46000000
46000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
TINY4412 # md.b 10000000
10000000: 11 20 41 e4 08 00 05 08 05 00 00 00 10 00 00 00 . A.............
TINY4412 # cp 10000000 46000000 10 從起始地址10000000開始拷貝10個數(shù)據到46000000的地址處
TINY4412 # md.b 46000000
46000000: 11 20 41 e4 08 00 05 08 05 00 00 00 10 00 00 00 . A.............
復制代碼
2.9 查看EMMC的信息->mmcinfo
查看幫助:
TINY4412 # help mmcinfo
mmcinfo - mmcinfo -- display MMC info >輸出指定編號 mmc 的信息, 是要指定的編號
?
Usage:
mmcinfo
復制代碼
編號說明: mmc 的編號是會變化的, Tiny4412 板上有 EMMC,有SD卡。這兩個都歸類為 MMC。 編號是0,1。 但是誰是0,誰是 1,是不確定的, 和啟動方式有關。 在哪個存儲器啟動,哪個就是編號就是0。
查看SD卡信息:
TINY4412 # mmcinfo 0
Device: S3C_HSMMC2 設備名稱
Manufacturer ID: 2 制造商標識 ID
OEM: 544d 設備制造商
Name: SE08G 名稱
Tran Speed: 0
Rd Block Len: 512 每一塊的大小,字節(jié)為單位
SD version 2.0 SD卡的版本
High Capacity: Yes 是否是大容量卡
Size: 7460MB (block: 15278080) 容量大小,(總共有多少個塊)
Bus Width: 4-bit 總線寬度,SD卡接口是4條線
Boot Partition Size: 0 KB 引導分區(qū)大小
復制代碼
查看EMMC的信息:
TINY4412 # mmcinfo 1
Device: S5P_MSHC4 設備
Manufacturer ID: 15 制造商ID
OEM: 100 原始設備制造商
Name: 4YMD3 名稱
Tran Speed: 0 Tran速度
Rd Block Len: 512 每一塊的大小,字節(jié)為單位
MMC version 4.0 MMC版本
High Capacity: Yes 是否是大容量卡
Size: 3728MB (block: 7634944) 卡的容量和總共的塊大小
Bus Width: 8-bit 總線寬度
Boot Partition Size: 4096 KB 引導分區(qū)大小
復制代碼
2.10 mmc命令子系統(tǒng)
mmc不是單獨的命令,他是一個子系統(tǒng),支持多個命令。
查看mmc子系統(tǒng)的幫助信息
TINY4412 # help mmc
mmc - MMC sub system MMC子系統(tǒng)
?
Usage:
mmc read addr blk# cnt --從 mmc 指定扇區(qū)讀取數(shù)據到 ddr 中
mmc write addr blk# cnt --寫 ddr 中的數(shù)據到指定 mmc 扇區(qū)中
mmc rescan --重新掃描指定設備, 相當于重新初始化
mmc erase --擦除指定扇區(qū)
mmc list - lists available devices --列出有效的 mmc 設備
復制代碼
參數(shù)說明:
: mmc 編號,編號原則同前面說的,就是對哪一個設備操作。
addr: DDR3 內存地址;
blk#: 要讀/寫的 mmc 扇區(qū)地址起始地址;
cnt: 要讀/寫的 mmc 扇區(qū)數(shù)量;
boot: 引用分區(qū),一般是操作 bl1,bl2,u-boot 的 mmc 扇區(qū)范圍。
user: 用戶分區(qū), 一般是操作內核,文件系統(tǒng)的 mmc 扇區(qū)范圍。
:要擦除的 mmc 扇區(qū)起始地址;
:要擦除的 mmc 扇區(qū)數(shù)量;
復制代碼
mmc 命令中的參數(shù)都是 16 進制表示,不是 10 進制表示
(1)從MMC扇區(qū)讀數(shù)據到DDR內存中->mmc read
格式:mmc read addr blk# cnt
blk#:要讀/寫的 mmc 扇區(qū)的起始地址 (十六進制表示)
Cnt :要讀/寫的 mmc 扇區(qū)數(shù)量(十六進制表示)
addr: DDR3 內存地址;
TINY4412 # mmc read 0 45000000 1 1
?
MMC read: dev # 0, block # 1, count 1 ... 1 blocks read: OK
?
這里是從SD卡的第1個扇區(qū)開始,讀取一個扇區(qū)的數(shù)據到DDR的45000000地址處!
?
示例:
TINY4412 # md.b 48000000 10
48000000: ff ff ff ff ff ff ff ff ff ff ff ff bf ff ff ff ................
?
//從SD卡第一個扇區(qū)開始,讀取一個扇區(qū)的數(shù)據到DDR的48000000地址處
TINY4412 # mmc read 0 48000000 1 1
?
MMC read: dev # 0, block # 1, count 1 ... 1 blocks read: OK
TINY4412 # md.b 48000000 10
48000000: a3 69 d3 18 e9 7d b9 66 d1 6b d5 6e d4 79 a6 79 .i...}.f.k.n.y.y
復制代碼
(2)mmc write --寫 ddr 中的數(shù)據到指定 mmc 扇區(qū)中
格式:mmc write addr blk# cnt --將 ddr 中的數(shù)據到寫到指定mmc 扇區(qū)中
blk#:要讀/寫的 mmc 扇區(qū)的起始地址(十六進制表示)
Cnt :要讀/寫的 mmc 扇區(qū)數(shù)量(十六進制表示)
addr:DDR3 內存地址;
示例:
TINY4412 # mmc write 0 48000000 1 1 從DDR 48000000地址處,寫1個扇區(qū)的數(shù)據到SD的第1個扇區(qū)
?
MMC write: dev # 0, block # 1, count 1 ... 1 blocks written: OK
復制代碼
(3)擦除指定扇區(qū)
格式:
mmc erase --擦除指定扇區(qū)
參數(shù)說明:
:要擦除的 mmc 扇區(qū)起始地址
:要擦除的 mmc 扇區(qū)數(shù)量
boot: 引用分區(qū)
User: 用戶分區(qū)
為了方便比較,先將SD卡的第1個扇區(qū)內容讀到DDR中。
?
讀出第10個扇區(qū)的數(shù)據
TINY4412 # mmc read 0 48000000 1 1
?
MMC read: dev # 0, block # 1, count 1 ... 1 blocks read: OK
?
顯示第1個扇區(qū)的數(shù)據
TINY4412 # md.b 48000000 30
48000000: a3 69 d3 18 e9 7d b9 66 d1 6b d5 6e d4 79 a6 79 .i...}.f.k.n.y.y
48000010: 07 00 00 ea fe ff ff ea fe ff ff ea fe ff ff ea ................
48000020: fe ff ff ea fe ff ff ea fe ff ff ea fe ff ff ea ................
?
擦除SD卡的第一個扇區(qū)
TINY4412 # mmc erase user 0 1 1
START: 1 BLOCK: 1 開始1扇區(qū),擦除1扇區(qū)
high_capacity: 1 高容量
Capacity: 15278080 容量
?
Erase 擦除
?
512 B erase Done 512字節(jié)
MMC erase Success.!! MMC擦除成功。! !
?
再讀再顯示
TINY4412 # mmc read 0 40000000 1 1
?
MMC read: dev # 0, block # 1, count 1 ... 1 blocks read: OK
TINY4412 # md.b 40000000 30
40000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
40000010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
40000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
?
恢復數(shù)據,再讀再顯示
TINY4412 # mmc write 0 48000000 1 1 將DDR里的數(shù)據寫入SD卡中
?
MMC write: dev # 0, block # 1, count 1 ... 1 blocks written: OK
TINY4412 # mmc read 0 40000000 1 1 再次讀出數(shù)據
?
MMC read: dev # 0, block # 1, count 1 ... 1 blocks read: OK
TINY4412 # md.b 40000000 30 顯示---數(shù)據已經恢復
40000000: a3 69 d3 18 e9 7d b9 66 d1 6b d5 6e d4 79 a6 79 .i...}.f.k.n.y.y
40000010: 07 00 00 ea fe ff ff ea fe ff ff ea fe ff ff ea ................
40000020: fe ff ff ea fe ff ff ea fe ff ff ea fe ff ff ea ................
復制代碼
(4)列出MMC設備--mmc list
TINY4412 # mmc list
S3C_HSMMC2: 0 --- 0 編號的 mmc 設備,這里接 SD 卡
S5P_MSHC4: 1 --- 1 編號的 mmc 設備,這里接 開發(fā)板板載的EMMC
復制代碼
2.11 查看MMC分區(qū)信息--fatinfo
TINY4412 # help fatinfo
fatinfo - fatinfo - print information about filesystem
打印文件系統(tǒng)信息
?
Usage:
fatinfo 格式說明
- print information about filesystem from 'dev' on 'interface'
?
參數(shù)說明:
: mmc 或 usb;
dev: 設備編號;
part: 設備分區(qū)號
?
?
查看第0個設備信息---這里是SD卡:
TINY4412 # fatinfo mmc 0
-----Partition 1-----
Partition1: Start Address(0x2e2e2e2e), Size(0x2e2e2e2e)
分區(qū)1 起始地址 大小
------------------------
-----Partition 2-----
Partition1: Start Address(0x2e2e2e2e), Size(0x2e2e2e2e)
------------------------
-----Partition 3-----
Partition1: Start Address(0x2e2e2e2e), Size(0x2e2e2e2e)
------------------------
-----Partition 4-----
Partition1: Start Address(0x2e2e2e2e), Size(0x2e2e2e2e)
------------------------
Interface: SD/MMC
接口
Device 0: Vendor: Man 02544d Snr c9226e33 Rev: 2.1 Prod: SE08G
Type: Removable Hard Disk
類型:可移動硬盤
Capacity: 14.5 MB = 0.0 GB (29840 x 512)
Partition 1: Filesystem: FAT32 "NO NAME "
復制代碼[:part]>
下一篇繼續(xù)介紹。
審核編輯:湯梓紅
-
Linux
+關注
關注
87文章
11342瀏覽量
210215 -
命令
+關注
關注
5文章
696瀏覽量
22084 -
Uboot
+關注
關注
4文章
125瀏覽量
28307
發(fā)布評論請先 登錄
相關推薦
評論