14 4 移植U Boot到開發板

2021-06-16 03:33:04 字數 3964 閱讀 4498

u-boot

雖然支援眾多處理器和開發板,但是嵌入式系統的硬體是千差萬別的,在使用

u-boot

的時候,仍然需要針對自己的開發板做適當的修改。幸好

u-boot

是乙個結構設計合理的軟體,在移植過程中嚴格按照

u-boot

的工程結構移植很容易就能取得成功。本節將介紹如何移植

u-boot

程式到arm

開發板。

從14.2

節對u-boot

**的分析可以看出,

u-boot

移植工作主要分成處理器相關部分和開發板相關部分。由於

u-boot

已經支援目前絕大多數處理器,因此處理器移植的工作相對較少,主要是修改一些配置。對於開發板部分的移植,需要參考硬體線路的外圍器件的手冊。

u-boot

移植大致可以分為下面的步驟:

1.檢查

u-boot

工程是否支援目標平台

主要檢查

u-boot

根目錄下的

readme

檔案是否提到目標平台處理器,

cpu目錄下是否有目標平台的處理器目錄,以及

board

目錄下是否有目標平台類似的工程。如果

u-boot

已經編寫了與目標平台類似的工程檔案,移植工作會大大減輕。

2.分析目標平台類似工程目錄結構

如果u-boot

有與目標平台類似的工程,需要分析一下目標板工程目錄的結構。不同的目標板可能差別很大,分析工程目錄中有哪些檔案可以被新的目標開發板利用。

3.分析目標平台**

目標平台**分析可以按照

14.3.4

節介紹的

u-boot

啟動流程分析,看哪些**是額外的,是否需要去掉額外的**。

4.建立新的開發板平台目錄

在board

目錄下建立新的開發板平台目錄,目錄下的檔案可以從現有類似的開發板平台目錄下複製得到。

5.對照手冊修改平台差異部分**

對照硬體手冊,按照

u-boot

啟動流程修改現有**與新平台有差異的部分。

6.除錯新**

新修改的**很可能啟動不了,需要通過

jtag

偵錯程式跟蹤除錯。找出原因修改後再除錯,直到正確啟動。

以上分析的

6個步驟並非必須嚴格遵守,這裡僅是提供乙個一般的思路,讀者在移植的時候需要結合自己的目標板情況來分析。

移植u-boot

到新的目標平台會有許多問題。為了減少出錯和工作量,在建立乙個新的目標平台的時候可以直接複製現有類似平台的**目錄,然後在現有基礎上修改。如移植到

mini2440

開發板,可以按照下面的步驟操作:

1.建立新目標板工程目錄

在board

目錄下建立乙個

mini2440

目錄,現有的

smdk2410

目錄是類似的平台,可以複製

smdk2410

目錄下的所有檔案到

mini2440

目錄。2

.向配置檔案加入新開發板配置

在u-boot

**根目錄下,修改

makefile

檔案。在

1881

行插入一行,寫入以下配置:

1882 mini2440_config : unconfig

1883@$(mkconfig) $(@:_config=) arm arm920t mini2440 null s3c24x0

新增**的作用是告訴

u-boot

,mini2440

開發板用到了

arm目錄、

arm920t

目錄、mini2440

目錄以及

s3c24x0

目錄下的檔案。在編譯的時候,

u-boot

會從這些目錄中尋找

makefile

並且編譯。

儲存makefile

檔案退出,在

include/configs

目錄下,複製

smdk2410.h

到mini2440.h

,該操作是防止編譯

mini2440

開發板的時候出錯。

3.預編譯新開發板的**

到目前為止可以先編譯一下新開發板的**,目的是為了驗證工程檔案配置是否正確。在

u-boot

目錄下執行:

$ make mini2440_config

configuring for mini2440 board...

$ make 「

make mini2440_config

」會生成

mini2440

開發板配置,然後執行

make

開始編譯。編譯後生成目標檔案

u-boot

4.修改目標板配置

新的目標板配置主要存放在

include/configs/mini2440.h

檔案中,該檔案有幾個巨集需要修改:

config_sys_clk_freq//

目標板處理器晶振的頻率

config_driver_cs8900//

目標板是否有

cs8900

網絡卡cs8900_base// cs8900

網絡卡控制器位址

config_bootdelay//

啟動延遲時間

config_netmask//

網路位址掩碼

config_serverip//

伺服器ip

位址cfg_max_flash_banks// flash

儲存器bank

數量phys_flash_size// flash

儲存器大小

cfg_env_addr//

環境配置資訊存放位址

cfg_flash_erase_tout//

擦除flash

超時時間

cfg_flash_write_tout//

寫flash

超時時間

cfg_env_size//

環境變數大小

使用者需要根據目標板的配置情況修改,在本例中需要修改

flash

儲存器大小,其他使用預設值。

在board/mini2440

目錄下,需要修改

config.mk

檔案中text_base

巨集的值為

0x32000000

,該值是

mini2440

開發板載入

bootloader

的位址。5回到

u-boot

**根目錄,重新執行

make

編譯生成

u-boot

目標檔案,然後通過

flash

燒寫工具燒寫到

mini2440

開發板的

nor flash

儲存器,然後上電啟動。

在移植u-boot

的過程中會遇到很多問題,最主要的是一開始無法啟動

u-boot

。**中很多地方設定有誤都會導致無法啟動,對於

stage1

的**來說,系統的出錯資訊是無法列印到串列埠或者其他裝置的,此時可以使用

jtag

偵錯程式除錯目標開發板。

對於彙編編寫的**,一般都與系統硬體息息相關,在編寫的時候需要非常仔細。最好準備好

arm體系結構手冊和

s3c2440a

晶元手冊,並且認真閱讀程式設計模型相關的章節,對硬體的初始化流程要細心分析。

此外建議盡可能地把目標板外圍硬體裝置的初始化工作放在

stage2

階段,最好能使用

c語言編寫,避免使用彙編除錯周期長的問題,提高開發效率。

移植SQLite到開發板

一 環境介紹 1 主機環境 redhat 2 交叉編譯器 arm linux gcc 4.3.2 3 軟體包 sqlite autoconf 3080701 tar.gz 4 目標板 tq2440 二 移植步驟 2 解壓 tar xzvf sqlite autoconf 3080701 tar.gz...

移植ubuntu core到Arm開發板

最初是想把整個ubuntu移植到mx51開發板,因為專案不需要執行桌面系統,所以只移植了乙個基本的ubuntu core系統 這個映象就是乙個rootfs,可以作為根檔案系統使用。2.把映象燒寫到開發板的乙個分割槽上 3.我的arm開發板是mx51,修改uboot啟動引數如下 set bootarg...

qwt移植到arm開發板

arm版本的qwt和x86一樣,只需要改幾個地方即可。1 首先設定編譯工具鏈環境變數 path usr local arm 4.4.1 bin path 2 qmake 生成arm版本的makefile 在原始碼的qwt 6.1.0目錄下執行 opt qt 4.7.1 bin qmake 3 注意 ...