分类: 嵌入式
2011-05-01 00:44:59
系统环境:
Ubuntu 10.04
arm-linux-cs2010q1-202
ARM平台: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
./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的了。