1.在重定位代码前加调试信息定位
1)逻辑上来说,重定位部分代码应该在DDR初始化之后和uboot第二阶段来临前之间。
2)uboot的第一阶段和第二阶段的划分并不是绝对的,唯一必须遵循的原则就是第一阶段不能大于8KB。所以uboot的第一阶段最少要完成DDR初始化和重定位,最多不能超过8KB。在满足这些条件时,第一阶段和第二阶段的接点可以随便挑。
3)找到合适的地方来写重定位代码,重定位之后远跳转到第二阶段的入口。
2.movi_bl2_:copy函数移植
1)从三星版本的uboot中赋值movi.c和movi.h到uboot2013.10中。
2)改makefile和u-boot.lds。
3.代码同步及编译
主要是crt0.S和movi.h。
4.编译中出现问题解决
1)movi.h中宏定义出错,最后在s5p_goni.h中添加了 CONFIG_EVT1这个宏解决了
2)连接错误:u-boot contains relocations other than R_ARM_RELATIVE
在uboot下用grep "R_ARM_RELATIVE" -nR *搜索,发现Makefile中有一个检查重定位的规则,屏蔽掉这个规则后编译连接成功。
5.结果验证及下阶段展望
1)看到了uboot启动打印出来的一系列信息,但是uboot没有进入命令行。
2)这说明uboot中的DDR初始化和重定位功能都已经完美实现,后面就是第二阶段的继续移植了。