`
meikanbao
  • 浏览: 14981 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多

  一、移植环境               CPU:S3C2440;    SDRAM:HY57V561620FTP-H;    NOR flash:SST_39VF1601(2M);
  NAND flash:K9F1G08U0B(128M);    网卡芯片:DM9000EP
  二、博客地址       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 命令,重新开机,查看环境变量,已经变成我修改过的值了。
  今天就先总结这么多,估计写多了大家一看脑袋就大了,呵呵。今天还是继续研究一下驱动。^_^
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics