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 注意 ...