您的位置:首页 > 其它

u-boot在S3C2440上的移植问题及解决方法集锦(二)

2011-03-30 11:02 337 查看
一、移植环境

主 机:VMWare6.5--Fedora 9

开发板:自制开发板

CPU:S3C2440; SDRAM:HY57V561620FTP-H; NOR flash:SST_39VF1601(2M);

NAND flash:K9F1G08U0B(128M); 网卡芯片:DM9000EP

编译器:arm-linux-gcc-4.3.2

u-boot:u-boot-2009.08

linux kernel:linux-2.6.30

busybox:busybox-1.13.3

二、博客地址
http://blog.csdn.net/liuqiqi677
如有错误,欢迎指正。

三、参考资料

主要参考了黄刚的博客http://blogold.chinaunix.net/u3/101649/
,他的博客写得相当不错,将嵌入式开发各个阶段的知识以边做边学的方式,辅以图片、解释,清晰地呈现给读者,能够让读者把握主线,对嵌入式开发有整体的了解。强烈推荐!!!

四、问题及解决方法

4、u-boot-2009.03中没有dm9000_initialize函数



开始,我使用的u-boot是u-boot-2009.03,黄刚用的是u-boot-2009.08,一路照着他的博客做下来,到添加对dm9000网卡支持的时候,就出问题了。对u-boot进行编译的时候,报了这个错误:undefined reference to `dm9000_initialize',意思是dm9000_initialize这个函数没有定义,我又检查了一下步骤,完全是照着做下来的,那唯一的差别就只是u-boot的版本不同了。于是,我下载了u-boot-2009.08,在 drivers/net/dm9000x.c 中发现了 dm9000_initialize
函数的定义,但是在u-boot-2009.03的相应文件中却没有发现 dm9000_initialize
函数,这下原因就很清楚了。

那么,在u-boot-2009.03中药怎么添加对dm9000网卡的支持呢?这个很简单,按照黄刚的博客,

不在 board/samsung/my2440/my2440.
c 中添加 board_eth_init(bd_t *bis)
函数就可以了。

5、u-boot-2009.08超级终端输出信息不完整



在启动u-boot-2009.08的时候,我无意间发现它的输出信息少了几行,对比图4和图5:



图4 输出信息不完整的u-boot-2009.08



图5 修复bug后的u-boot-2009.08

通过分析,将问题定位在 common/console.c
文件中的 stdio_print_current_devices
函数中,我们看一下这个函数的定义:



图6 stdio_print_current_devices函数源码

到这里,原因就很明显了,我们读一下上面的条件编译语句,它的意思是,如果定义了 CONFIG_SYS_CONSOLE_INFO_QUIET 就打印下面的信息,但是这个宏的字面意思是系统终端信息不打印,这就出现矛盾了!解决方法很简单,将#ifdef
改为#ifndef
即可。重新编译u-boot,下载到开发板,运行,如图5所示,终端信息正常打印出来了!

6、网络地址设置不成功



我在 include/configs/my2440.h 中设置了开发板的MAC地址、IP地址和linux主机的IP地址,然后每次把编译好的u-boot下载到开发板,输入printenv
命令
,想查看是否设置成功,但是打印的信息却和之前默认的值一样,根本没有修改到!但是,我确实是改了的啊。为什么会出现这个问题呢?在没有办法的时候,我突然灵光一闪,呀,我意识到我犯了一个低级错误!u-boot和系统环境变量是分开存放的,之前我用saveenv命令已经将环境变量保存到了NAND flash中,并且一直都没有再动过这个区域了。我重新烧写了u-boot,但是系统的环境变量却还是之前的值啊。我将Nand Flash全部擦除,重新下载u-boot,并在终端输入 saveenv
命令,重新开机,查看环境变量,已经变成我修改过的值了。

今天就先总结这么多,估计写多了大家一看脑袋就大了,呵呵。今天还是继续研究一下驱动。^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐