Posted on 2007-12-04 01:03
buf 阅读(2833)
评论(3) 编辑 收藏 引用 所属分类:
Embedded
真是不容易,没想到问题出在我的交叉编译环境上。最初我在cygwin下用arm-elf-tools编译u-boot-1.1.1,一切都很顺利。因为厂家已经提供了u-boot-1.1.1的源码,所以我尝试着升级到u-boot-1.1.4,然而在cygwin下编译时遇到很多问题。
于是,我装了Ubuntu7.04,交叉编译环境使用arm-linux-gcc(因为注意到针对ARM体系结构,uboot的Makefile中默认选择这个)。编译没有遇到太大困难,可是,烧写到Flash以后总是不能工作。上电后串口有输出,最后输出一个"Warning, bad crc……"然后就死机了。添加一些调试信息后我发现问题出在/u-boot/lib_arm/board.c文件中,在devices_init()函数中一个内存申请失败。这个问题困扰了我有两天的时间,后来我用蹩脚的英文表达搜索到有人也遇到同样的问题:
http://www.nabble.com/Arm-linux-gcc-malloc-get-failure-while-arm-elf-gcc-ok-p8662780.html,但是没有后续解答。为了看看是不是他说的这么回事,我试着用arm-elf-gcc编译了一下,果真如此!
我看了一下U-Boot的官方文档
DULG-tqm8xxl.pdf,发现使用的交叉编译环境为ELDK,而这个ELDK中有个叫crosstool的东西。这个和前面的arm-linux-gcc、arm-elf-gcc是什么联系,有什么区别,我现在还搞不清楚。有一篇
arm-elf与arm-linux的区别的文章让我对这一问题多了一些了解。唯一明确的是现在用arm-elf-gcc编译uboot是没有问题的,这也算是个小小的收获吧,和大家分享一下。如果有遇到我说的melloc的问题,可以参考一下。
arm-elf-tools可以从
http://opensrc.sec.samsung.com/download.html获得,我这里用的是
arm-elf-tools-20040427.sh,GCC 2.95.3 based。