使用的平台ubuntu
cat /proc/version
Linux version 5.3.0-62-generic (buildd@lcy01-amd64-004) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #56~18.04.1-Ubuntu SMP Wed Jun 24 16:17:03 UTC
/klaus_x/article/details/79540063 可参考其他情况的编译
1.安装crosstool_NG工具
mkdir arm-linux-tools --》 建立toolchain目录
cd arm-linux-tools/
wget http://crosstool-/download/crosstool-ng/crosstool-ng-1.24.0.tar.xz --》 下载工具源码
tarxvf crosstool-ng-1.24.0.tar.xz --》 解压工具包
mkdir crosstool-build crosstool-install src --》 建立后续将要使用到的各种目录,
cd crosstool-ng-1.24.0/
./configure --prefix /home/yuhang/arm-linux-tools/crosstool-install --》 配置整个工程并进行依赖检查
sudo apt-get install help2man --》 提示缺工具help2man
./configure --prefix /home/yuhang/arm-linux-tools/crosstool-install
sudo apt-get install libtool
sudo apt-get install libtool-bin --》 提示缺libtool,需要安装2个
./configure --prefix /home/yuhang/arm-linux-tools/crosstool-install
make --》 执行makefile文件
ls
make install --》 编译成功后安装
sudo echo "PATH=$PATH:/home/yuhang/arm-linux-tools/crosstool-install/bin" >> ~/.bashrc --》 配置环境变量
source /home/yuhang/.bashrc--》 执行使其生效
ct-ng -v--》 查看安装结果,有GNU Make 版本号之类信息显示
2. 配置交叉编译链
cd samples --》 该目录下存在一些默认配置,有arm, avr32, mips, powerpc等硬件平台
arm平台有如下几个:
arm-cortex_a15-linux-gnueabihf
arm-cortexa5-linux-uclibcgnueabihf
arm-cortex_a8-linux-gnueabi
arm-cortexa9_neon-linux-gnueabihf
armeb-unknown-linux-gnueabi
armeb-unknown-linux-uclibcgnueabi
arm-multilib-linux-uclibcgnueabi
arm-unknown-linux-gnueabi
arm-unknown-linux-musleabi
arm-unknown-linux-uclibcgnueabi
arm-unknown-linux-uclibcgnueabihf
armv6-nommu-linux-uclibcgnueabi
因为是制作arm-linux交叉编译链,所以选择arm-unknown-linux-gnueabi进行配置
cp -r arm-unknown-linux-gnueabi/ ../../crosstool-build --》 将arm-unknown-linux-gnueabi文件夹复制到crosstool-build目录下
cd ../../crosstool-build/
ls
cp arm-unknown-linux-gnueabi/crosstool.config .config
ct-ng menuconfig --》 配置
step1: 设定源码包路径和交叉编译器的安装路径,在Path and misc options中,
修改2个路径, Local tarballs directory和 Prefix directory
选择save后,exit到上级配置
step2: 修改交叉编译器的架构配置
在Target options(在Path and misc options之后)中配置
需要配置点:
Architecture levelEmit assembly for cpuUse specific FPU
ct-ng build --》 配置结束后开始编译
[DEBUG] Trying '/gnu/automake/automake-1.16.1.tar.xz'
[DEBUG] ==> Executing: 'wget' '--passive-ftp' '--tries=3' '-nc' '--progress=dot:binary' '-T' '10' '-O' '/home/yuhang/arm-linux-tools/crosstool-build/.build/tarballs/automake-1.16.1.tar.xz.tmp-dl' '/gnu/automake/automake-1.16.1.tar.xz'
[ALL ] ---01-01 01:20:07-- /gnu/automake/automake-1.16.1.tar.xz
[ALL ] Resolving ()... failed: Connection timed out.
[ALL ] ---01-01 01:20:17-- /gnu/automake/automake-1.16.1.tar.xz
[ALL ] Resolving ()... 2001:470:142:5::200
[ALL ] Connecting to ()|2001:470:142:5::200|:80... failed: Network is unreachable.
[ALL ] -01-01 01:26:08 (11.4 KB/s) - Read error at byte 408311/161197451 (Success). Giving up.
[ALL ]
[DEBUG] ==> Return status 4
[DEBUG] Not at this location: "/pub/linux/kernel/v4.x/linux-4.20.8.tar.gz"
[ERROR]linux: download failed
[ERROR] >>
[ERROR] >> Build failed in step 'Retrieving needed toolchain components' tarballs'
[ERROR] >> called in step '(top-level)'
[ERROR] >>
wget /linux-kernel/v4.x/linux-4.20.8.tar.xz--》 以上问题的原因是下载这些tar包慢的问题,可使用其他快速下载链接
wget http://mirror./gnu/mpc/mpc-1.1.0.tar.gz
wget http://mirror./gnu/ncurses/ncurses-6.1.tar.gz
wget mirror./gnu/ncurses/ncurses-6.1.tar.gz
wget http://ftp./ubuntu/pool/main/l/ltrace/ltrace_0.7.3.orig.tar.bz2
yuhang@yuhang-VirtualBox:~/arm-linux-tools/crosstool-build/.build/tarballs$ ls --》 下载的tar包路径
automake-1.16.1.tar.xz linux-4.20.8.tar.gz
gmp-6.1.2.tar.xz.tmp-dl zlib-1.2.11.tar.xz
编译成功后,在tools目录下可以看到toolchain
yuhang@yuhang-VirtualBox:~/arm-linux-tools/tools/bin$ ./arm-unknown-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=./arm-unknown-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/yuhang/arm-linux-tools/tools/libexec/gcc/arm-unknown-linux-gnueabi/8.3.0/lto-wrapper
Target: arm-unknown-linux-gnueabi
Configured with: /home/yuhang/arm-linux-tools/crosstool-build/.build/arm-unknown-linux-gnueabi/src/gcc/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-unknown-linux-gnueabi --prefix=/home/yuhang/arm-linux-tools/tools --with-sysroot=/home/yuhang/arm-linux-tools/tools/arm-unknown-linux-gnueabi/sysroot --enable-languages=c,c++ --with-cpu=arm920t --with-float=soft --with-pkgversion='crosstool-NG 1.24.0' --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --disable-libmpx --with-gmp=/home/yuhang/arm-linux-tools/crosstool-build/.build/arm-unknown-linux-gnueabi/buildtools --with-mpfr=/home/yuhang/arm-linux-tools/crosstool-build/.build/arm-unknown-linux-gnueabi/buildtools --with-mpc=/home/yuhang/arm-linux-tools/crosstool-build/.build/arm-unknown-linux-gnueabi/buildtools --with-isl=/home/yuhang/arm-linux-tools/crosstool-build/.build/arm-unknown-linux-gnueabi/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --enable-plugin --enable-gold --disable-nls --disable-multilib --with-local-prefix=/home/yuhang/arm-linux-tools/tools/arm-unknown-linux-gnueabi/sysroot --enable-long-long
Thread model: posix
gcc version 8.3.0 (crosstool-NG 1.24.0)
yuhang@yuhang-VirtualBox:~/arm-linux-tools/tools/bin$
以上toolchain可在Host主机上安装