3

我是这种行业的新手。我刚刚交叉编译Linux kernel。但我几乎没有什么问题要问我必须知道的。

当我们编译 Linux 内核时,我正在使用这条命令,因为我的目标平台是ARM.

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

我可以使用cross compile任何Open Source类似的软件还是取决于软件支持的软件版本cross compilation

Linux 内核源代码包含一个arch folder单独的体系结构,但是没有,为什么gccgLibcbinutils

但那些可以cross-compiled谁能告诉我为什么会发生这种行为?

是否有任何标准方法可以cross-compile根据要求使用不同类型的软件?如果有人精通这种业务,请带领我。

谢谢你。

4

2 回答 2

2

linux 内核有它自己的、非常特殊的构建系统——不仅用于交叉编译——还用于多架构交叉编译。这就是arch存在一系列文件夹的原因。

大量(但绝不是全部)开源用户空间软件使用GNU autoconf来管理配置和构建过程。的目的autoconf与内核构建脚本有些不同——它允许软件在各种细微不同的类 UNIX 构建主机上构建,用于同样广泛的构建目标。

autoconf可用于交叉编译,需要做一些工作。这里有一些提示。原则上,构建过程需要知道:

  • 使用哪组工具(例如 gcc、binutils)
  • 目标头文件和库的暂存位置
  • 在哪里安装生成的产品。

gcc并且binutils是稍微特殊的情况,因为交叉工具与主机自己的工具一起安装在开发主机上。由于构建过程很可能同时使用两者,因此完全由可执行搜索路径完成工具的选择是站不住脚的。相反,交叉工具以特定于目标的名称格式命名 - 例如

arm-linux-gnueabi-gcc

i686-apple-darwin11-llvm-gcc

于 2012-12-13T10:17:58.167 回答
2

如果具有配置脚本,则有一种在 linux 中交叉编译软件的通用方法。

提取要安装的包的源代码。

看看里面是否有任何配置脚本。

如果是,则运行 ./configure --help 以查找支持编译的选项。

我通常使用以下命令进行交叉编译。

./configure --host=arm-none-linux-eabi --prefix=/path/to/where/you/want/to/install

基于包可能需要给出额外的选项。例如 --with-out= libtiff 等。

如果那没有任何配置脚本,则调整到 make 文件中。

于 2012-12-14T07:07:40.320 回答