在嵌入式系統中,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成功。
這是第一階段,如果編譯能夠成功,恭喜你,可以進入下一步的移植了······