移植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区别