今天完成了通用Uboot 移植於ARM開發板的修改 和 移植工作。我的操作環境是VMware 虛擬機 Ubuntu 10.10。ARM11開發板OK6410。 與其說是自己完成的,還不如說我是借鑒,照搬,套用,挪動...........等等等........呵呵!網上這類帖子挺多的,可以借鑒http://www.linuxidc.com/Linux/2012-04/59295.htm ,等等優秀好文。我這裡就僅僅總結一下自己的學習過程,以便幫助後來者,並方便自己以後查詢。
雖然網絡上的資源挺多的,當對一個菜鳥來說,編譯起來那漫天的報錯還是挺讓人頭疼的,如有你能找到別人已經做好了的ARM_Uboot,用他們的源碼借鑒起來,就能讓你學習的更快一些了,我自己就是借鑒飛凌OK6410的源碼學習的。好了不羅嗦了,借鑒別人的博文來總結自己的學習過程,開始總結如下。
第一:下載通用u-boot源碼。
U-Boot源代碼下載地址 http://www.linuxidc.com/Linux/2011-07/38897.htm
最好下載和你找到的ARM_u-boot 是一個版本的,這樣你不會被一些版本上的差別所誤導,下載完成後,解壓Uboot,我的解壓目錄是Uboot1.1.6 ,我將它成為我們工作的根目錄。
第二:修改Makefile
在根目錄下: vim Makefile 然後瞎改交叉編譯器環境變量,我修改的是 CROSS_COMPILE ?= /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- 在OK6410中實在endif 以後創建的該項,我也是按照這個操作的:
第三:建立smdk6410_config 的編譯選項,這個也就是你自己指定的ARM版子選項。在當前Makefile中 修改如下:先vim 命令查找:/smdk6410。修改為
smdk6410_config : uconfig
@$(MKCONFIG) $(@:_config=) arm s3c64xx smdk6410 samsung s3c6410
在這裡:
arm : 為CPU的架構(ARCH)
s3c64xx : 為CPU的類型(CPU), 其對應於 cpu/s3c64xx 子目錄
smdk6410 : 開發板的型號(BOARD) 它對應了 ./board/samsung/smdk6410
samsung : 開發者、或者經銷商(vender)
s3c6410 : 片上系統(SOC)
我自己認為:能夠充分的理解這一項是很有必要的,尤其是 s3c64xx 和 smdk6410 這兩項,因為i額這裡是你的開發板的Uboot 入口,在cpu/s3c64xx 和 ./board/samsung/smdk6410 下都是一些很重要的文件。
第四:創建這些依賴性文件。在根目錄下執行命令
$cd board
$mkdir samsung/smdk6410
到這裡就要拷貝一下板子的.c 依賴文件,網上很多資料是ARM9的 所以資料有點不一樣,我拷貝的是三星
smdk6410.c 到我的板載目錄./board/samsung/smdk610 下,並且名稱也為smdk6410.c 這裡不用擔心自己
板子是OK6410,而文件名有差別,因為這裡是可以通用,並能拿來移植的。
第五:在include/configs/ 中建立配置文件
和上一步的解決辦法類似,直接cp smdk6410.h 就行,如果你的configs裡面已經有了這一選項,就不用了。
第六:測試編譯能否成功
$ make smdk6410_config 如果出現: Configuring for smdk6410 board... 就證明編譯正確
第七: 修改 ./cpu/samsung/smdk6410/start.S
這個函數是smdk6410系列的共有啟動的匯編代碼,UBOOT 執行的第一個程序, 這裡我把飛凌這裡的start.S 直接copy下來了,可以剩了去修改,但還是需要去學習一下這裡的原理。