天天看點

linux使用者環境下進入uboot,嵌入式linux開發uboot移植(一)——uboot項目簡介

嵌入式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