解决crosstool-NG 1.24.0构建arm-cortex_a8-linux-gnueabi工具链时的各种问题

使用crosstool-NG 1.24.0来构建arm-cortex_a8-linux-gnueabi样本的工具链时,即使根据标准流程执行命令,依然会出现各种各样的问题。本文在使用标准的安装和构建流程的同时,展示过程中可能出现的问题及解决办法,最终的目标是成功安装arm-cortex_a8-linux-gnueabi工具链。

为了避免出现奇怪的错误,请先执行以下这条命令来安装这些包:

sudo apt-get install autoconf automake bison bzip2 cmake flex \
g++ gawk gcc gettext git gperf help2man libncurses5-dev \
libstdc++6 libtool libtool-bin make patch rsync texinfo unzip \
wget xz-utils

 

1. 安装crosstool-NG

以下是标准安装命令,这些命令可以解压提取1.24.0版本的crosstool-NG,并创建前端菜单系统ct-ng。

$ cd ~
$ git clone https://github.com/crosstool-ng/crosstool-ng.git
$ cd crosstool-ng
$ git checkout crosstool-ng-1.24.0
$ ./bootstrap
$ ./configure --prefix=${PWD}
$ make
$ make install

建议安装在用户主目录下($ cd ~),其他地方可能需要root权限,导致权限问题。

运行 $ git checkout crosstool-ng-1.24.0 可以将当前的工作目录切换到 crosstool-ng 项目的 1.24.0 版本。

运行 $ ./configure --prefix=${PWD} 可以使程序安装在当前目录下,这样可以避免对root权限的需要。如果直接运行 $ ./configure 则会安装到默认位置 /usr/local/bin 中,需要root权限。

 

问题1.1

运行 $ git checkout crosstool-ng-1.24.0 时出现错误提示

user@Linux:/crosstool-ng$ git checkout crosstool-ng-1.24.0
fatal: detected dubious ownership in repository at '/crosstool-ng'
To add an exception for this directory, call:

	git config --global --add safe.directory /crosstool-ng

git config --global --add safe.directory /crosstool-ng

解决办法:根据提示,运行git config --global --add safe.directory /crosstool-ng之后再运行git checkout crosstool-ng-1.24.0。

 

2. 构建arm-cortex_a8-linux-gnueabi工具链

根据之前的步骤,此时的ct-ng应该被安装在 ~/crosstool-ng/bin/ct-ng 目录下了。接下来,标准的工具链搭建流程是:选择目标配置;使用配置菜单menuconfig查看配置并进行更改;开始工具链搭建,命令如下:

$ bin/ct-ng arm-cortex_a8-linux-gnueabi
$ bin/ct-ng menuconfig
--------------------------------------------------------
建议在菜单界面进行以下更改:
1. 在Paths and misc options中,禁用Render the toolchain read-only
2. 在Target options -> Floating point中,选择hardware(FPU)
3. 在Target options中,为Use specific FPU输入neon
--------------------------------------------------------
$ bin/ct-ng build

按照这个流程和配置,会创建一个使用硬件浮点寄存器的工具链。

但是在build过程中有可能会出现以下问题。

 

问题2.1

build过程中,Retrieving 'isl-0.20'时出现isl: download failed错误提示

[INFO ]  Retrieving needed toolchain components' tarballs
[EXTRA]    Retrieving 'isl-0.20'
[ERROR]    isl: download failed

解决办法:在选定目标之后输入以下内容,再重新build

sed -e 's|CT_ISL_MIRRORS=.*$|CT_ISL_MIRRORS="https://libisl.sourceforge.io"|' \
    -e 's|CT_EXPAT_MIRRORS=.*$|CT_EXPAT_MIRRORS="https://github.com/libexpat/libexpat/releases/download/R_2_2_6"|' \
    -i .config

具体命令过程为:

$ bin/ct-ng arm-cortex_a8-linux-gnueabi
$ sed -e 's|CT_ISL_MIRRORS=.*$|CT_ISL_MIRRORS="https://libisl.sourceforge.io"|' \
    -e 's|CT_EXPAT_MIRRORS=.*$|CT_EXPAT_MIRRORS="https://github.com/libexpat/libexpat/releases/download/R_2_2_6"|' \
    -i .config
$ bin/ct-ng build

 

问题2.2

build过程中,Building binutils时出现gold文件相关的报错

[EXTRA]    Building binutils
[ERROR]    /crosstool-ng/.build/arm-cortex_a8-linux-gnueabi/src/binutils/gold/errors.h:87:50: error: 'string' in namespace 'std' does not name a type
[ERROR]    /crosstool-ng/.build/arm-cortex_a8-linux-gnueabi/src/binutils/gold/errors.h:87:50: error: 'string' in namespace 'std' does not name a type

解决办法:输入 $ bin/ct-ng menuconfig 打开菜单界面,将

Binary Utilities -> Linkers to enable (ld, gold) 下的选项改为 ld (原本是ld, gold)

这样就能正常运行。

----------------------------------

如果按照步骤来操作,等待30-50分钟,build提示成功后,构建好的工具链就会出现在~/x-tools/arm-cortex_a8-linux-gnueabihf中。

使用命令:

$ PATH=~/x-tools/arm-cortex_a8-linux-gnueabihf/bin:$PATH

将临时环境变量添加到此时的终端中。

然后可以尝试使用编译器来编译下自己的代码,如:

$ arm-cortex_a8-linux-gnueabihf-gcc example.c -o example

再通过 $ file example 来输出文件的类型,以确认交叉编译器正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值