一、u-boot工程
1.BootLoader介紹
BootLoader是操作系統運行之前要執行的一段程序,它復制初始化硬件設備、建立內存空間映射,為操作系統的運行做好准備,是一個專門加載操作系統的程序。
對於嵌入式系統而言,沒有通用的硬件平台,因此也沒有通用的BootLoader,不同的平台、CPUyi架構都有不同的BootLoader,因為BootLoader不光依賴CPU的體系結構,也以來硬件平台的配置,對於不同的開發板而言,哪怕它的CPU一樣,BootLoader也會有區別,因此我們為每一款開發板制作屬於它的BootLoader程序。
但大部分開發板的BootLoader仍有許多共性,所以我們沒有必須全部從零制作,而對一個基礎的BootLoader進行修改,制作出能用的BootLoader程序。
2.u-boot簡介
u-boot( Universal Boot Loader)是BootLoader的一種,它遵循GPL通用許可證的開源項目,它的源碼的目錄、編譯形式都和Linux的源碼很相似,可以說u-boot就是仿照Linux開發的。
3.u-boot源碼的獲取
① 源頭的代碼是u-boot官網下載的,這種源碼是最干凈最存粹的,一般CPU 的生產廠商會下載這種源碼。
當CPU廠商生產出一款CPU之后就會使用這款CPU制作出一塊公板(它會把這款CPU所具備的功能全部體現出來)。
然后根據公板修改出一份符合它的u-boot。
② 開發板的供應商會購買CPU廠商的公板,然后對公板進行裁剪(去掉一些不需要的功能、替換掉一些不必要的硬件),然后根據裁剪后開發板有廠商提供的u-boot進行修改,從而制作出屬於這款開發板的u-boot。
③ 官網、CPU廠商、開發板廠商 可以獲取u-boot源碼。
4.u-boot源碼結構
頂層的u-boot源有30多個目錄,大致分為三類:
① 與CPU體系結構或開發板硬件直接相關的代碼
arch:和體系結構相關代碼,如arm、avr32、mips、openrise、powerpc及x86.
board:目標板相關我你就按,主要包含一些內存驅動。
include:U-Boot頭文件,尤其是config子目錄下與目標板相關的配置頭文件是移植過程中經常要求改的文件。
② 通用的函數、驅動程序
common:獨立與處理器體系結構的通用代碼,如內存大小探測與故障檢測。
driver:通用 所支持的設備驅動,如CFI FLASH驅動(目前對INTEL FLASH支持較好),網卡。
fs:包含文件系統(管理硬盤上文件的程序)的代碼。
lib:與處理器體系無關的庫文件,如md5、CRC等算法實現。
lib_generic:通用的庫函數。
net:與網絡功能相關的文件目錄,有簡單4層網絡協議棧的實現,如arp、bootp、nfs和tftp等。
post:上電自檢文件目錄,尚有待完善。
disk:對磁盤的支持。
③ U-Boot應用程序、工具、測試程序或文檔
api:API接口,為其他應用提供的與機器類型、體系結構無關的API。
doc:U-Boot的說明文檔。
examples:可在U-Boot下運行的示例程序,如hello_world.c和timer.c
test:測試腳本和代碼。
tool:用於創建U-Boot S-RECORD和BIN鏡像文件的工具。
5.uboot的配置編譯
通過Makefile組織編譯的,頂層的Makefile可以對開發板進行整體配置,然后遞歸調用各級目錄下的Makefike,最后把所有編譯過的代碼鏈接成uboot鏡像。
注意:編譯前確定交叉編譯,Makefile的147行
① 清理之前的編譯殘留
make distclean
② 配置編譯方法
make x210_sd_config
注意:chmod +x mkconfig 加執行權限
③ 多線程編譯
make -jn 一般n是CPU內核數量的2倍。
6.uboot的運行
① uboot是ELF格式的,而uboot.bin才是純二進制指令格式的
② uboot.bin並不能直接運行,原因是沒有添加校驗和,而且之前添加的校驗和的工具不能繼續使用。
③ sd_fusing目錄中有為u-boot.bin添加校驗和的工具,但把並不能直接使用,需要在makefile添加以下指令:
291 all:
cd sd_fusing && make
./sd_fusing/mkbl1 u-boot.bin sd-bl1-8k.bin 8192
dd if=sd-bl1-8k.bin of=u-boot_image.bin
dd if=u-boot.bin of=u-boot_image.bin seek=48
rm -rf sd-bl1-8k.bin
cp u-boot_image.bin /media/sf_shared/image/
二、uboot常用命令
1.幫助命令
help/p/?
2.環境變量相關命令
printenv 顯示所有環境變量
setenv 設置環境變量
saveenv 保存環境變量到硬盤
注意:修改只是臨時有效,重啟后就會還原,必須使用保存命令才能長期有效。
環境變量都是字符串,沒有數據類型之分
u-boot中的環境變量
netmask 子網掩碼
ipaddr 板子的ip地址
ethaddr mac地址
baudrate 串口波特率
bootdelay 啟動系統前的等待秒數
3.網絡相關的命令
ping ip 測試與服務器是連通 的
tftp 0x01020304 file.bin 可以從服務器下載程序到指定的內存地址。