1、ubuntu版本:unbutu10.10(以上版本应该也可以,本人没有测试)
2、制作交叉编译工具需要文件:
l binutils-2.16.1.tar.bz2 http://mirrors.ustc.edu.cn/gnu/binutils/
l gcc-3.3.6.tar.gz http://mirrors.ustc.edu.cn/gnu/gcc/gcc-3.3.6/
l glibc-2.3.2.tar.gz http://mirrors.ustc.edu.cn/gnu/glibc/
l glibc-linuxthreads-2.3.2.tar.gz http://mirrors.ustc.edu.cn/gnu/glibc/
l linux-2.6.10.tar.gz https://www.kernel.org/pub/linux/kernel/v2.6/
l linux-libc-headers-2.6.12.0.tar.bz2 http://ep09.pld-linux.org/~mmazur/linux-libc-headers/linux-libc-headers-2.6.12.0.tar.bz2
4、制作低版本gcc需要文件:
本例是基于gcc-3.4.6
l gcc-3.4-base_3.4.6-6ubuntu3_i386.deb、
l gcc-3.4_3.4.6-6ubuntu3_i386.deb、
l cpp-3.4_3.4.6-6ubuntu3_i386.deb、
l g++-3.4_3.4.6-6ubuntu3_i386.deb、
l libstdc++6-dev_3.4.6-6ubuntu3_i386.deb
libstdc++6_3.4.6_6ubuntu3_i386.deb
以上文件包下载地址:
http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/
5、首先应该安装一些插件
sudo apt-get install ncurses-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install build-essential
这些插件式编译低版本的gcc所必须的。
6、自己在主目录下新建一个目录为gcc-3.4.6,把制作低版本gcc需要的文件复制到该目录下。
在该目录下运行 dpkg -i *.deb
这个命令作用是把后缀为.deb的文件全部安装上,同样也可以单独安装各个文件
7、安装成功后,运行一下命令
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.4 40
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 30
此时可能会提示没有update-alternatives命令不存在,那么缺什么就安装什么
8、切换到gcc-3.4.6
运行命令update-alternatives --config gcc
选择需要的gcc版本,这里选择刚安装的gcc-3.4.6
9、查看当前gcc版本
运行命令 gcc -v
下面就开始制作自己的交叉编译工具了:
10、在主目录下解压crosstool-0.43.tar.gz生成目录crosstool-0.43
运行命令 tar zxvf crosstool-0.43.tar.gz
11、进入解压后目录,修改相关文件
运行命令 cd crosstool-0.43.tar.gz 进入目录
运行命令 cp demo-arm.sh arm.sh
运行命令 vi arm.sh
arm.sh内容如下:
#!/bin/sh
# This script has one line for each known working toolchain
# for this architecture. Uncomment the one you want.
# Generated by generate-demo.pl from buildlogs/all.dats.txt
set -ex
TARBALLS_DIR=$HOME/mydown
RESULT_TOP=$HOME/opt/crosstool
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
# Really, you should do the mkdir before running this,
# and chown /opt/crosstool to yourself so you don't need to run as root.
sudo mkdir -p $RESULT_TOP
#eval `cat arm.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest
#eval `cat arm.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.1.0-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
echo Done.
这个文件需要修改地方以上用红色标记。
TARBALLS_DIR=$HOME/mydown
这个目录是存放制作交叉编译工具需要文件
RESULT_TOP=$HOME/opt/crosstool
这个目录是编译后生成文件的目录,其中包括交叉编译工具链
sudo mkdir -p $RESULT_TOP
加入sudo增加用户权限,不加可能导致不能建立目录
eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
这条语句是为了执行arm.dat和gcc-3.3.6-glibc-2.3.2.dat文件,此处的gcc-3.3.6-glibc-2.3.2和下载的gcc-3.3.6和glibc-2.3.2对应。
接下来修改arm.dat
arm.dat内容如下:
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux //生成交叉工具名称前缀,根据自己喜好更改
TARGET_CFLAGS="-O"
修改gcc-3.3.6-glibc-2.3.2.dat
gcc-3.3.6-glibc-2.3.2.dat内容如下:
BINUTILS_DIR=binutils-2.16.1
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
这几个配置和下载文件一一对应,更改很随意!
12、接下来开始编译
运行在crosstool-0.43目录下运行命令 ./arm.sh
如果运气好的话,编译会飞快地进行,我们只需等待。运气不好,对不起,可能会出现莫名其妙的错误,上网搜索资料,干掉错误,在解决问题的时候你就慢慢地提高了!
13、成功后,在home/[name]/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin目录下会出现类似下面的东西
arm-linux-addr2line arm-linux-gprof
arm-linux-ar arm-linux-ld
arm-linux-as arm-linux-nm
arm-linux-c++ arm-linux-objcopy
arm-linux-c++filt arm-linux-objdump
arm-linux-cpp arm-linux-ranlib
arm-linux-g++ arm-linux-readelf
arm-linux-gcc arm-linux-size
arm-linux-gcc-3.3.6 arm-linux-strings
arm-linux-gccbug arm-linux-strip
arm-linux-gcov fix-embedded-paths
这就是传说中的交叉编译工具了
14、不要着急,工作还没做完,下面就是把交叉编译工具路径添加到环境变量中
修改环境变量方法有3种:
1、修改$HOME目录下.profile
在文件末尾添加
export PATH=$PATH:/home/[name]/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin
保存退出后,运行命令source ./.profile,重新启动终端窗口
2、修改/etc/profile
方法同上
3、修改$HOME目录下.bashrc
在文件末尾添加
export PATH=$PATH:/home/[name]/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin
此路径添加具体视情况而定。
现在我们可以随心所欲的使用交叉编译工具了,uboot、内核不是问题。