借鉴于其他人:原文链接
使用crosstool-ng来制作编译工具链
安装crosstool-ng:
创建目录文件
$ mkdir arm-linux-tools
$ cd arm-linux-tools
下载crosstool-ng源码
$ wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.20.0.tar.bz2
注:现在有更多版本,此处学习使用,照搬使用。
解压源码
$ tar xvjf crosstool-ng-1.20.0.tar.bz2
配置并进行依赖检测
依赖安装:
1)gperf
2)bison
3)flex
4)texinfo
5)gawk
6)libtool
7)automake
8)libncurses5-dev
9)g++
原文命令:
$ cd crosstool-ng-1.20.0
$ ./configure --prefix /home/eric/arm-linux-tools/crosstool-install/
注:此处将会出现libtool找不到错误,修改命令添加路径参数
修改命令:
$ cd crosstool-ng-1.20.0
$ ./configure --prefix /home/x/arm-linux-tools/crosstool-install/ --with-libtool=usr/share/libtool
编译并安装
$ make
注:如果编译时出现错误
![32eed4f3a0455d6f117ca8fc0801365d.png](https://i-blog.csdnimg.cn/blog_migrate/3a012785b4679a5633f5b93a9678cd28.jpeg)
直接修改kconfig/zconf.hash.c +163 源码中的size_t为unsigned int
$ make install
配置环境变量
$ export PATH=$PATH:/home/eric/arm-linux-tools/crosstool-install/bin/
检查是否安装成功
$ ct-ng -v
配置交叉编译工具链:
将arm-unknown-linux-gnueabi文件夹复制到crosstool-build目录下
$ cd samples
$ cp -r arm-unknown-linux-gnueabi/ ../../crosstool-build/
将默认配置文件拷贝到crosstool-build目录下并改名为.config
$ cd ~/arm-linux-tools/crosstool-build
$ cp arm-unknown-linux-gnueabi/crosstool.config .config
执行ct-ng menuconfig进入配置界面进行配置
$ ct-ng menuconfig
1)设定源码包路径和交叉编译器的安装路径
1)源码包路径:设置Paths and misc options下的Local tarballs directory为/home/eric/arm-linux-tools/src
2)交叉编译器的安装路径:设置Paths and misc options下的Prefix directory为/home/eric/arm-linux-tools/x-tools/${CT_TARGET}
(2)修改交叉编译器针对的架构
1)设置Target options下的Architecture level为armv4t
2)设置Target options下的Emit assembly for CPU为arm9tdmi
3)设置Target options下的Tune for CPU为arm920t
(3)设置编译时的并行进程数
1)设置Paths and misc options下的Number of parallel jobs为4
这个数值不宜过大,应该为CPU核心数量的两倍。
(4)设置编译器前缀
1)设置Toolchain options下的Tuple's vendor string为S3C2440,这样生成的编译器的前缀就是arm-S3C2440-linux-gnueabi-
安装termcap
$ cd /tmp
$ wget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
$ tar xvzf termcap-1.3.1.tar.gz
$ cd termcap-1.3.1
$ ./configure --prefix=/usr
$ make
$ make install
编译
在crosstool-build目录下执行以下命令进行编译
$ ct-ng build.4
整个编译过程时间比较长,crosstool-ng会自动下载相应的包和内核文件,然后解压、配置、编译、链接,但有个别包在自动下载过程中会出错,例如duma_2_5_15和expat-2.1.0,需要手动下载这两个包放入Local tarballs directory指定的目录(这里为/home/eric/arm-linux-tools/src),然后再重新执行编译即可。
注:个人在安装中,发现10多个包都没法下载,全部都是手动下载的,下载的包只要是常见的压缩包应该都没有问题。推荐墙外下载。
![7bc9cbde28e689b0c008748e7d895910.png](https://i-blog.csdnimg.cn/blog_migrate/9f950cb3810893779664c3d0ab933fd7.jpeg)
![c123c1be073f0353e593a15c20b11d28.png](https://i-blog.csdnimg.cn/blog_migrate/6f74d75157153105fbeae0919c9a68c1.jpeg)
编译过程中,在安装到cross-gdb时,出现configure: error: expat is missing or unusable的错误,安装libexpat1-dev即可。
编译过程中,出现g++: Internal error: Killed (program cc1plus)的错误,尝试着将可用内存加大。
-----------------------------------------------------------------------------------------------
在进行ct-ng build时,网上教程都是成功的,然而作者总是出现安装binutils错误:
![22485912746b34c171189d65ac18c3eb.png](https://i-blog.csdnimg.cn/blog_migrate/013a9ab920a58b046eea4238f9052263.png)
参照Google和百度都无法成功通过build,耗时3天,暂时放弃。
-----------------------------------------------------------------------------------------------
配置环境变量
$ echo "PATH=$PATH:/home/eric/arm-linux-tools/x-tools/arm-S3C2440-linux-gnueabi/bin" >> ~/.bashrc
$ source ~/.bashrc
确认安装完成
$ arm-S3C2440-linux-gnueabi-gcc -v
编译成功后的交叉编译器路径
(1)编译器路径:/home/eric/arm-linux-tools/x-tools/arm-S3C2440-linux-gnueabi/bin
(2)库文件路径:/home/eric/arm-linux-tools/x-tools/arm-S3C2440-linux-gnueabi/arm-S3C2440-linux-gnueabi/lib