2

我正在尝试在 amd64 Debian 主机上构建 i386 Linux 内核 deb 包。

现在我通过 set 来做这件事--cross-compile flag。它确实对内核本身做了很大的工作。但问题是内核工具,它们仍然被编译为本地机器格式。由于链接器不匹配,仅更改HOSTCC变量无法解决此问题。

我知道chrootlinux32环境会工作。但是,它们是唯一的方法吗?应该有另一种解决方案,因为有人可能想要构建一个 arm 内核。

PS:这是我正在使用的命令:

CONCURRENCY_LEVEL=8 DEB_HOST_ARCH=i386 MAKEFLAGS="HOSTCC=/home/csl/bin/i486-linux-gnu-gcc"\
make-kpkg --rootcmd fakeroot --initrd --arch i386 --cross-compile /home/csl/bin/i486-linux-gnu- --append-to-version=-liquorix-csl binary-arch \
> >(tee stdout.log) 2> >(tee stderr.log >&2)
4

2 回答 2

3

我已经这样做了:

  1. sudo dpkg --add-architecture i386
  2. sudo apt-get update && sudo apt-get install ia32-libs gcc-multilib
  3. 制作 i386_defconfig
  4. 使 ARCH=i386 -j5 deb-pkg

我没有时间去探索是否真的需要 ia32-libs。但我想指出 make-kpkg 已被弃用,如 debian book 中所述。

于 2013-05-04T01:02:13.240 回答
1

我现在这样做是这样的:

CONCURRENCY_LEVEL=6 DEB_HOST_ARCH=i386 setarch i386 make-kpkg --initrd --arch i386 binary-arch

我在 debian 书中没有看到任何关于 make-kpkg 的抱怨,所以你能在 debian 书中显示你的参考吗?

我发现真正的问题是scripts目录中包含的内核工具必须编译为原生格式,这可能有助于内核构建。但是这个工具在做DKMS的时候是不能复用的,这是因为DKMS和交叉编译的冲突比较大。我将手动破解损坏的交叉构建内核。

于 2013-05-07T03:47:29.763 回答