- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
UBOO for blackfin 移植记录
UBOOT源代码
UBOOT的源代码为: u-boot-bf548-ezkit-2009R1.1-rc1.tar.tar
硬件列表:
主要移植方法:
u-boot-bf548-ezkit-2009R1.1-rc1 为UBOOT源码文件夹.
首先在/board中建立bf548-test目录和文件.
在/board目录中以bf548-ezkit为蓝本建立bf548-test目录..
cp /bf548-ezkit bf548-zsl –r
修改bf548-test下的bf548-ezkit.c文件名为 bf548-test.c
mv bf548-ezkit.c bf548-zsl.c
然后修改顶层目录下的Makefile文件..
vim u-boot-bf548-ezkit-2009R1.1-rc1/Makefile
查找字符 “bf548-ezkit”
大约在3051行
对参照修改即可..
最后在
u-boot-bf548-ezkit-2009R1.1-rc1/include/configs/
中以bf548-ezkit.h为蓝本建立我们自己开发板的配置文件.
cp bf548-ezkit.h bf548-zsl.h
在顶层目录下
测试添加是否成功:
make bf548-zsl_config
make
如果编译通过,那么我们自己的开发板就添加成功了!
接着就是针对我们的板子对uboot进行修改了..
参考ADI-EZ-KIT的板卡.发现本板卡与之相比最大的区别就是 NOR FLASH 的不同..
所以将重点放在配置文件中关于NOR FLASH 的配置..
由于所选用的MT46V32M16F 支持CFI接口..而且在现有的UBOOT代码中.对此FLASH直接支持..因此只需要在配置文件对此修改:
vim u-boot-bf548-ezkit-2009R1.1-rc1/include/configs/bf548-zsl.c
参考手册只需修改扇区数为 135即可..
回到顶层目录.
make distclean
make bf548-zsl_config
make
将生成的u-boot.ldr
烧写到开发板的flash.
问题与调试
烧写到开发板上以后,发现串口无打印信息..
移植存在问题..
首先确定硬件问题.
烧写到flash中的数据,和从flash中读取的数据应该是一致..
但是按照上面的步骤编译出来的UBOOT烧写到flash后.
随着uboot的启动..flash中的数据也发生改变..
因此暂时确定为硬件或者烧写flash的驱动有问题..
验证:
将LED-TST程序烧写的flash中..
然后从flash中启动…程序正常执行…
多次测试.. flash中的数据也未发生改变..
烧写更大的ldr文件.. 也未出现flash中数据被更改的情况..
硬件和烧写驱动问题暂时排除..
确定为 UBOOT问题.
验证:
确定UBOOT是否完整的运行完初始化程序.
vim u-boot-bf548-ezkit-2009R1.1-rc1/include/cpu/blackfin/initcode.c
在函数的末尾处添加测试语句:
*(char * const)(0xff9001000) = 0x1;
*(char * const)(0xff9001002) = 0x2;
或者
char *ptr;
ptr = (int *)0xff9001000;
*ptr = 0x1;
向对应的内存地址写入数据..
当uboot从flash启动后.我们查看相应位置的数据是否被设置.来判断程序的运行位置.
通过测试..发现初始化代码运行完毕..对应地址的数据也发生了改变…
并且发现 PORTH_FER = 3f00 串口收发没有别打开..
由此可以确认在initcode.c代码运行结束后,flash内的数据就被改变.导致后续从flash中读取的数据错误..
找到到三个关键代码文件 start.S initcode.c bf548-zsl.c
在initcode.c代码中的主函数的开始处添加 while(1);使程序暂停在此处..
将编译生成的 uboot.ldr文件烧写到 flash.
开发板复位..把0处的数据和 u-boot.ldr的数据对比. 数据正确..
由此可以确定 问题出在 initcode.c代码内..
对initcode.c内的代码段添加while(1); 来确认导致flash数据被改变的代码位置..
最终测试发现:
代码段的执行导致了flash内的数据发生变化..
注释掉整个if语句 或者注释掉
bfin_write_PLL_CTL(CONFIG_PLL_CTL_VAL);
重新编译烧写..
开发板复位后
文档评论(0)