一、移植環境
- 主 機:VMWare--Ubuntu9.10
- 開發板:Mini2440--64MB Nand
- 內核:Kernel:2.6.31.23
- 編譯器:arm-linux-gcc-3.4.5.tgz
- u-boot:u-boot-2010.09.tar.bz2
查看內核版本:
cat /proc/version
查看交叉編譯器的版本:
arm-linux-gcc -v
二、移植步驟
1. uboot結構及啟動過程
uboot最主要的目標是:啟動內核,從flash中讀出內核,然后啟動。主要有兩個階段,包括stage1和stage2,
1.1 stage1階段
u-boot的stage1代碼通常放在cpu/xxxx/start.S文件中,他用匯編語言寫成;主要對底層硬件進行初始化,實現的功能有如下幾點:
a. 設置SVC模式
b. 關看門狗
c. 屏蔽中斷
d. 初始化SDRAM
e. 設置棧
f. 時鐘
g. 將flash中的代碼拷貝的sdram中
h. 清除BSS段
i. 調用_start_armboot(這個是C函數,然后跳轉到stage2步驟中,該函數在arch/arm/lib/board.c中)
1.2 stage2階段
u-boot的stage2代碼主要用C語言寫成,實現了一些外設的功能,包括網卡,USB,串口.....等外設,stage2執行的第一個函數是start_armboot(該函數很重要),具體實現的功能可以查看代碼。
2. 測試自己的開發板項目并編譯
目前u-boot對很多CPU直接支持,可以查看board目錄的一些子目錄,如:board/samsung/目錄下就是對三星一些ARM處理器的支持,有smdk2400、smdk2410和smdk6400,但沒有2440,所以我們就在這里建立自己的開發板項目。
可以先測試交叉編譯器是否安裝正確,在uboot的主目錄下輸入如下命令:
make distclean
make smdk2410_config
make
如果正確,則會生成uboot.bin文件
1)因2440和2410的資源差不多,主頻和外設有點差別,所以我們就在board/samsung/下建立自己開發板的項目,取名叫fl2440
#tar -jxvf u-boot-2010.09.tar.bz2 //解壓源碼
#cd u-boot-2010.09/board/samsung/ //進入目錄
#mkdir fl2440
2)因2440和2410的資源差不多,所以就以2410項目的代碼作為模板,以后再修改
#cp -rf smdk2410/* fl2440/ //將2410下所有的代碼復制到2440下
#cd fl2440 //進入fl2440目錄
#mv smdk2410.c fl2440.c //將fl2440下的smdk2410.c改名為my2440.c
#cd ../../../ //回到u-boot根目錄
#cp include/configs/smdk2410.h include/configs/fl2440.h //建立2440頭文件
#vi board/samsung/fl2440/Makefile //修改fl2440下Makefile的編譯項,如下:
COBJS := fl2440.o flash.o //因在my2440下我們將smdk2410.c改名為my2440.c
3)修改u-boot跟目錄下的Makefile文件。查找到smdk2410_config的地方,在他下面按照smdk2410_config的格式建立fl2440_config的編譯選項,另外還要指定交叉編譯器
#vi Makefile
在smdk6400的上方添加如下代碼
CROSS_COMPILE ?= arm-linux- //指定交叉編譯器為arm-linux-gcc
fl2440 _config : unconfig //2440編譯選項格式
@$(MKCONFIG) $(@:_config=) arm arm920t fl2440 samsung s3c24x0
*說明:arm :CPU的架構(ARCH)
arm920t:CPU的類型
fl2440 :對應在board目錄下建立新的開發板項目的目錄
samsung:新開發板項目目錄的上級目錄,如直接在board下建立新的開發板項目的目錄,則這里就為NULL
s3c24x0:CPU型號
*注意:編譯選項格式的第二行要用Tab鍵開始,否則編譯會出錯
在boards.cfg中添加fl2440
修改如下:
在主目錄下輸入:
vi boards.cfg
然后在smdk2410下方添加如下代碼:
fl2440 arm arm920t fl2440 samsung s3c24x0
4)測試編譯新建的fl2440開發板項目:
make distclean
make fl2440_config
make
如果正常,則會生成uboot.bin