先說下 ?我是結合yanghao和韋東山老師兩位的博客文檔自己移植U-boot來搭建整個系統,我用的u-boot-2010.09版本來移植的,對不同的開發板基本上是通用的,最多就是Not flash需要更改一些參數吧了,有可能文章寫得不是很全,可以直接看補丁文件。
自己移植這一塊確實挺幸苦的,今天在這里寫出來,希望給大家帶來幫助,同時也是給自己的一個總結,更方便查找筆記。在這里我講寫出U-boot,kernel,rootfs怎么的移植步驟,這是一個耗時間的過程,不急慢慢寫,呵呵。這里面移植U-boot是最難的,你會學到很多東西,畢竟是跟硬件打交道,好了廢話不多說。
虛擬機:VMWare--ubuntu9.0
開發板:SDRAM:64M ? ?ROM:NAND FLASH 256M
U-boot下載地址:[u-boot-2010.09.tar.bz2?](http://download.csdn.net/detail/qq_21792169/9248959)
補丁文件下載地址:[u-boot-2010.09_jz2440.patch](http://download.csdn.net/detail/qq_21792169/9340099)
## 一, 在Uboot中添加jz2440開發板的支持
~~~
?#tar -xjvf u-boot-2010.09.tar.bz2? /*測試下自己的交叉編譯器是否支持該版本的U-boot*/
?#make smdk2410_config
make ?//如果編譯不出錯的話就可以開始移植了,我用的交叉編譯器版本是一下是查看自己交叉編譯器的版本
~~~
如果有錯請更換交叉編譯器版本。
~~~
?#arm-linux-gcc -v ? ?//查看自己的交叉編譯版本
/work/tools/gcc-3.4.5-glibc-2.3.6/lib/gcc/arm-linux/3.4.5/specs
?# cd u-boot-2010.09.tar.bz2?
?#make distclean
~~~
## 二, u-boot移植步驟方向說明:
1.以SMDK2410為模板,建立好開發板相關的文件,并利用交叉編譯器編譯生成.bin文件;
2.再修改相關時鐘頻率使之適應開發板硬件配置,讓uboot能在ram中運行調試成功(即串口能打印數據);
3.修改norflash相關配置,使uboot能支持norfalsh的讀寫,附:uboot默認支持從norflash啟動;
4.修改nandflash相關配置,使uboot能支持nandflash的讀寫;使uboot能從nand flash啟動;
5.增加uboot的功能,如網絡(此開發板是DM9000A)、USB等(這個功能沒實現);
6.修改相應配置,使uboot能引導Linux系統啟動;
7。增加yaffs2文件系統的燒寫;
##三、讓U-B00T在內存中運行起來
**(一)創建開發板文件夾**
1.進入board/samsung目錄,拷貝目錄中的smdk2410文件夾放在當前目錄下,并重命名為jz2440(這是板子配置文件夾);
2.進入jz2440?,把文件smdk2410.c重命名為jz2440?.c(uboot啟動第二步執行的文件);打開Makefile,修改COBJS:=jz2440?.o flash.o
**(二)創建配置文件**
進到include/configs目錄下,找到配置文件smdk2410.h,將其拷貝并重命名為jz2440.h(uboot相關各種宏定義,關鍵文件);
**(三)創建編譯規則**
打開頂層Makefile(注意是在根目錄下),修改(紅色部分):
老版本:
1.添加編譯板配置文件時用到的命令(即makejz2440?_config ;注意@之前加的是tab,不是空格)
~~~
smdk2410_config?:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
jz2440?_config?:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t jz2440? samsung s3c24x0 ? //命令前面一定留個tab行
~~~
新版本:
smdk2410 ? ? ? ?arm ? ? arm920t ? ? ? ? - ? ? ? ? ? ? ? samsung ? ? ? ? s3c24x0
jz2440 ? ? ? ? ?arm ? ? arm920t ? ? ? ? - ? ? ? ? ? ? ? samsung ? ? ? ? s3c24x0
## 四,編譯U-boot
編譯之前打開/include/configs/jz2440.h;增加宏定義 ??
~~~
?#define?CONFIG_SKIP_LOWLEVEL_INIT ? 1 //跳過底層初始化,測試的u-boot.bin直接運行在SDRAM中
/*#define CONFIG_SKIP_RELOCATE_UBOOT ? ?1 ?*/ 這是針對Nor FLASH 運行的 注釋掉u-boo才能初始化CPU ?避免重新定位
1.make distclean //清空之前操作生成的各種文件
2.makejz2440_config //生成配置文件
3.make //編譯.bin文件
~~~
若能成功編譯出.bin文件,則說明交叉編譯器沒問題,初步移植也沒問題,此時的.bin 文件只是基于smdk2410開發板的,在咱們的開發板是jz2440上不能適用的,所以在此基礎上還要對相應的文件進行修改配置,例如要修改jz2440.c;jz2440.h等文件使其能支持本開發板,以上的步驟是很通用的。
到這里這個U-boot的模板就建立起來了,把u-boot.bin燒寫在SDRAM中,但是不會顯示任何信息,那是對的,我們還沒有初始化時鐘,下章我們主要在start.S中修改文件。
- 前言
- FL2440的u-boot-2010.09移植(一)
- FL2440的u-boot-2010.09移植(二)
- FL2440的U-boot-2009.08移植(三)支持Nor FLASH
- FL2440的U-boot-2009.08移植(四) 支持DM900網卡
- FL2440的U-boot-2009.08移植(五)uboot架構中NAND Flash驅動修改
- FL2440如何利用JLINK燒寫U-boot到NAND Flash中
- uboot中的快捷菜單的制作說明
- env_relocate 函數深入分析
- U-boot mkimage指定Linux內核地址時的兩種方式
- 實現u-boot對yaffs/yaffs2文件系統下載的支持