OLPC なナニを x86_64 なマシンで云々な控え

.config を grep しても OLPC などという CONFIG は全然無くって不思議に思っていたのですが、arch/x86/Kconfig 確認してみたところ、どうやら x86_32 でないと有効にならない模様、ということが判明。

# x86_64 have no ISA slots, but can have ISA-style DMA.
config ISA_DMA_API
        bool "ISA-style DMA support" if (X86_64 && EXPERT)
        default y
        help
          Enables ISA-style DMA support for devices requiring such controllers.
          If unsure, say Y.

if X86_32

config ISA

# 中略

config OLPC

手持ちの端末は x86_64 なんですがどうやってカーネルをクロスコンパイルするのかを忘れてたりして。とりあえず make clean して以下?

$ make CROSS_COMPILE=i686-pc-linux-gnu- ARCH=i386 menuconfig

ということで make clean して上記トライしてみることに。

ヤッてみた

出てきましたね。

$ grep OLPC .config
# CONFIG_OLPC is not set

Bus options というあたりなのか。すると staging で One Laptop Per Child Display CONtroller support が出てきました。

make 実行したら i686-pc-linux-gnu- な gcc が無いとか言っておられるのかな。/usr/lib/gcc の中見てみたら i686-linux-gnu というナニがありますね。
つうか dpkg -L してみたら以下。

$ dpkg -L gcc
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/cpp
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/c89-gcc.1.gz
/usr/share/man/man1/c99-gcc.1.gz
/usr/bin
/usr/bin/c89-gcc
/usr/bin/c99-gcc
/usr/share/doc/cpp/README.Bugs
/usr/share/doc/gcc
/usr/share/man/man1/gcc.1.gz
/usr/share/man/man1/x86_64-linux-gnu-gcc.1.gz
/usr/share/man/man1/gcov.1.gz
/usr/bin/gcc
/usr/bin/x86_64-linux-gnu-gcc
/usr/bin/gcov
$

i686-linux-gnu-gcc は何処へ。apt-cache search しても出てこぬ。さんざんググッて以下を発見。

普通の ubunutu12 では i686 なクロスコンパイルはできないのか。微妙だなぁ。

-march=i686 という風なオプションを gcc に、というナニを発見。あるいは -m32 とか -m64 なんて方法があるよ、とか言われてる所もあります。
gcc の man 見たら確かにありますね。
つうか gcc のオプションってどうやって渡すんだろ。HOSTCFLAGS ?

HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -m32
#HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer

これで make clean して再度 make menuconfig してみます。

$ make ARCH=i386 menuconfig

う。駄目だ。。そして -m32 を外したらコンパイルが通りますな。むむ、ということで KBUILD_CFLAGS 末端に付けてみました。するとパスしたな。こっちだったのか。
で、OLPC なナニがあるのかどうなのか。

出てきた

とりあえず make を kickoff してみます。終わるようであれば追記するかも。

$ make ARCH=i386 -j3

終わた

23:22
とりあえず何とかなっている模様。

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

では、これベースで課題になってるソレのパッチをナニ。