Kishima's Hateda log

はてなダイアリー記事の保管庫

BeagleBoard xMと戯れる(4)


今後のことも考えて、空いてたPC(DellPentium D/メモリ 1GB)にUbuntu64bit版をインストールして、実機ビルド環境を作ってみた。
そしてSolaさんの手順でビルドしてみたところ、予想しなかったエラーが。

kishima@Ubuntu64:~/android/xmbeagle2/OHA-Android-2.3_r1.0/kernel/beagleboard-ti$ cd ../../kishima@Ubuntu64:~/android/xmbeagle2/OHA-Android-2.3_r1.0$ export ANDROID=$PWD
kishima@Ubuntu64:~/android/xmbeagle2/OHA-Android-2.3_r1.0$ cd kernel/beagleboard-ti/
kishima@Ubuntu64:~/android/xmbeagle2/OHA-Android-2.3_r1.0/kernel/beagleboard-ti$ make ARCH=arm CROSS_COMPILE=$ANDROID/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- omap3_beagle_android_defconfig
#
# configuration written to .config
#
kishima@Ubuntu64:~/android/xmbeagle2/OHA-Android-2.3_r1.0/kernel/beagleboard-ti$ make ARCH=arm CROSS_COMPILE=$ANDROID/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- uImage
make: /home/kishima/android/xmbeagle2/OHA-Android-2.3_r1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: コマンドが見つかりませんでした
scripts/kconfig/conf -s arch/arm/Kconfig
make: /home/kishima/android/xmbeagle2/OHA-Android-2.3_r1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: コマンドが見つかりませんでした  
  CHK     include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' は更新済みです  
  CHK     include/linux/utsrelease.h  
  SYMLINK include/asm -> include/asm-arm  
  CC      kernel/bounds.s
/bin/sh: /home/kishima/android/xmbeagle2/OHA-Android-2.3_r1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc: not found
make[1]: *** [kernel/bounds.s] エラー 127
make: *** [prepare0] エラー 2

ファイルは存在しているのに、実行すると存在しないと言われてしまう。困った。もう少し調べてみます。

kishima@Ubuntu64:~/android/xmbeagle2/OHA-Android-2.3_r1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin$ ll
合計 124184
drwxr-xr-x  2 kishima kishima     4096 2011-03-06 12:07 ./
drwxr-xr-x 10 kishima kishima     4096 2011-03-06 11:25 ../
-rwxr-xr-x  1 kishima kishima  2339429 2011-03-06 11:25 arm-eabi-addr2line*
-rwxr-xr-x  1 kishima kishima  2471510 2011-03-06 11:25 arm-eabi-ar*
-rwxr-xr-x  1 kishima kishima  3716020 2011-03-06 11:25 arm-eabi-as*
-rwxr-xr-x  1 kishima kishima   473358 2011-03-06 11:25 arm-eabi-c++*
-rwxr-xr-x  1 kishima kishima  2318761 2011-03-06 11:25 arm-eabi-c++filt*
-rwxr-xr-x  1 kishima kishima   468814 2011-03-06 11:25 arm-eabi-cpp*
-rwxr-xr-x  1 kishima kishima   473358 2011-03-06 11:25 arm-eabi-g++*
-rwxr-xr-x  1 kishima kishima   467559 2011-03-06 11:25 arm-eabi-gcc*
-rwxr-xr-x  1 kishima kishima   467559 2011-03-06 11:25 arm-eabi-gcc-4.4.3*
-rwxr-xr-x  1 kishima kishima    16707 2011-03-06 11:25 arm-eabi-gccbug*
-rwxr-xr-x  1 kishima kishima   227656 2011-03-06 11:25 arm-eabi-gcov*
-rwxr-xr-x  1 kishima kishima 13079824 2011-03-06 11:25 arm-eabi-gdb*
-rwxr-xr-x  1 kishima kishima 13079921 2011-03-06 11:25 arm-eabi-gdbtui*
-rwxr-xr-x  1 kishima kishima  2742133 2011-03-06 11:25 arm-eabi-gprof*
-rwxr-xr-x  1 kishima kishima 29756517 2011-03-06 11:25 arm-eabi-ld*
-rwxr-xr-x  1 kishima kishima  3220485 2011-03-06 11:25 arm-eabi-ld.bfd*
-rwxr-xr-x  1 kishima kishima 29756517 2011-03-06 11:25 arm-eabi-ld.gold*
-rwxr-xr-x  1 kishima kishima  2372740 2011-03-06 11:25 arm-eabi-nm*
-rwxr-xr-x  1 kishima kishima  2879086 2011-03-06 11:25 arm-eabi-objcopy*
-rwxr-xr-x  1 kishima kishima  3216323 2011-03-06 11:25 arm-eabi-objdump*
-rwxr-xr-x  1 kishima kishima  2471541 2011-03-06 11:25 arm-eabi-ranlib*
-rwxr-xr-x  1 kishima kishima   570751 2011-03-06 11:25 arm-eabi-readelf*
-rwxr-xr-x  1 kishima kishima  2919804 2011-03-06 11:25 arm-eabi-run*
-rwxr-xr-x  1 kishima kishima  2364036 2011-03-06 11:25 arm-eabi-size*
-rwxr-xr-x  1 kishima kishima  2340995 2011-03-06 11:25 arm-eabi-strings*
-rwxr-xr-x  1 kishima kishima  2879085 2011-03-06 11:25 arm-eabi-strip*
-rw-r--r--  1 kishima kishima        4 2011-03-06 12:07 temp
kishima@Ubuntu64:~/android/xmbeagle2/OHA-Android-2.3_r1.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin$ ./arm-eabi-gcc
bash: ./arm-eabi-gcc: そのようなファイルやディレクトリはありません


原因が分かりました。32bit用ライブラリが不足していたことが原因でした。tetsu-kobaさんの記事に救われました。ありがとうございます。
下記をインストールすれば上手くいきました。

$ sudo apt-get install gcc-multilib g++-multilib ia32-libs
$ sudo apt-get install lib32z1-dev lib32ncurses5-dev

上手くいったかと思いきや、libreadline.soがincompatibleというエラー発生。

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libreadline.so when searching for -lreadline

こちらを参考に、追加でこれも必要。

$ sudo apt-get install lib32readline5-dev 

mkimageがない。

$ sudo apt-get install uboot-mkimage

できた、と思って動かしてみると、initの処理で"exec format error" が各種実行ファイルで発生。んー、これは何がいけないんだろう?