我是这类公司的新手。我刚刚交叉编译Linux kernel
。但是我有几个问题要问我必须知道哪些。
当我们编译Linux内核时,我正在使用这条命令,因为我的目标平台是ARM
。
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
我可以cross compile
这样的任何Open Source
软件,还是取决于软件支持的软件版本cross compilation
?
Linux内核源包含arch folder
用于单独的体系结构,但gcc
,gLibc
,binutils
没有,为什么?
但那些可以是cross-compiled
。 任何人都可以告诉我为什么会发生这种行为吗?
根据要求,有cross-compile
种不同软件的标准方法吗?如果任何一个精通此类业务,请带领我。
谢谢。
答案 0 :(得分:2)
Linux内核有自己的,非常特殊的构建系统 - 不仅用于交叉编译 - 而且还有多个架构交叉编译。这就是存在一系列arch
文件夹的原因。
大量(但并非全部)开源用户空间软件使用GNU autoconf来管理配置和构建过程。 autoconf
的目的与内核构建脚本有些不同 - 它允许在各种各样的类似于UNIX的构建主机上构建软件,以用于同样多种构建目标。
autoconf
可以用于交叉编译,只需要一些工作。这里有some hints 。原则上,构建过程需要知道:
gcc
和binutils
稍微有点特殊,因为交叉工具与主机自己的工具一起安装在开发主机上。由于构建过程可能同时使用两者,因此选择工具完全由可执行搜索路径完成是站不住脚的。相反,跨工具以特定于目标的名称格式命名 - 例如
arm-linux-gnueabi-gcc
和
i686-apple-darwin11-llvm-gcc
答案 1 :(得分:2)
如果有配置,有一种在Linux中交叉编译软件的通用方法 脚本。
提取您要安装的软件包的源代码。
查看是否有任何配置脚本。
如果是,则运行 ./configure --help 找到编译支持的选项。
我通常使用以下命令进行交叉编译。
./ configure --host = arm-none-linux-eabi --prefix = / path / to / where / you / want / to / install
基于包可能需要提供其他选项。 示例如--with-out = libtiff等。
如果没有任何配置脚本,则调整到make文件。