嵌入式linux開發uboot移植(一)——uboot項目簡介
一、uboot簡介
U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的從FADSROM、8xxROM、PPCBOOT逐漸發展演化而來的開放源碼項目。
在作業系統方面,U-Boot不僅支援嵌入式Linux系統的引導,它還支援NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式作業系統。目前支援的目标作業系統是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS, android。
在CPU架構方面,U-Boot除了支援PowerPC系列的處理器外,還能支援MIPS、x86、ARM、NIOS、XScale等諸多常用系列的處理器。
U-Boot項目的開發目标是支援盡可能多的嵌入式處理器和嵌入式作業系統。
二、uboot的特性
Uboot的特性:
1、開放源碼;
2、支援多種嵌入式作業系統核心,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
3、支援多個處理器系列,如PowerPC、ARM、x86、MIPS;
4、較高的可靠性和穩定性;
5、高度靈活的功能設定,适合U-Boot調試、作業系統不同引導要求、産品釋出等;
6、豐富的裝置驅動源碼,如序列槽、以太網、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
7、較為豐富的開發調試文檔與強大的網絡技術支援;
三、主要功能
U-Boot支援的主要功能:
1、系統引導支援NFS挂載、RAMDISK(壓縮或非壓縮)形式的根檔案系統;支援NFS挂載、從FLASH中引導壓縮或非壓縮系統核心;
2、基本輔助功能強大的作業系統接口功能;可靈活設定、傳遞多個關鍵參數給作業系統,适合系統在不同開發階段的調試要求與産品釋出,尤以Linux支援最為強勁;支援目标闆環境參數多種存儲方式,如FLASH、NVRAM、EEPROM;
3、CRC32校驗可校驗FLASH中核心、RAMDISK鏡像檔案是否完好;
4、裝置驅動序列槽、SDRAM、FLASH、以太網、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等驅動支援;
5、上電自檢功能SDRAM、FLASH大小自動檢測;SDRAM故障檢測;CPU型号;
6、特殊功能XIP核心引導;
四、工作模式
U-Boot的工作模式有啟動加載模式和下載下傳模式。
1、啟動加載模式
啟動加載模式是Bootloader的正常工作模式,嵌入式産品釋出時,Bootloader必須工作在這種模式下,Bootloader将嵌入式作業系統從FLASH中加載到SDRAM中運作,整個過程是自動的。
2、下載下傳模式
下載下傳模式就是Bootloader通過某些通信手段将核心映像或根檔案系統映像等從PC機中下載下傳到目标闆的FLASH中。使用者可以利用Bootloader提供的一些指令接口來完成自己想要的操作。開發人員可以使用各種指令,通過序列槽連接配接或網絡連接配接等通信手段從主機(Host)下載下傳檔案(比如核心映像、檔案系統映像),将它們直接放在記憶體運作或是燒入Flash類固态儲存設備中。
闆子與主機間傳輸檔案時,可以使用序列槽的xmodem/ymodem/zmodem協定,還可以使用網絡通過tftp、nfs協定來傳輸,以及USB下載下傳等方法。
一般來說,嵌入式開發人員采用下載下傳模式進行開發嵌入式系統。通常采用交叉網線将PC與目标開發闆連接配接,通過TFTP伺服器下載下傳核心,用NFS伺服器挂載檔案系統。
五、uboot常用指令
1、擷取指令
指令:help 或?
功能:檢視目前U-boot版本中支援的所有指令。
2、環境變量指令bootdelay執行自動啟動(bootcmd中的指令)的等候秒數
baudrate序列槽控制台的波特率
netmask以太網的網絡掩碼
ethaddr以太網的MAC位址
bootfile預設的下載下傳檔案名
bootargs傳遞給Linux核心的啟動參數
bootcmd自動啟動時執行指令
serveripTFTP伺服器端的IP位址
ipaddr本地的IP位址
stdin标準輸入裝置,一般是序列槽
stdout标準輸出,一般是序列槽,也可是LCD(VGA)
stderr标準出錯,一般是序列槽,也可是LCD(VGA)
使用printenv指令可以列印出目前開發闆的環境變量。
setenvenvname value設定環境變量的值,如果沒有value,則表示删除env環境變量
saveenv将修改的環境變量儲存到固态存儲器中。
bootcmd 自動啟動執行指令,uboot開機後會自動倒計時,在倒計時結束前如果沒有外部按鍵打斷自動計時,uboot将自動執行bootcmd變量儲存的指令。
3、序列槽傳輸指令
loadb - load binary file over serial line (kermit mode)
loadx - load binary file over serial line (xmodem mode)
loady - load binary file over serial line (ymodem mode)
4、網絡指令
uboot可以通過網絡來傳輸檔案到開發闆,直接用交叉網線連接配接開發闆和電腦,也可以用普通直連網線連接配接路由器。
ping hostname
網絡不通的原因:
A、U-boot網卡驅動有問題B、U-boot網絡協定延時配置有問題C、網絡參數配置問題,比如IP等,Host和Target都有可能有問題。
如果網絡連通,就可以通過tftp、NFS挂載開發闆
nfs - boot p_w_picpath via network using NFS protocol
tftpboot- boot p_w_picpath via network using TFTP protocol
bootp - boot p_w_picpath via network using BOOTP/TFTP protocol
5、NandFlash操作指令nand info顯示可使用的Nand Flash
nand device [dev]顯示或設定目前使用的Nand Flash
nand read addr off sizeNand Flash讀取指令,從Nand的off偏移位址處讀取size位元組的資料到SDRAM的addr位址。
nand write addr off sizeNand Flash燒寫指令,将SDRAM的addr位址處的size位元組的資料燒寫到Nand的off偏移位址。
nand write[.yaffs[1]]addr off size燒寫yaffs 映像專用的指令,.yaffs1 for 512+16 NAND
nand erase [clean] [off size]Nand Flash檫除指令,擦除Nand Flash的 off 偏移位址處的size 位元組的資料
nand bad顯示Nand Flash的壞塊
nand dump[.oob] off顯示Nand Flash中的資料(16進制)
nand scrub徹底擦除整塊Nand Flash中的資料,包括OOB。可以擦除軟體壞塊标志。
nand markbad off标示 Nand的 off 偏移位址處的塊為壞塊
6、記憶體、寄存器操作指令
nm 修改記憶體值(指定位址)
格式: nm [.b, .w, .l] address
mm 修改記憶體值(位址自動加一)
格式:mm [.b, .w, .l] address
md 顯示記憶體值
格式:md [.b, .w, .l] address [# of objects]
mw 用指定的資料填充記憶體
格式:mw [.b, .w, .l] address value [count]
cp 記憶體的拷貝(包括記憶體與Nor Flash間的資料拷貝)
格式:cp [.b, .w, .l] source target count
7、USB操作指令usb reset初始化USB控制器
usb stop [f]關閉USB控制器
usb tree已連接配接的USB裝置樹
usb info [dev]顯示USB裝置[dev]的資訊
usb storage顯示已連接配接的USB儲存設備
usb dev [dev]顯示和設定目前USB儲存設備
usb part [dev]顯示USB儲存設備[dev]的分區資訊
usb read addr blk# cnt讀取USB儲存設備資料
使用USB操作指令前必須確定USB裝置連接配接好,usb reset,以初始化USB控制器,擷取裝置資訊。
8、SD/MMC操作指令
mmc init [dev] - 初始化MMC子系統
mmc device [dev] - 檢視和設定目前裝置
使用SD/MMC操作指令前必須確定SD/MMC裝置連接配接好,mmc init,以初始化MMC控制器,擷取裝置資訊。
六、uboot在Flash中的分區
嵌入式系統中一般用Flash作為啟動裝置,Flash上存儲着uboot、環境變量、核心映像和檔案系統。uboot一般存放在Flash的起始位址,其所在的扇區位置一般由SoC規定,一般為扇區0或扇區1。uboot後存放環境變量,核心和檔案系統的存放位置則可以有規劃的自由配置設定。
Uboot官方下載下傳位址:
git://git.denx.de/u-boot.git
http://git.denx.de/u-boot.git