移植uboot-2015-10(一)
移植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板子上正常的執行,請檢視下一篇文章。
相關文章
- 移植一個抖音貼紙元件到Flutter元件Flutter
- micropython STM32移植筆記(一)Python筆記
- 資料移植到Oracle資料庫(一)Oracle資料庫
- 移植一個cocos2d-x遊戲遊戲
- ncurses庫移植
- uboot移植rtcboot
- 使用migratepv移植系統及映象一例
- GPUImage移植總結GPUUI
- nginx移植記錄Nginx
- kvm移植技術
- 資料移植文件
- LWIP裸機移植
- docker快速建立輕量級的可移植的容器(一)Docker
- 將Abp移植進.NET MAUI專案(一):搭建專案UI
- Linux下關於互斥鎖及同步的移植(一)Linux
- QT移植到Linux總結(一)tslib1.0QTLinux
- 系統移植存放位置
- OpenHarmony Docker移植實踐Docker
- Qt5.2.1移植海思QT
- 移植到 Python 3Python
- STM32F4XX LWIP+freeRTOS移植(一)
- 我把一個大型 C++ 庫移植到了瀏覽器!C++瀏覽器
- 這樣一來以後就更好的移植miui系統UI
- 上海一公司需要將原系統移植到Websphere平臺Web
- Linux下關於互斥鎖及同步的移植(一)薦Linux
- Chrome移植Win10 on ARMChromeWin10
- 5. U-Boot移植boot
- Ubuntu成功移植Xperia Tablet ZUbuntu
- uboot移植i2cboot
- Oracle向PostgresQL移植例項OracleSQL
- Java 的可移植性 (轉)Java
- 2.12.uboot的移植2-從uboot官方標準uboot開始移植boot
- 在上世紀80年代移植一款遊戲有多難遊戲
- Vulkan移植GPUImage的安卓Demo展示GPUUI安卓
- 可移植的python環境Python
- 移植到Windows CE 的經驗Windows
- Polar 投影c#版本移植C#
- alsa 移植到Linux3.0Linux