移植uboot-2015-10(一)

奔跑的路發表於2015-09-30


移植uboot-2015.10.rc1(一)


開發板:    friendly arm 2440

工具:      Win7 + VMware + ubuntu

U-boot版本: u-boot-2015.10.rc1

GCC版本:    gcc version 4.3.3


隨著uboot版本的不斷更新,現在的版本和以前的相比有不少的變化,在程式碼結構上更像Linux的風格,現在檔案解壓以後目錄結構是下面這樣的:

我們所熟悉的在u-boot-2014中的boards.cfg和mkconfig沒有了,而同時又在u-boot-2015.10的頂層目錄下多出了一個configs目錄,還有一個Kconfig檔案(這不是Linux核心所特有的嗎?),可以看到u-boot一直在學習Linux核心的配置和編譯方法。

configs目錄下有很多檔案,每一個檔案都對應著不同型號的晶片,從數量上來看,如今uboot所支援的晶片還是相當豐富的:


當選定我們需要的配置檔案以後,就可以參考編譯Linux核心的方法make xxx_defconfig 來生成我們需要的.config檔案,這個命令會使用工具從頂層的Kconfig開始往下讀取對應的Kconfig配置選項,生成.config檔案。當然,生產.config檔案以後,我們也可以使用make menuconfig來根據需要對配置檔案進行修改。

下面演示一下smdk2410的編譯過程:

1. make smdk2410_defconfig

2. make

這時編譯會出錯,出錯並不可怕,一個一個解決就是了,先來看一下出錯提示:

從中可以看出,在編譯asm-offsets.s時出錯了,因為-march的值不對,現在需要編譯的是arm架構上的程式碼,實際上用的是本機預設的GCC,所以應該是沒有指定架構和交叉編譯器,我們只需要在頂層目錄Makefile中指定一下就好了:

然後我們再make一下,就能順利編譯通過了(如果交叉編譯器沒有問題的話)!

上面的過程是在uboot已經支援某個架構的情況下編譯的,修改的不多,但實際上未必是這樣的,如果uboot不支援自己需要的架構,那要怎麼修改uboot,讓它能夠在板子上執行呢?下面就以s3c2440為例進行移植.


1. 清理一下前面的編譯

 make distclean

2. 拷貝

(1) cp configs/smdk2410_defconfig configs/arm2440_defconfig

這裡拷貝一份smdk2410的配置檔案,並將CONFIG_TARGET_SMDK2410=y 修改為 CONFIG_TARGET_ARM2440=y, 這個值會指明編譯的是哪個開發板


 (2).  cp -arf board/samsung/smdk2410/   board/friendly/arm2440

我們知道,board目錄下放的是已經支援的開發板相關的檔案,其中包含SDRAM初始化程式碼(lowerlevel_init.S),板級初始化檔案(smdk2410.c)等,由於這個版本的uboot不支援我們的arm2440,所以需要自己建立一個,然而arm2440和smdk2410很相似,差異只是下面一些,所以只要以smdk2410作為副本來修改就好了,然後調整一下差異的程式碼。

這一步拷貝了一份smdk2410資料夾,friendly是vendor的名稱,arm2440是板子的名稱,這兩個值指明瞭開發板相關的檔案路徑,所以要修改board/friendly/Kconfig,使make arm2440_defconfig 時能夠獲取正確的路徑,修改如下:

line1:configs/arm2440_defconfig中定義的目標

line6:發行商的名稱

line3:板子的名稱

line9:晶片的名稱

line12:配置檔名稱

這幾個值務必要正確,不然會直接影響到編譯時能不能找到正確的目標檔案路徑,同時也可以檢視.config檔案是否有這些值。


(3) mv board/friendly/smdk2410.c  borad/friendly/arm2440.c

這裡不用修改值,後面再修改

(4) cp include/configs/smdk2410.h include/configs/arm2440.h

 這裡值先不用修改,後面再修改

 (5) 修改arch/arm/Kconfig, 新增smdk2440的配置項



  修改arch/arm/Kconfig, 載入board/arm2440/Kconfig



(6) make


以上修改的是arch、board、configs、include/configs 下面的檔案,多與平臺相關


到這裡,就能夠編譯出以arm2440為樣本的image了,但是程式碼裡面的內容都還是屬於smdk2410的,接下來需要修改一些引數,讓image能夠在arm2440板子上正常的執行,請檢視下一篇文章。

 

 

 





相關文章