SSブログ

beagleboard を触ろう - u-boot ビルド [組み込みソフト]


次は u-boot のビルドです。
x-loader の時と同じく、

http://elinux.org/BeagleBoard#Source

を見ましょう。
u-boot の git リポジトリは

git://git.denx.de/u-boot.git u-boot-main

であるように書かれていますが、"Update on April 23 - 2010" という但し書きに、

http://gitorious.org/beagleboard-validation/

にアップデート版があるように書かれています。
このリンクに行ってみると、

git://gitorious.org/beagleboard-validation/u-boot.git

が u-boot のリポジトリのようです。
こちらを入手しましょう。

$ git clone git://gitorious.org/beagleboard-validation/u-boot.git u-boot↓
$ cd u-boot↓
$ git checkout --track -b omap3 origin/master↓

ビルド方法も書かれています。

$ make CROSS_COMPILE=arm-none-linux-gnueabi- mrproper↓
$ make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config↓
$ make CROSS_COMPILE=arm-none-linux-gnueabi-↓

ところが、あれれ・・。
最後のリンクのところで、↓のようなエラーメッセージが出ちゃいます。

/home/beagle/CodeSourcery/Sourcery_G++_Lite_GNU/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.2/armv4t/libgcc.a(_bswapsi2.o):(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'


いろいろ調べてみると、

http://lists.denx.de/pipermail/u-boot/2010-May/071363.html

のパッチを当てるといいみたいです。
diff --git a/arch/arm/lib/eabi_compat.c b/arch/arm/lib/eabi_compat.c
index 86eacf1..eb3e26d 100644
--- a/arch/arm/lib/eabi_compat.c
+++ b/arch/arm/lib/eabi_compat.c
@@ -16,3 +16,8 @@ int raise (int signum)
 	printf("raise: Signal # %d caught\n", signum);
 	return 0;
 }
+
+/* Dummy function to avoid linker complaints */
+void __aeabi_unwind_cpp_pr0(void)
+{
+};

↑の部分を u-boot/aeabi_unwind.patch というファイルで保存して、u-boot ディレクトリから

$ patch -p1 < aeabi_unwind.patch↓

を実行です。
この結果、arch/arm/lib/eabi_compat.c に↓のようなダミー関数が追加されます。

/* Dummy function to avoid linker complaints */
void __aeabi_unwind_cpp_pr0(void)
{
};

こんな方法でいいのか。
それではもう一度ビルドを。

今度は OK です。
u-boot.bin ができました。

それでは u-boot.bin を SD カードにコピーしてブートしてみましょう。


Texas Instruments X-Loader 1.4.4ss (Jul 17 2011 - 07:57:49)
Beagle Rev C4
Reading boot sector
Loading u-boot.bin from mmc


U-Boot 2010.03-dirty ( 7月 21 2011 - 01:21:06)

OMAP3530-GP ES3.1, CPU-OPP2 L3-165MHz
OMAP3 Beagle board + LPDDR/NAND
I2C: ready
DRAM: 0 kB
NAND: 256 MiB
*** Warning - bad CRC or NAND, using default environment


あれれ・・。
DRAM が 0 kB となっていますね。
SDRAM コントローラの初期化に失敗しているのかな・・。
おかげで Linux のブートにも失敗しちゃいます。


しょうがないので、http://elinux.org/BeagleBoard#U-Boot に書かれている方法で再チャレンジしましょう。

$ git clone git://git.denx.de/u-boot.git u-boot-main↓
$ cd u-boot-main↓
$ git checkout --track -b omap3 origin/master↓

別のリポジトリからソースコードを取ってきました。
ビルド方法は同じです。

$ make CROSS_COMPILE=arm-none-linux-gnueabi- mrproper↓
$ make CROSS_COMPILE=arm-none-linux-gnueabi- omap3_beagle_config↓
$ make CROSS_COMPILE=arm-none-linux-gnueabi-↓

今回も、無事 u-boot.bin ができました。
これを SD カードにコピーしてブートしてみましょう。

今度は RAM も 256 MB と認識されています。
Linux もちゃんとブートしますね。
液晶ディスプレイに繋いでも何も出ないのが、ちょっと難ですが・・。
angstrom のデモイメージの u-boot だと、u-boot 実行時点で液晶ディスプレイがオレンジ色になるんですけど・・・。

とりあえずですが、x-loader と u-boot をソースコードから作ることができました。
次は Linux です!


↓ ブートメッセージ

Texas Instruments X-Loader 1.4.4ss (Jul 17 2011 - 07:57:49)
Beagle Rev C4
Reading boot sector
Loading u-boot.bin from mmc


U-Boot 2011.06-00132-g74fac70 (Jul 21 2011 - 01:27:22)

OMAP3530-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 720 mHz
OMAP3 Beagle board + LPDDR/NAND
I2C: ready
DRAM: 256 MiB
NAND: 256 MiB
MMC: OMAP SD/MMC: 0
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial
Beagle Rev C4
timed out in wait_for_pin: I2C_STAT=0
I2C read: I/O error
Unrecognized expansion board: 0
Die ID #0bea0004000000000403a38103023017
Hit any key to stop autoboot: 0
SD/MMC found on device 0
reading uEnv.txt

** Unable to read "uEnv.txt" from mmc 0:1 **
reading uImage

3213120 bytes read
Booting from mmc ...
## Booting kernel from Legacy Image at 82000000 ...
Image Name: Linux-2.6.32
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3213056 Bytes = 3.1 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux.................................................................................................................................................................................................................. done, booting the kernel.
[ 0.000000] Linux version 2.6.32 (koen@dominion) (gcc version 4.3.3 (GCC) ) #2 PREEMPT Tue May 10 10:02:30 CEST 2011

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。