本当に gcc のバージョンの問題なのかなぁ

と言いつつ今日も try & error な一日になるのかどうか。
とりあえず gcc 関連の現状が以下。

$ dpkg --get-selections|grep gcc
gcc                                             install
gcc-4.4                                         install
gcc-4.4-base                                    install
gcc-4.4-multilib                                install
gcc-4.5-base                                    install
gcc-multilib                                    install
lib32gcc1                                       install
libgcc1                                         install
$

とりあえず 4.3 入れて update-alternatives してみる方向でナニ。

$ sudo apt-get install -fy gcc-4.3 g++-4.3
$ dpkg --get-selections|grep gcc 
gcc                                             install
gcc-4.1                                         install
gcc-4.1-base                                    install
gcc-4.3                                         install
gcc-4.3-base                                    install
gcc-4.4                                         install
gcc-4.4-base                                    install
gcc-4.4-multilib                                install
gcc-4.5-base                                    install
gcc-multilib                                    install
lib32gcc1                                       install
libgcc1                                         install
$

イキオイで 4.1 も入れちゃってますがご愛嬌ってコトで。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 43 \
--slave /usr/bin/g++ g++ /usr/bin/g++-4.3 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-4.3
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 44 \
--slave /usr/bin/g++ g++ /usr/bin/g++-4.4 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-4.4
$ sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-4.4   44        auto mode
  1            /usr/bin/gcc-4.3   43        manual mode
  2            /usr/bin/gcc-4.4   44        manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/gcc-4.3 to provide /usr/bin/gcc (gcc) in manual mode.
$ gcc --version
gcc (Ubuntu 4.3.5-3ubuntu1) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$

で、カーネルの make 着手してどうなるやら。

ええと

上記 NG です。ってか kernel source 自体が微妙なのではないか、という事に気づいております。とりあえず 2.6.38 なナニをオトしてリトライします。

$ cd linux-2.6.38
$ make x86_64_defconfig
$ make menuconfig
$ make -j2

できた模様。bzImage だけど大丈夫かな。次は busybox です。

$ make defconfig
$ make menuconfig
$ make install

上記正常終了したので以下か。

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

で、qemu なんだけどどーやるのかな。

$ qemu -kernel linux-2.6.38/arch/x86/boot/bzImage \
 -initrd busybox-1.18.4/rootfs.img.gz \
 -append "root=/dev/ram rdinit=/bin/sh"

あら、違うや。

This kernel requires an x86-64 CPU, but only detected an i686 CPU.
Unable to boot - please use a kernel appropriate for your CPU.

なんかもの凄いナチュラルをぶちカマシてたりしますか? orz

以下で良かったんスね。

$ qemu-system-x86_64 -kernel linux-2.6.38/arch/x86/boot/bzImage \
 -initrd busybox-1.18.4/rootfs.img.gz \
 -append "root=/dev/ram rdinit=/bin/sh"

お蔭様で /bin/sh なプロンプトも出ました。
という事は arm なソレでは何が悪かったのかな。そもそも Android に同梱されてる arm な gccbusybox が make できねぇ、ってのが微妙なんですがorz