移植u-boot-2012.04.01到jz2440开发板之修改代码支持NAND启动
上一篇文章我們已經修改了uboot源碼使其能夠正常打印輸出了,但是輸出停到了nand啟動那里,所以這篇文章就來記錄如何修改源碼使uboot支持NAND啟動。
原來的代碼在鏈接時加了”-pie”選項, 使得u-boot.bin里多了”(.rel)”, “*(.dynsym)”使得程序非常大,不利于從NAND啟動(重定位之前的啟動代碼應該少于4K)。
1.去掉 “-pie”選項
在文件:arch/arm/config.mk的第75行,去掉:LDFLAGS_u-boot += -pie
2.在這之前會編寫好一個init.c程序,拿到這里來用,init.c程序的編寫會放到另一篇博客中,這里直接提供代碼,代碼鏈接為:init.c程序
將之前寫好的文件init.c放到board/samsung/smdk2440目錄, 并且修改Makefile,將init.c編譯進去如下圖:
3.修改start.S文件
start.S中有代碼:
將這一部分代碼改為:
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)bic sp, sp, #7 /* 8-byte alignment for ABI compliance *//* lyy */bl nand_init_llmov r0, #0ldr r1, _TEXT_BASEldr r2, _bss_end_ofsbl copy_code_to_sdrambl clear_bssldr pc,=call_board_init_f/* Set stackpointer in internal RAM to call board_init_f */ call_board_init_f:ldr r0,=0x00000000bl board_init_f/* unsigned int的值存在r0里,正好給board_init_r */ldr r1, _TEXT_BASE/* 調用第二階段的代碼*/bl board_init_r4.刪除重定位代碼:
這下面的一大段代碼是重定位代碼,我們在這里不需要它,需要將其全部刪除
4.修改CONFIG_SYS_TEXT_BASE為0x33f00000
在代碼中跳轉到 :_TEXT_BASE
跳轉到lowlevel_init.S中的這里:
_TEXT_BASE:.word CONFIG_SYS_TEXT_BASE然后點擊:CONFIG_SYS_TEXT_BASE
跳轉到smdk2440.h中的這里:
將CONFIG_SYS_TEXT_BASE的值改為:0x33f00000
5.修改board_init_f(arch/arm/lib/board.c中), 把relocate_code去掉
同時去掉下面兩句代碼:
/** reserve memory for U-Boot code, data & bss* round down to next 4 kB limit*///addr -= gd->mon_len;//addr &= ~(4096 - 1);然后在這個函數的最后面加上:
return (unsigned int)id;函數添加了int類型返回值,那么函數定義時的類型就得設置一下如下:
將
void board_init_f(ulong bootflag)
改為:
同時頭文件中也需要定義類型:
在/include/common.h中275行有如下聲明:
將其改為:
/* arch/$(ARCH)/lib/board.c */ unsigned int board_init_f (ulong); void board_init_r (gd_t *, ulong);__attribute__ ((noreturn));這句代碼是指定沒有返回值,所以需要去掉。
6.修改鏈接腳本: 把start.S, init.c, lowlevel.S等文件放在最前面
鏈接腳本為:/arch/arm/cpu/u-boot.lds
打開前面有一段:
將其改為:
.text :{__image_copy_start = .;CPUDIR/start.o (.text)board/samsung/smdk2440/libsmdk2440.o (.text)*(.text)}libsmdk2440.o包含了start.S, init.c, lowlevel.S,所以只需要把它放前面就行。
這些修改完之后,編譯,燒寫,看看效果:
這是我們將開關設置為NAND啟動后的效果,至少現在已經支持了NAND啟動。目前兩種啟動都可以了,接下來就是支持nand flash 和nor flash了,這樣就可以通過NAND啟動和NOR啟動完全啟動uboot了,我將放到另外兩篇文章中講,因為移植過程較為復雜,最后我會給出相關的移植順序以及閱讀文章的順序,以及制作整個補丁,大家只需要打補丁,就可以一次性移植好這個uboot。
喜歡我的可以加加關注,同時也可以加我qq和微信一起學習交流
qq:1126137994
微信:liu1126137994
更多資源分享,共同進步!
總結
以上是生活随笔為你收集整理的移植u-boot-2012.04.01到jz2440开发板之修改代码支持NAND启动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【论文阅读】Illuminating P
- 下一篇: Makefile中 -I -L -l区别