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
- 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。ちょっと頭をヒヤして別途という事にしてみます。