使用 multistrap 生成 Linux 构建软件

使用 multistrap 生成 Linux 构建软件

我正在开发一个带有 ARM CPU 和使用 multistrap 构建的 Debian Jessie 的嵌入式设备。看来我需要在该系统中安装稍微修补过的 ModemManager 版本,我要求的是有关如何执行此操作的任何指导。

到目前为止我所尝试的是chroot到由multistrap创建的rootfs,使用apt-get下载ModemManager的源代码并构建它chroot。到目前为止,由于我无法满足的依赖关系,我什至还没有通过配置脚本。

需要修补以解决 ModemManager 的已知问题,即它可能会通过扫描调制解调器的串行端口来混淆硬件。有一种方法可以解决这个问题,即通过 udev 规则将设备列入黑名单,但在这种情况下,串行端口是 tty 子系统的一部分,不支持将其列入黑名单。我已经在 ModemManager 的源代码中检查过这一点。

如果有的话,我也非常愿意寻求更简单的方法来解决这个问题,但到目前为止我还没有注意到它们。

答案1

尽管这个具体问题很老了,但在使用 multistrap 时将某些软件的修改版本添加到 multistrap 生成的 debian rootfs 是一个常见问题。

我不会将交叉编译与multistrap混合在一起,因为在multistrap生成的chrootfs中编译软件太费力了。

相反,我会在容易的地方编译修改后的软件。您可能已经拥有适合您的目标 ARM 架构的交叉编译环境,但如果没有,目前 IMO(以及 2016 年)最简单的方法是使用单板 Linux/ARM 计算机,例如具有所需目标操作系统的 Raspberry Pi ,在那里安装所需的构建工具并在那里编译修改后的软件。不需要设置交叉编译,因为这是使用本机编译。编译后,将创建的二进制文件复制到 PC 上的 multistrap 环境中。

正常运行 multistrap,在它执行并且您在 chroot 中配置了所有包之后,只需将修改后的二进制文件复制到 rootfs 中,然后再在目标硬件上使用 rootfs 即可。

这里的“二进制”可能只是指已编译的可执行文件,但它也可以指自定义的 .deb 包(最后在 chroot 中使用 dpkg 安装,而不是仅仅复制)。后者可以为您的修改提供更多保护,因为您还可以修改 .deb 版本号,这样apt update; apt upgrade如果您的嵌入式系统在运行时可以检索软件更新,您的修改就不会被恢复。

相关内容