qemu 云々にリトライ

とりあえずカーネルをおっことしてきてコンパイル。

$ git clone git://android.git.kernel.org/kernel/common.git
$ cd common
$ git checkout -b android-2.6.35-versatilepb origin/android-2.6.35
$ git branch
* android-2.6.35-versatilepb
  android-2.6.36
$ export ARCH=arm
$ export CROSS_COMPILE=$ANDROID_TOP/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
$ make versatile_defconfig
$ make menuconfig

とりあえず menuconfig はせずに make して、さあ今からどうしたものか、な昼下がり。

busybox

とりあえず、カーネルはあるんですが root filesystem を作るの面倒だなぁ、と言いつつ Google 先生にお伺いしてみた所、busybox 使えばいいんじゃね? 的回答がナニ。

う、一年前のエントリだな。

そりゃ良いとして

とりあえずファイルをココからオトして解凍して以下らしい。ARCH と CROSS_COMPILE は export してる環境で実行します。面倒いので。

$ cd busybox-1.16.0
$ make defconfig
$ make menuconfig
$ make install
$ cd _install
$ find . | cpio -o --format=newc > ../rootfs.img
$ cd ..
$ gzip -c rootfs.img > rootfs.img.gz

これで root filesystem 作成完了なのかな。あ、駄目だ。menuconfig で何かヤれって書いてあるな。ええと

I checked the option to compile Busybox as a static executable, so that we don’t have to copy the dynamic libraries inside the root filesystem. The setting can be found in “Busybox Settings --> Build Options“. Then, the following command builds Busybox and creates a directory called _install containing the root filesystem tree:


との事でいっちゃんてっぺんの Busybox Settings の中の Build Options の中のいっちゃんてっぺんの Build BusyBox as a static binary な項目に * を付けて make install するんですが失敗するな。
メセジの一部が以下なんですが

  CC      applets/applets.o
applets/applets.c:10:20: error: assert.h: No such file or directory

ヘッダを include できとらん。これって /usr/include なヘッダなんだけどなぁ。

と思いつつ

README とか INSTALL とか確認してみたら make しろ、って書いてある。実行してみたら普通にコンパイルしてる風だな。手順としては

  • ARCH とか CROSS_COMPILE な環境変数設定
  • make defconfig
  • make menuconfig
    • Busybox Settings -> Build Options -> Build BusyBox as a static binary をセット
  • make
  • make install

という順なのかな。うん、できた。ので以下をナニ。

$ cd _install
$ find . | cpio -o --format=newc > ../rootfs.img
$ cd ..
$ gzip -c rootfs.img > rootfs.img.gz

で、qemu 起動か。まだ準備は続く模様。

$ qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/bin/sh"

む、止まったな。。

再開

1.18.4 が最新 stable という事なのでこちらでリトライを。って上と同じコンパイルエラーが出るなぁ。しかもおそらく make install で良いのではないか、という事に気づいてたりなんかする。
てか、何故に make がパスしたか、な根拠が不明になってるな。
Google 先生によると

  • Build Options -> Build with Large File support のチェック消す
  • Linux System Utilities -> fdisk -> Support over 4GB disks を off
  • Linux System Utilities -> mount -> Support mounting NFS file systems を off

でもコンパイル通らん。

どうやら上記でパスしたソレは CROSS_COMPILE とか略された環境で作られたモノだったようです。どうりで qemu に吸わせたら動かん訳だわ。
しかしなぜに /usr/include を見にいかぬ。

どうやら

使ってるソレが微妙らしい。kernel コンパイルしたソレと同じで OK って思ったんですが、

からファイルをオとしてリトライしたら見事にパスorz

$ make ARCH=arm CROSS_COMPILE=../cross-compiler-armv5l/bin/armv5l-

とりあえず茶を入れてきますorz

リトライ

ええと、上記なソレを qemu で云々したのですが kernel panic しました。もっかい menuconfig から、って事でリトライしてます。

むむ

これってそもそもカーネル作ったナニと違うのが駄目な所以? そんなに時間かからんはずなので kernel 作りなおしてみるか。
で、リトライしてみたのですが NG。ちょっと頭をヒヤして別途という事にしてみます。