Crosstool
一直没写要荒废了!去年TX给我介绍个Crosstool来编译gcc的,这个玩意是很好,但是当时怎么也弄不成功,搞的头都大了,今天才知道原来不匹配的东西你想弄还真是难!
为了能编译一个适合ARM的2.6内核,今天在一本书上看到介绍crosstool的用法!当然之前是有介绍自己一个一个介绍的慢慢的整合编译,但是费了九牛二虎之力还是不行各种错误不断,总会出现一个
/usr/include/bits/fcntl2.h:51: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
的错误,查来查去没办法弄,好像是一个BUG,没找到解决办法!
只好用Crosstool来编译arm-linux-gcc(3.3.6版本),所需的源码文件如下linux-2.6.10.tar.bz2,binutils-2.15.tar.bz2,gcc-3.3.6.tar.bz2,glibc-2.3.2.tar.bz2,glibc-linuxthreads-2.3.2.tar.bz2,linux-libc-headers-2.6.12.0.tar.bz2。
进入crosstool,然后”cp demo-arm.sh arm.sh” 并修改如下
set -ex
TARBALLS_DIR=/home/frankyue/arm/download #工具链源码文件存放的位置
RESULT_TOP=/opt/crosstool #工具链安装位置
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES=”c,c++”
export GCC_LANGUAGESeval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh –notest
echo Done.
修改arm.dat 和 gcc-3.3.6-glibc-2.3.2.dat 文件如下:
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux
TARGET_CFLAGS=”-O”---------------------
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
LINUX_DIR=linux-2.6.10
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
然后直接运行./arm.sh(要花好长时间)
但是我的出现了点错误,上网查了下因为我用的是UBUNTU,ubuntu将系统默认的shell设置成了dash (the Debian Almquist Shell),所以通过脚本生成的文件格式和bash的不一样,导致了编译错误。解决:
sudo mv /bin/sh /bin/sh.old
sudo ln -sf bash /bin/sh
完成后新编译好的交叉工具会在/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin(如果你按以上做的话)然后就是添加环境变量到bashrc就OK了!
OK了 可以去尝试编译2.6的内核了!
参考《ARM嵌入式Linux设备驱动实例开发》及ursa的文章帮助
最近评论