我正在尝试在amd64 Debian主机上构建一个i386 Linux内核deb包。
现在我通过设置--cross-compile flag
来做这件事。它确实完成了内核本身的工作。但问题是内核工具,它仍然被编译为本地机器编码器。由于链接器不匹配,仅更改HOSTCC
变量无法解决此问题。
我知道chroot
或linux32
环境可行。但是,他们是唯一的方式吗?应该有另一个解决方案,因为有人可能想要构建一个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)
答案 0 :(得分:2)
我这样做了:
我没有时间去探索真正需要的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与交叉编译完全冲突。我会手工破解破碎的交叉构建的内核。