Linux包交叉编译

标签 linux compilation cross-compiling archlinux pandaboard

我正在使用运行 Arch Linux 的单板计算机 (Pandaboard) 构建一个非视觉监视(声纳)平台。问题是,当我需要向安装中添加功能时,makemake install 进程在低功耗计算机上会永远运行。我希望有类似经验的人向我指出一个在另一个 Linux 机器(也运行 Arch)上编译软件包然后将它们移植到 SBC 的解决方案。

最佳答案

您阅读或访问过Linux Format杂志吗?第 166 期有一篇关于这个主题的文章。目标是 Raspberry Pi,但过程是相同的。

基本上,您需要在 x86 机器上安装交叉编译器。试试这个:

yaourt -S arm-linux-gnueabi-gcc

在继续之前,请使用一个简单的 hello,world 测试该工具链,您可以在 x86 上编译该工具链,复制到设备并执行。

/* hello.c */
#include <stdio.h>
int main ()
{
   printf("Hello, World!\n");
   return 0;
}

编译命令类似于

arm-linux-gnueabi-gcc -o gello hello.c

有了它,你就可以交叉编译内核了:

git clone --depth 1 git://github.com/raspberrypi/linux.git
cd linux
ssh root@alarmpi zcat /proc/config.gz > .config
make -j 8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig -k

您可以使用 distcc 在 pandaboard 上执行构建,但让它将编译委托(delegate)给您的 x86 机器,该机器将使用您的交叉编译器工具链为 Arm 进行编译。在 ARM 和 x86 上:

pacman -S distcc

ARM 端是客户端。编辑其配置 /etc/makepkg.conf 以告诉它有关服务器(您的 x86 机器)的信息:

BUILDENV=(fakeroot distcc color !ccache)
DISTCC_HOSTS="myx86host"
MAKEFLAGS="-j8"

j8 告诉它利用 i7 上的所有内核。适当调整。

在服务器上,您需要配置 distccd /etc/conf.d/distccd 以允许客户端连接,然后启动 distccd 守护进程。然后,您可以从客户端启动您的构建。

用于构建 Arch 软件包的 makepkg 工具负责处理 distcc 链接。如果您正在构建自己的软件包,我建议您将它们包装在 PKGBUILD 中,以便为您完成工作。

(如果您的主板使用硬 float ,您可能需要调整上面的一些内容)

关于Linux包交叉编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14461252/

相关文章:

c - 内核模块与 sys_call 交互

python - 使用 Cron 运行 Python 脚本?

android - 使用 API 获取 Android 设备的 IP 地址

linux-kernel - 如何为 iMX6 sabre lite 板准备新的 SD 卡以运行 Linux

交叉编译libjson-c : Make unsuccessful in libjson-c, Linkhash.c警告

使用 PTY.spawn 打开的 Ruby kill 虚拟 shell

linux - 哪个线程监听特定的 UDP 端口

module - F#:命名空间未定义

tensorflow - 使用CUDA 9.1编译的tensorflow

通过 gcc 编译并使用 -ltr 会导致错误,如何修复?