兴趣是坚持一件事永不衰竭的动力
分类: 嵌入式
2013-07-27 18:44:39
原本只想学习一个linux开发的,当真正入手开发板后,发现linux内核需要引导程序,而开发板提供的bootloader源码却不公开,或者不通用,造成下载内核映象zImage后,没有任何输出,这时候弄得无所适从了,到底是内核问题,还是bootloader问题呢?开发板厂商的bootload没有源码,就是一个黑匣子,去怀疑它什么好呢,思来想去,还是决定,把uboot研究一下。这倒好,编译uboot后,写了Norflash后串口没有任何输出,这下麻烦大了,还要单步调试?是的,单步调试又涉及到更多的问题了,关于调试环境的安装,又是个麻烦问题,因为是学,百度了一大把,没一个写详的啊,因此,折腾了近一个月,才将uboot调试到有串口输出。好了,废话就到这里了,下面记录过程和上传源码。
1. 代码的移植,参考了网友的帖子,他的最简单,最清晰,在此谢过了
网址:http://blog.chinaunix.net/uid-24919665-id-435489.html
2. 在内存中调试
(1)为了能在内存中调试,将board/mini2440/u-boot.lds中第30行
. = 0x00000000;
改为
. = 0x33000000;
说明:(1)mini2440文件夹是在第一步中创建的
(2) 改为. = 0x33000000;的原是,便于直接下载u-boot.bin到内存中运行,以便调试,事实上,不改的话,使用arm-linux-gdb u-boot单步调试,虽然也是下载到内存中运行,但单步调试总是出问题,总是跑飞,这也是这种给点希望却又不给结果导致我u-boot调了一个月才调到有串口输出的原因
(2)现在编译,得到u-boot.bin
(3)打开J-link
Commander (我是在win7下打开的)
(4)输入3条命令
>Loadbin G:\u-boot.bin 0x33000000
>setpc 0x33000000
>g
第一条命令是将uboot下载到0x33000000开始的内存地址,需要等1分钟左右
第二条命令是将pc指针 设为0x33000000 ,也就是uboot的第一指令地址
第三条命令是开始从PC指针处全速执行
好了,没有意外的话,应该会看到SecureCRT上字符输出了,如果有,恭喜你了,小功告成,入门了。注意这里只是调通了串口输出,可以看到,DRAM:256是不对的,需要继续修改。