x86_64 なホストで 32-bit なカーネルを make するには

単純に -m32 なオプションを渡してあげれば良いだけな模様です。最初 dpkg -L gcc した時に

/usr/bin/x86_64-linux-gnu-gcc

しか出てこなくてパニクッてました。

結局

ツリーのいっちゃん上にある Makefile の KBUILD_CFLAGS にセットする形で

KBUILD_CFLAGS   := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
                   -fno-strict-aliasing -fno-common \
                   -Werror-implicit-function-declaration \
                   -Wno-format-security \
                   -fno-delete-null-pointer-checks -m32

32-bit なナニができあがることを確認してます。

$ file vmlinux
vmlinux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped
$

あ、念の為 ARCH には i386 セットしてコンパイルしてますね。以下なカンジ。

$ make ARCH=i386 -j3

あるいはドライバモジュールをコンパイルする時とかは以下?

$ make ARCH=i386 -C ../../.. M=`pwd` modules

必要なのかどうかは不明ですが (を

追記

ちなみに gcc のバージョンは以下です。

gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)