Chinaunix首页 | 论坛 | 博客
  • 博客访问: 93212
  • 博文数量: 21
  • 博客积分: 548
  • 博客等级: 中士
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-01 12:11
文章分类

全部博文(21)

文章存档

2012年(12)

2011年(9)

我的朋友

分类: 嵌入式

2011-05-01 00:44:59

系统环境:

Ubuntu 10.04

arm-linux-cs2010q1-202

ARM平台:
S3C2440
移植TinyX的时候,编译出来的Xfbdev,在开发板上运行时提示Illegal instruction,后来发现xcalc和xeyes这两个小程序也是这样提示,但是在scratchbox里面运行正常呀,后来编了个helloworld的小程序也是这样的结果。后来搜索了一下,说是要开启VFP的功能,也就是EABI的使能,但是我的已经明明开启了,用静态编译也是运行失败,很多人都说换了编译器就好了……仔细想一想,我多拷贝了一份

1.保证使用的编译器是同一个编译器,在编译器相同的情况下保证-march=armv4t一样(scratchbox里面没有加-march=armv4t $*参数),另外scratchbox里面执行make menuconfig有问题,只能在主机系统执行make menuconfig,下面是步骤:

1)因为2440使用的是armv4t,所以将gcc、g++、gcc-4.4.1、cpp加上-march=armv4t $*参数,cd /scratchbox/compilers/arm-linux-cs2010q1-202/bin,

在以上4个以arm-none-linux-gnueabi-xxx开始程序前添加old_,即old_arm-none-linux-gnueabi-xxx,建立四个文件与gcc、g++、gcc-4.4.1、cpp同名的文件,文件里面的内容为

#!/bin/sh

old_arm-none-linux-gnueabi-xxx -march=armv4t $*

增加那四个新建文件的可执行权限,sudo chmod +x arm-none-linux-gnueabi-xxx,

2)sb-menu建立target的时候一定不要选中前两个C-library(一个是libc,另一个是run-time),(以上两个库的ld-linux.so跟编译器的ld-linux.so明显不一样,一个是ld-linux.so.2,一个是ld-linux.so.3,还有别的不一样),如果之前已经建立了target,那就在sb-menu里面Reset a target,(注意:这样会导致以前所编译的库跟应用程序清空,我的xorg搞了很久,要重来了,郁闷),之后拷贝编译器的库到target的/lib文件夹,

cd /scratchbox/compilers/arm-linux-cs2010q1-202/arm-none-linux-gnueabi/libc/armv4t/lib

cp * -d /scratchbox/users/thinker/targets/ARM/lib/

我的target名为ARM

3)为了让主机使用同一个编译器(我使用的名字为arm-linux-),在/scratchbox/compilers/arm-linux-cs2010q1-202/bin建立所有arm-linux-xxx链接到 arm-none-linux-gnueabi-xxx,设置环境变量,sudo vim /etc/environment ,在原有的内容的”前增加:/scratchbox/compilers/arm-linux-cs2010q1-202/bin,我的 environment内容如下:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/scratchbox/compilers/arm-linux-cs2010q1-202/bin:/home/thinker/work/gcc-3.4.5-glibc-2.3.6/bin"

执行source /etc/environment让当前命令行环境暂时生效(注销或重启以后就能用了),执行arm-linux-gcc -v看一下可以显示很多内容

2.编译内核的时候使能EABI


小弟处女作,不正之处请各位指出。


2011年5月1日晚补充:

按照步骤弄出的结果在大部分时候编译都没有问题,在编译python(不管版本是2.6.6,还是2.7.1)出错:

Py_BUILD_CORE -DSVNVERSION="\"`LC_ALL=C echo Unversioned directory`\"" -o Modules/getbuildinfo.o ./Modules/getbuildinfo.c

old_arm-none-linux-gnueabi-gcc: directory": No such file or directory

:0: warning: missing terminating " character

./Modules/getbuildinfo.c: In function '_Py_svnversion':

./Modules/getbuildinfo.c:48: error: missing terminating " character

./Modules/getbuildinfo.c:48: error: expected expression before ';' token

make: *** [Modules/getbuildinfo.o] Error 1


解决办法:

1.换用低版本的python,如python2.5的就成功了;

2.删除那几个arm-none-linux-gnueabi-打头的gcc、cpp、g++、gcc-4.4.1,并将old_

arm-none-linux-gnueabi-xxx去掉old_,这样在模拟器里面编译python便不出错了。不过这样编译出来的就不是armv4t的了。



难保以后gtk的时候会不会出现类似的问题,而且我不打算选用python2.5的,下一步我决定自己编译一个armv4t的工具链。
阅读(5362) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:用crosstool-ng建立Linux交叉编译环境(armv4t)

给主人留下些什么吧!~~