crosstool-ng的基本使用流程

按照crosstool-ng的安装中的做法安装好crosstool-ng后就可以使用crosstool-ng了,基本使用流程在其官网上有说明:Using a released version,这里做下总结。

需要注意的是,目前新版本的crosstool-ng不能以root身份运行,否则会提示以下错误:

1
[ERROR]  You must NOT be root to run crosstool-NG

故下面的所有操作都不要在root下进行。当然,如果非要用root运行的话也是可以的,见本文最后的附注。

创建工作目录

一般专门创建一个工作目录用于之后的编译过程:

1
2
3
4
5
mkdir ~/toolchain
cd ~/toolchain
mkdir src
mkdir x-tools
export build="$(pwd)"

这里创建了工作目录~/toolchain/及两个子文件夹~/toolchain/src~/toolchain/x-tools,分别用于存放下载到的源码tarball及最终生成的交叉编译链。

最后新建了一个build变量,代表当前工作目录。

使用Sample示例配置

crosstool-ng中自带了很多示例配置,可用以下命令列出所有Samples及查看某个特定的示例的主要配置参数:

1
2
ct-ng list-samples
ct-ng show-<sample>

如果有合适的示例配置可用的话,可以在其基础上进行修改。在工作目录中执行ct-ng <sample>,如:

1
ct-ng arm-unknown-linux-gnueabi

此命令会自动在当前目录下创建示例的配置文件,shell输出类似这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  LN    config
MKDIR config.gen
IN config.gen/arch.in
IN config.gen/kernel.in
IN config.gen/cc.in
IN config.gen/binutils.in
IN config.gen/libc.in
IN config.gen/debug.in
CONF config/config.in
#
# configuration written to .config
#

***********************************************************

Initially reported by: Alexander BIGGA
URL: http://sourceware.org/ml/crossgcc/2008-06/msg00031.html

***********************************************************

Now configured for "arm-unknown-linux-gnueabi"

网上很多教程中都说要手动复制配置文件,目前新版本的crosstool-ng不需要这样做,而且手动复制还会出错,直接使用上述命令生成示例配置即可。

修改配置文件

一般来说,示例配置是不能直接使用的,需要对其进行一些修改,在工作目录中输入:

1
ct-ng menuconfig

会进入下图这样的menuconfig配置界面:

一般需要更改下路径,进入Paths and misc options,修改Local tarballs directory & Prefix directory。前者是下载的源码包存放的路径,后者是生成的交叉编译链存放的路径,将其改为之前在工作目录下新建的文件夹即可:

1
2
(${build}/src) Local tarballs directory
(${build}/x-tools/${CT_TARGET}) Prefix directory

具体参数的配置方法见:crosstool-ng参数配置

编译

配置完成后使用

1
ct-ng build

命令即可开始编译。crosstool-ng会先下载所需的tar包,之后进行编译。如果没有出现错误的话,最终会在Prefix directory中生成所需的交叉编译链,可使用tar进行打包。使用时将其中的bin目录加入PATH中即可。


附:以root身份运行crosstool-ng的方法

出于安全性考虑,crosstool-ng默认不能以root身份运行,如果确定要在root下运行,需要在配置中开启这一选项:

1
2
3
-- Paths and misc options --
[*] Try features marked as EXPERIMENTAL
[*] Allow building as root user (READ HELP!) (NEW)

在这一选项的HELP文档中,可以看到crosstool-ng的作者极力反对用root运行:)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
│ CT_ALLOW_BUILD_AS_ROOT:                                                                                                  │  
│ │
│ You normally do *not* need to be root to build a toolchain using │
│ crosstool-NG. In fact, it is *VERY* dangerous to run as root, as │
│ crosstool-NG will, as part of the build process, remove a few │
│ directories. If anything goes wrong, running as root can ruin │
│ your host distribution. │
│ │
│ I can't stress it enough: DO NOT RUN AS ROOT !! │
│ │
│ Do not run as root, you've been warned. │
│ Do not come whining, if it nukes your host system. │
│ Do not come whining, if you lose any data. │
│ Do not run as root. │
│ │
│ Do not run as root, you've been warned. │
│ Do not come whining, if the Earth stops rotating. │
│ Do not come whining, if kittens are smashed. │
│ Do not run as root. │
│ │
│ Do not run as root, do not run as root! │
│ (ad libitum)

文章目录
  1. 1. 创建工作目录
  2. 2. 使用Sample示例配置
  3. 3. 修改配置文件
  4. 4. 编译
  5. 5. 附:以root身份运行crosstool-ng的方法