嵌入式Linux開發(fā)-uboot常用命令介紹(上篇)
1. 前言
U-boot是一種開源bootloader, 作用是用來引導(dǎo)操作,以及給開發(fā)人員提供測(cè)試調(diào)試工具。本身算是個(gè)精簡(jiǎn)的linux系統(tǒng),主要是負(fù)責(zé)硬件的初始化和引導(dǎo),本身帶有一些工具,作為引導(dǎo)程序,常作為嵌入式設(shè)備的引導(dǎo)。當(dāng)真正的系統(tǒng)開始運(yùn)行的時(shí)候U-boot就把管理權(quán)限交了出去。
選擇U-Boot的理由:
① 開放源碼;
② 支持多種嵌入式操作系統(tǒng)內(nèi)核,如linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
③ 支持多個(gè)處理器系列,如PowerPC、ARM、x86、MIPS;
④ 較高的可靠性和穩(wěn)定性;
⑤ 高度靈活的功能設(shè)置,適合U-Boot調(diào)試、操作系統(tǒng)不同引導(dǎo)要求、產(chǎn)品發(fā)布等;
⑥ 豐富的設(shè)備驅(qū)動(dòng)源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
⑦ 較為豐富的開發(fā)調(diào)試文檔與強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持;
U-BOOT工作模式
U-Boot的工作模式有啟動(dòng)加載模式和下載模式。啟動(dòng)加載模式是Bootloader的正常工作模式,嵌入式產(chǎn)品發(fā)布時(shí),Bootloader必須工作在這種模式下,Bootloader將嵌入式操作系統(tǒng)從FLASH中加載到SDRAM中運(yùn)行,整個(gè)過程是自動(dòng)的。下載模式就是Bootloader通過某些通信手段將內(nèi)核映像或根文件系統(tǒng)映像等從PC機(jī)中下載到目標(biāo)板的FLASH中。用戶可以利用Bootloader提供的一些命令接口來完成自己想要的操作。
當(dāng)前測(cè)試uboot命令的開發(fā)板是友善之臂tin441,使用三星的EXYNOS4412,本篇文章重點(diǎn)是介紹uboot命令行的命令功能,用法,使用的uboot版本是2010.12,是友善之臂官方提供的uboot。
2. UBOOT命令介紹
2.1 幫助命令–help
查看當(dāng)前的UBOOT支持那些命令。
TINY4412 # help ? - alias for 'help' base - 打印一組地址偏移量 bdinfo - 開發(fā)板的信息結(jié)構(gòu) boot - boot default, i.e., run 'bootcmd' bootd - boot default, i.e., run 'bootcmd' bootelf - Boot from an ELF image in memory bootm - 從內(nèi)存啟動(dòng)應(yīng)用程序 bootp - 通過使用BOOTP / TFTP協(xié)議的網(wǎng)絡(luò)引導(dǎo)映像 bootvx - Boot vxWorks from an ELF image chpart - 更改活動(dòng)分區(qū) cmp - memory compare coninfo - print console devices and information cp - 內(nèi)存拷貝 crc32 - 檢驗(yàn)和的計(jì)算 dcache - 啟用或禁用數(shù)據(jù)緩存 dnw - dnw - USB設(shè)備進(jìn)行初始化并準(zhǔn)備好接受Windows server(特定的) echo - echo args to console editenv - 修改環(huán)境變量 emmc - 打開/關(guān)閉eMMC引導(dǎo)分區(qū) env - 環(huán)境處理命令 exit - 退出腳本 ext2format- ext2 ext2format——磁盤格式 ext2load- 從Ext2文件系統(tǒng)加載二進(jìn)制文件 ext2ls - 在一個(gè)目錄列表文件(默認(rèn)/) ext3format- ext3 ext3format——磁盤格式 false - 什么也不做,但沒有成功 fastboot- fastboot——使用USB fastboot協(xié)議 fatformat- FAT32 fatformat——磁盤格式 fatinfo - fatinfo——打印文件系統(tǒng)的信息 fatload - fatload——從dos加載二進(jìn)制文件的文件系統(tǒng) fatls - 一個(gè)目錄列表文件(默認(rèn)/) fdisk - fdisk for sd/mmc. go - 在“addr”啟動(dòng)應(yīng)用程序 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
2.2 查看具體命令的使用方法–help
格式:
help <你想要查的指令>
或者 ? <你想要查的指令> ,
甚至 h <你想要查的指令縮寫>。
TINY4412 # help sleep sleep - 延遲執(zhí)行一段時(shí)間 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: 當(dāng)前的波特率。 一般不修改。
bootcmd: 啟動(dòng)命令。
bootdelay:?jiǎn)?dòng)命令 bootcmd 延時(shí)執(zhí)行的時(shí)間。
ethaddr: 網(wǎng)卡 MAC 地址。
gatewayip:網(wǎng)關(guān) IP 地址。
ipaddr: 開發(fā)板 IP 地址。
netmask: 子網(wǎng)掩碼。
serverip: 服務(wù)器 IP(一般是 PC 的 IP,給開發(fā)板提供各種網(wǎng)絡(luò)服務(wù)的主機(jī)的 IP)
bootargs: u-boot 傳遞給操作系統(tǒng)內(nèi)核的啟動(dò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 設(shè)置環(huán)境變量–setenv
查看幫助: TINY4412 # help setenv setenv - set environment variables -->作用是設(shè)置環(huán)境變量 Usage: //命令使用方法 setenv name value ... //使用格式 - set environment variable 'name' to 'value ...' //設(shè)置環(huán)境變量“名稱”“數(shù)值……格式 setenv name - delete environment variable 'name' //刪除環(huán)境變量
使用示例
設(shè)置上電的延時(shí)時(shí)間: TINY4412 # setenv bootdelay 10 //設(shè)置上電延時(shí)時(shí)間為10秒 TINY4412 # saveenv //保存設(shè)置 Saving Environment to SMDK bootable device... done 設(shè)置波特率示例: TINY4412 # setenv baudrate 115200 //設(shè)置波特率為115200 ## Switch baudrate to 115200 bps and press ENTER ... //設(shè)置完需要重啟開發(fā)板,自動(dòng)生效 刪除環(huán)境變量示例: setenv baudrate //刪除baudrate環(huán)境變量
引用環(huán)境變量示例:
TINY4412 # setenv timer 10 //隨便設(shè)置一個(gè)環(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 //設(shè)置成功 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 //設(shè)置的新環(huán)境變量 Environment size: 389/16380 bytes TINY4412 #
2.5 設(shè)置bootargs參數(shù)
bootargs是環(huán)境變量中的重中之重,甚至可以說整個(gè)環(huán)境變量都是圍繞著bootargs來設(shè)置的。
coherent_pool參數(shù):
設(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網(wǎng)絡(luò)掛載示例:
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網(wǎng)絡(luò)文件系統(tǒng)掛載才需要設(shè)置,后面跟著服務(wù)器的NFS地址,掛載目錄
ip參數(shù)是設(shè)置開發(fā)板的網(wǎng)卡IP地址,NFS網(wǎng)絡(luò)掛載時(shí)必須設(shè)置。
init 是指定掛載文件系統(tǒng)之后運(yùn)行的腳本,用來做一些系統(tǒng)初始化。
2.6 查看開發(fā)板的配置信息–bdinfo
TINY4412 # bdinfo arch_number = 0x00001200 ->開發(fā)板的機(jī)器碼, 用來引導(dǎo)操作系統(tǒng)的內(nèi)核 boot_params = 0x40000100 ->啟動(dòng)參數(shù)存儲(chǔ)的內(nèi)存位置 DRAM bank = 0x00000000 -> DRAM 編號(hào),這里表示是第 0 個(gè) DDR -> start = 0x40000000 -->DRAM 的起始地址 -> size = 0x10000000 -->DRAM 的大小 ( 0x10000000 /1024 /1024 = 256M) DRAM bank = 0x00000001 -> DRAM 編號(hào),這里表示是第 1 個(gè) DDR -> start = 0x50000000 -->DRAM 的起始地址 -> size = 0x10000000 -->DRAM 的大小( 0x10000000 /1024 /1024 = 256M) DRAM bank = 0x00000002-> DRAM 編號(hào),這里表示是第 2 個(gè) DDR -> start = 0x60000000 -->DRAM 的起始地址 -> size = 0x10000000 ->DRAM 的大小( 0x10000000 /1024 /1024 = 256M) DRAM bank = 0x00000003-> DRAM 編號(hào),這里表示是第 3 個(gè) DDR -> start = 0x70000000 ->DRAM 的起始地址 -> size = 0x0FF00000 ->DRAM 的大小( 0x10000000 /1024 /1024 = 256M) ethaddr = 00:40:5c:26:0a:5b ->網(wǎng)卡 MAC 地址(DM9600) ip_addr = 192.168.0.20 ->開發(fā)板的 IP baudrate = 0 bps ->波特率,這里是代碼有問題,應(yīng)該 115200 TLB addr = 0x3FFF0000 ->MMU(CPU) 映射表存儲(chǔ)位置 relocaddr = 0xC3E00000 ->代碼重新定位的地址 reloc off = 0x00000000 ->重定位地址 irq_sp = 0xC3CFBF58 ->irq堆棧指針 sp start = 0xC3CFBF50 ->開始地址堆棧指針 FB base = 0x00000000 ->framebuffer基地址
2.7 內(nèi)存數(shù)據(jù)顯示->md
查看幫助:
TINY4412 # ? md md - memory display 內(nèi)存數(shù)據(jù)顯示---只能顯示內(nèi)存中的數(shù)據(jù),就是說只能在DDR地址中操作 Usage: md [.b, .w, .l] address [# of objects]
Md.b : 以字節(jié)方式顯示數(shù)據(jù)
Md.w : 以字(2 個(gè)字節(jié))
Md.l : 以雙字(4 個(gè)字節(jié))
以上表示以字節(jié)、字(2 個(gè)字節(jié))、雙字(4 個(gè)字節(jié))為單位進(jìn)行顯示
**格式:**Md.b <要顯示的地址> [顯示的數(shù)據(jù)個(gè)數(shù)]
TINY4412 # md.b 1000000 10 //將起始地址1000000處的10個(gè)數(shù)據(jù)顯示到終端 01000000: 06 00 00 ea fe ff ff ea fe ff ff ea fe ff ff ea ................
示例:
TINY4412 # md.b 1000000 10 一個(gè)字節(jié)顯示: 01000000: 06 00 00 ea fe ff ff ea fe ff ff ea fe ff ff ea ................ TINY4412 # md.w 1000000 10 兩個(gè)字節(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 四個(gè)字節(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 復(fù)制內(nèi)存命令 cp
查看幫助:
TINY4412 # help cp cp - memory copy 內(nèi)存拷貝 --只能在內(nèi)存中拷貝,就是說只能在DDR地址中操作 Usage: cp [.b, .w, .l] source target count 源地址 目標(biāo)地址 數(shù)量個(gè)數(shù)
示例1:
TINY4412 # cp 100000 4000000 10 從起始地址100000開始拷貝10個(gè)數(shù)據(jù)到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個(gè)數(shù)據(jù)到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
編號(hào)說明:
mmc 的編號(hào)是會(huì)變化的, Tiny4412 板上有 EMMC,有SD卡。這兩個(gè)都?xì)w類為 MMC。 編號(hào)是0,1。 但是誰是0,誰是 1,是不確定的, 和啟動(dòng)方式有關(guān)。 在哪個(gè)存儲(chǔ)器啟動(dòng),哪個(gè)就是編號(hào)就是0。
查看SD卡信息:
TINY4412 # mmcinfo 0 Device: S3C_HSMMC2 設(shè)備名稱 Manufacturer ID: 2 制造商標(biāo)識(shí) ID OEM: 544d 設(shè)備制造商 Name: SE08G 名稱 Tran Speed: 0 Rd Block Len: 512 每一塊的大小,字節(jié)為單位 SD version 2.0 SD卡的版本 High Capacity: Yes 是否是大容量卡 Size: 7460MB (block: 15278080) 容量大小,(總共有多少個(gè)塊) Bus Width: 4-bit 總線寬度,SD卡接口是4條線 Boot Partition Size: 0 KB 引導(dǎo)分區(qū)大小
查看EMMC的信息:
TINY4412 # mmcinfo 1 Device: S5P_MSHC4 設(shè)備 Manufacturer ID: 15 制造商ID OEM: 100 原始設(shè)備制造商 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 引導(dǎo)分區(qū)大小
2.10 mmc命令子系統(tǒng)
mmc不是單獨(dú)的命令,他是一個(gè)子系統(tǒng),支持多個(gè)命令。
查看mmc子系統(tǒng)的幫助信息
TINY4412 # help mmc mmc - MMC sub system MMC子系統(tǒng) Usage: mmc read
參數(shù)說明:
mmc 命令中的參數(shù)都是 16 進(jìn)制表示,不是 10 進(jìn)制表示
(1)從MMC扇區(qū)讀數(shù)據(jù)到DDR內(nèi)存中->mmc read
格式:mmc read
(2)mmc write --寫 ddr 中的數(shù)據(jù)到指定 mmc 扇區(qū)中
格式:mmc write
(3)擦除指定扇區(qū)
格式: mmc erase
(4)列出MMC設(shè)備–mmc list
TINY4412 # mmc list S3C_HSMMC2: 0 --- 0 編號(hào)的 mmc 設(shè)備,這里接 SD 卡 S5P_MSHC4: 1 --- 1 編號(hào)的 mmc 設(shè)備,這里接 開發(fā)板板載的EMMC
2.11 查看MMC分區(qū)信息–fatinfo
TINY4412 # help fatinfo fatinfo - fatinfo - print information about filesystem 打印文件系統(tǒng)信息 Usage: fatinfo
篇幅有限,下一篇繼續(xù)介紹。
Linux 嵌入式
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。