在amd64主机上交叉构建i386 linux内核

时间:2013-04-17 03:58:50

标签: kernel debian cross-compiling

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

现在我通过设置--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)

2 个答案:

答案 0 :(得分:2)

我这样做了:

  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
  5. 我没有时间去探索真正需要的ia32-libs。但是我想指出make-kpkg已被弃用,正如debian书中所解释的那样。

答案 1 :(得分:1)

我现在这样做:

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

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

我发现真正的问题是scripts目录中包含的内核工具必须编译为本机格式,这可能会助长内核构建。但是这个工具在进行DKMS时无法重用,这仅仅是因为DKMS与交叉编译完全冲突。我会手工破解破碎的交叉构建的内核。