mini2440 编译U-Boot-1.1.6遇到的一些问题

发布时间:2024-06-24  

Linux环境: Ubuntu 11.10

交叉编译工具:arm-linux-gcc4.3.2

目标板:mini2440 Flash 256M

u-boot源代码:由友善之臂提供,基于1.1.6版本修改后的FriendlyARM修改过的U-Boot.1.1.6

下载在Linux公社的1号FTP服务器里,下载地址:

FTP地址:ftp://www.linuxidc.com

用户名:www.linuxidc.com

密码:www.muu.cc

在 2011年LinuxIDC.com12月Android_sdk_linux_x86.tar.gz 下载

下载方法见 http://www.linuxidc.net/thread-1187-1-1.html

下面马上进入我们的编译之旅!

1、解压缩源码包

  1. tar zxvf u-boot-1.1.6-FA24x0.tar.gz  

2、make clean


这时候将会出现第一个问题:

  1. /bin/sh: lex: command not found  

解决方法可以参见:Linux命令make报错总结 见 http://www.linuxidc.com/Linux/2011-12/50152.htm


3、make open24x0_config

配置板子资源

  1. Configuring for open24x0 board...  


4、删除Makefile.l文件,否则make的时候会出现一些错误

5、make

编译出现错误:

  1. undefined reference to ‘raise’  

解决方法参见:undefined reference to ‘raise’ 见 http://www.linuxidc.com/Linux/2011-12/50151.htm


之后编译还是会出现问题。通过找查找论坛资料,一位网友提出make distclean可以解决问题!

make distclean

make open24x0_config

make

6、编译成功

7、在display_banner()函数里面加入自己的一些调试显示信息

printf("###Hello u-boot!My name is care###n");

8、再次编译u-boot

9、将u-boot.bin烧写到板子的0x33000000地址上

10、复位一下板子,通过超级终端可以看到调试信息

###hello u-boot!My name is care###

大功告成。

最近公司忙着赶项目,我负责的是之前没有接触过的u-boot 。浪费了3天时间,都是在做无用功。主要的原因是切入点不对,3天的时间主要都用来跟着网上的高手移植u-boot。对于源码的阅读反而不是很多。看到了一篇文章(http://www.linuxidc.com/Linux/2011-12/50150p2.htm),描述了作者初学u-boot的心得。很有体会,在此附上连接。希望对和我一样的bootloader初学者能有帮助。


新手移植u-boot的一些建议

经过将近两个星期的时间,总算移植好了一个勉强能支持基本功能的u-boot了,泪流满面。在刚刚开始移植uboot时走了很多弯路,不过坚持下来,也算是苦中有乐!

一开始我是照着友善的移植Uboot手册上改代码,虽然也看了前半部分的uboot执行流程,但是到了改代码的时候还是很多东西不懂,就照着做,出现各种编译错误,慢慢改,一路下来,最后满怀期待的上电,超级终端里却无我所期待的字样。因为对很多代码不懂,也不知道到底是哪里出了错,甚是迷茫。

经过几次的尝试,还是没有得到最后想要的结果,几乎就要放弃。冷静下来,好好想了想,觉得自己的方法就不对,于是从头再把uboot的执行流程重新仔细学了一遍,大家在学start.S这个文件时基本不会有什么问题,建议大家可以在这个文件下先不用实现nand flash相关部分代码,只要能实现将代码从nor flash搬运即可(其实从nor flash搬运到sdram相关代码Uboot源码已经实现,就是relocate标号),关键的是跳转到lib_arm/board.c这个文件里的函数后就不知道是什么情况了,其实它就是执行一系列的初始化,每个函数基本初始化一个相应的部分,而且这些函数能不能执行都是由我们在include/configs/mini2440.h这个头文件中定义的所有宏来决定的,因此我根据自己的经历建议大家在确保start.S这个文件正确执行的前提下先使得我们自己的uboot执行board_init这个函数,这个函数里的一些修改比较简单,能运行后再使我们的serial_init函数能运行正确,其余board.c下面的很多初始化的函数的不用管,都给注释掉。因为这样,我们的Uboot如果能运行正确的话,我们是可以在串口看到一些相应的基本信息,这样就有助于我们的观察了,就算以后加入什么功能,哪里出了问题,我们也可以用printf输出到串口进行观察。

接下来就是一步步完善uboot功能的时刻了,大家可以根据自己实际的需求去增加一些功能,其实主要就是一些初始化(主要在比如实现从nand flash里面启动,这个你可以照着友善的手册(而且使用他们的nand_read.c这个文件);又比如你要实现网络,在mini2440.h里面增加dm9000相关的宏,然后在board.c里面将cs8900相关初始化的代码更换成dm9000的代码,uboot支持dm9000驱动,所以比较简单,当然,完善Uboot的功能可以照着友善移植uboot手册,关键是要理解相关宏的作用。

如果这样坚持下来,相信你对Uboot的执行流程会有一个真正比较深刻的理解,还是这个道理,从简单过渡到复杂,最后移植完成后最好回头把相关的部分重新温习一下,这样相信以后就算我们在工作中遇到新的板子,我们应该也会知道从哪里开始,怎么去深入。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>