1. 程式人生 > >第九章:基於九鼎X210開發板移植2014.10版U-boot之啟動核心

第九章:基於九鼎X210開發板移植2014.10版U-boot之啟動核心

接下來要啟動核心了。首先要先將機器碼設定成我們開發板的機器碼,將/board/Samsung/x210目錄下的x210.c中的board_init函式中的bi_arch_number傳入MACH_TYPE_SMDKV210,傳入正確的機器碼才能啟動核心。


但事實上,無論怎麼樣都啟動不了核心,我用tftp下載了之前編譯好的核心,核心格式是zImage的,使用bootm來啟動,發現啟動不了,會提示:

1.3.6老版本的uboot中bootm是支援啟動zImage的核心,所以這時候,就得開始編譯uImage的核心。

編譯方法,

1、首先將uboot原始碼目錄下的/tools資料夾中的mkimage複製到/usr/local/bin/

目錄下,

2、直接在核心原始碼資料夾的根目錄下,直接make uImage,就會在kernel目錄下的/arch/arm/boot下生成uImage

用bootm啟動我們做好的uImage,打印出以下log就沒反應了。 


如果出現無法啟動核心的情況,一般就以下幾種原因:

1、機器碼不對。
2、Bootarges沒傳到核心進去。

用了各種方法來解決這個問題,最終都沒成功,最後找到前人寫的一篇帖子才解決問題。

主要原因是uboot啟動了核心,但是核心卡死在了kernel裡面的putc函式裡面,而卡死的原因是,新版的uboot用的是串列埠的fifo模式,而核心用的串列埠是非fifo模式的,所以就出現問題了。要麼修改核心,要麼修改uboot的串列埠,我這裡對uboot的串列埠進行修改,但是uboot中串列埠列印的東西就會有問題。

偷個懶,我並不想對核心進行修改,想到一個折中的方法,就是啟動核心的時候,再講uboot設定成非fifo模式,這樣在沒啟動核心的時候,還能正常使用uboot。

方法

設定bootcmd=mw.l e2900804 0x3c5;mw.l e2900808 0x0;tftp 0x30007fc0 uImage;bootm 0x30007fc0
使用mw對串列埠2相關的暫存器進行修改,然後再載入核心。這樣再次啟動核心,發現就能正常打印出核心的log了。

至此,2014.10版的uboot算是能夠正常使用了,當然,這裡面還有非常多的細節值得去深究。也有很多地方還沒完善,但如果只是要用來啟動核心,已經足夠了。