2016年6月1日水曜日

Linux kernel 4.7-rc1をmake-kpkgでbuildする

概要

Linux kernel 4.7-rc1がreleaseされたが、buildでコケた。

Build environment

* Intel Core i7-6700K + DDR4 64GByte
* Debian Sid / Experimental
* gcc.real (Debian 6.1.1-4) 6.1.1 20160519
* Linux 4.7-rc1 (from Git)
* time (MAKEFLAGS= DEBIAN_BUILDARCH=native CONCURRENCY_LEVEL=8 CC='ccache gcc' CXX='ccache g++' fakeroot make-kpkg --initrd kernel_image)

error message

いつも通り、早速make-kpkgでbuildを試みたのだが、見事にコケた:

>   CC      arch/x86/boot/edd.o
> /tmp/ccENSHy1.s: Assembler messages:
> /tmp/ccENSHy1.s:35: Error: instruction `shlx' isn't supported in 16-bit mode.
> /tmp/ccENSHy1.s:39: Error: instruction `andn' isn't supported in 16-bit mode.
>   CC      arch/x86/boot/main.o
> scripts/Makefile.build:289: recipe for target 'arch/x86/boot/cpucheck.o' failed
> make[2]: *** [arch/x86/boot/cpucheck.o] Error 1
> make[2]: *** Waiting for unfinished jobs....

見ての通り、16bit modeでsupportされていないinstructionが使われている。

workaround

arch/x86/以下にあるcodeは-m32でcompileされるんじゃないのかな?と思い、関係しているであろうarch/x86/boot/Makefile@68を編集 (-m32を追加):

KBUILD_CFLAGS   := $(USERINCLUDE) $(REALMODE_CFLAGS) -D_SETUP
KBUILD_CFLAGS   := $(USERINCLUDE) $(REALMODE_CFLAGS) -D_SETUP -m32

これでbuildは通ったが、本当にこんなworkaroundで大丈夫なのかは不明。

ちなみに、Linux 4.6では全く同じ環境でbuildが通っているので、Linux 4.7で色々変わった関係だろう。

0 件のコメント:

コメントを投稿