在嵌入式系統中,bootloader起到了一個配置硬件、創建軟件執行環境和調試(僅在開發階段對於開發人員有用)的作用。本文以目前功能最強大的bootloader--uboot爲例,記錄了我將uboot一直到QQ2440(S3C2440)開發板的過程。
最開始要說一下uboot各文件夾的內容:
board 目錄:裏面是各種開發板目錄,每個開發板相當於一種硬件配置;
common目錄:裏面是各種命令實現的源文件,是各個開發板共同使用的目錄;
cpu 目錄:顧名思義,裏面是各種內核體系的目錄,每一個目錄代表一種內核結構;
doc目錄:裏面是各種移植文檔,供移植參考使用;
drivers目錄:裏面是各種驅動程序;
examples目錄:裏面是一個移植例程;
include目錄:是所有內核共有的、所要包含的頭文件;
lib_**目錄: 針對不同體系,各自獨特的庫文件;
net目錄:裏面是各種網絡協議;
tools目錄:裏面是各種小工具;
基本上就這些目錄,還有一些小目錄及文件就不一一列舉了,下面介紹一下具體的移植過程:
1.1.1 添加開發板的配置選項
進入U-Uoot根目錄,修改Makefile文件,參考smdk2410的配置選項修改如下:
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
qq2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t qq2440 NULL s3c24x0
各項的意思如下:
arm : CPU的架構(ARCH)
arm920t : CPU的類型(CPU),其對應於cpu/arm920t子目錄。
qq2440: 開發板的型號(BOARD),對應於board/ mini2440目錄。
NULL: 開發者/或經銷商(vender),NULL爲沒有。
s3c24x0 : 片上系統(SOC)。
同時在“ifndef CROSS_COMPILE ”之前加上自己交叉編譯器的路徑,我的是arm-linux-gcc-4.3.2
1.1.2 在/board子目錄中建立自己的開發板qq2440目錄
目錄結構爲board/qq2440。如果開發者/經銷商(vender)不爲NULL,則目錄結構爲board/verder_name/mini2440,否則編譯會出錯。然後,將smdk2410目錄下的文件考入此目錄中,並將其中的smdk2410.c改名爲mini2440.c。同時還得修改board/mini240/Makefile文件:
COBJS := qq2440.o flash.o
1.1.3 在include/configs/中建立配置頭文件
將smdk2410.h 複製一份在相同目錄下,並改名爲qq2440.h。
1.1.4 測試編譯能否成功
回到U-Boot主目錄,(若之前有編譯過,最好執行一下make clean) make qq2440_config,再make,編譯生成u-boot.bin成功。
這是第一階段,如果編譯能夠成功,恭喜你,可以進入下一步的移植了······