移植U BOOT到揚創2440心得

2021-05-01 20:48:01 字數 2283 閱讀 8312

test-u-boot.bin實現從伺服器現在bin到指定記憶體中,再使用go 0x32000000命令執行test-u-boot,

注意go方式除錯u-boot時不能重複初始化cpu、sdram等,將start.s中的cpu_init_crit注釋掉。

在實際除錯過程中可是在第一階段採用點燈法測試,對於開發板gpf接led燈,點完燈則

loopwhile: bl loopwhile 死迴圈等待確保當前執行位置。

第一階段流程:_start為程式入口,然後跳轉到start_code進行cpu模式設定為svc32,接著

關閉看門狗

ldr r0, =pwtcon 

mov r1, #0x0

str r1, [r0]

和關閉所有的中斷

mov r1, #0xffffffff

ldr r0, =intmsk

str r1, [r0]

接著進行cpu時鐘設定,2440標準為405mhz。配置完後,可以進行重定位操作了,從flash到ram中執行

,接著就是設定堆疊和進入start_armboot開始第二階段c。

在第二階段時使用c實現,依次執行初始化函式表中的每個函式(init_sequence,board.c

中),除錯時可以使用while1和printf方式檢視初始化順序。在第二階段中enable_interrupts開啟中

斷,第一階段是關閉的。跟蹤到for (;;) 前面點亮燈提示,進入main_loop(函式在

main.c)主迴圈尋找倒計時迴圈,以便在該迴圈中加入按鍵檢測。

繼續使用while和printf法一步步接下去跟蹤,發現static __inline__ int abortboot(int

bootdelay)函式是決定進入u-boot還是kernel。檢視**看到其中有個while ((bootdelay > 0) &&

(!abort))迴圈等待,abort標誌位來表示啟動選擇。在裡面加入按鍵掃瞄key =0x0f & *(volatile

unsigned int *)(gpio_ctl_base+ogpio_f+ogpio_dat)獲得gpf口的資料,第四位為按鍵k1到k4,判斷

到k1按下則使用while1停止並點燈提示。

u-boot測試完畢後將其燒寫入flash,注意將cpu_init_crit注釋去掉。第一階段點乙個燈,

第二階段主迴圈前點全部燈,這樣不用看串列埠資訊也能知道當前啟動位置,按鍵k1則點亮一半燈表示

識別k1並迴圈等待。

接著用自己編譯好的u-boot引導kernel,kernel直接使用揚創自帶的。採用tftp加bootm方式

除錯,但是移植卡死在booting linux kernel. 可能性為1.console設定沒有傳遞到核心。

這種情況是

1.kernel已經啟動資訊看不到,終端為ttysac0,排除。

2.u-boot的時鐘設定不在405mhz,與kernel的不一致。彙編**中已經設定為405,排除這種可能。

3.machine id設定的與kernel不一致。當前預設為

782,通過u-boot的bdinfo命令看到arch_number  = 0x30e,核心預設為5244,修改核心或者修改u-

boot,方便起見只修改u-boot中的include/asm-arm/mach-type.h檔案,其中有這麼乙個語句,

#define mach_type_mini2440 782將arch_mini2440 改為5244即可。

測試tftp 32000000 uimage;bootm 32000000。接著測試go方式啟動kernel,在linux下編譯kernel,make後在arh/arm/boot下生成zimage壓縮映像,tftp 32000000 zimage;go 32000000卡死在booting linux kernel. go啟動核心的話,u-boot不會傳machine id給核心,因為go只是執行普通的應用程式,不考慮到傳遞引數給核心的問題。修改command/cmd_boot.c 中的go命令實現函式,rc = ((unsigned long(*)(int, char *))addr) (0, (unsigned long)5244);手動指定arch number為5244。go命令引導kernel成功。

重新燒寫u-boot,引導kernel啟動成功。

在移植過程中一些很好的資料:

2440移植2023年最新uboot

開發板 jz2440 uboot版本 u boot 2019.01.tar.bz2 一。先看readme 說明和之前用法一樣,也是make defconfig 3,三個函式 然後開始介紹三個函式 3.1,lowlevel init 函式 注意 寫不了全域性變數 只能寫堆疊還有用彙編中的全域性資料。b...

2440 移植u boot 是串列埠亂碼問題

1.按照韋東山的書移植u boot 到jz2440 2.移植到get hclk get pclk 按照書上所說燒到nor 串列埠就能列印了 3.但是使用的時候一直亂碼 網上查了查也沒解決 4.嘗試重新移植.比較 就是不行,5.又copy補丁檔案的配置還是亂碼,6.考慮是串列埠壞掉?燒寫光碟提供u b...

記錄18 s3c2440移植uboot

1.解壓u boot 1.1.6 進入u boot 目錄,修改 makefile 在 smdk2410 config unconfig mkconfig config arm arm920t smdk2410 null s3c24x0 加上tx2440 config unconfig mkconfi...