2012/10/09

Ubuntu 12.04 LTSでPandaBoard ES用のu-boot/MLOイメージを作成してみた

Pandaboard ESを入手したのですが、どうも配布されているu-boot.img/MLO/uImageではうまく起動させることができませんでした。

手順は公開されているので、Ubuntu 12.04 LTSをホストにしてクロスコンパイル環境を使ってARMEL用のバイナリを作成してみました。

環境

使用している機材などは次のようになっています。

  • 対象: PandaBoard ES Rev.B1
  • ホストOS: Ubuntu 12.04 LTS 64bit版
  • シリアルケーブル: Arvel SRC06-USB (FTDIチップ使用)
  • SDカード: TOSHIBA製 Class6 SDHC 4GB (いわゆる白東芝カード)
  • rootfsイメージ等: L24.9-PandaBoard_validation_environment.tar.gz
  • 差し替え用MLO/u-boot.imgファイル: origin/Linaro-u-boot-2012.04.2

基本的なインストールの流れ

本家からセットアップのインストラクションを探して、Linux Minimum (Pandaboard Minimal-FS)に辿り着きました。

L24.9-PandaBoard_validation_environment.tar.gzはここで入手できたのですが、X-Loaderはhangしてしまいました。

PandaBoard ES uboot howtoという文書に従ったのですが、少しだけ修正する必要がありました。

$ mkdir pandaboard-es
$ cd pandaboard-es
$ git clone git://git.linaro.org/boot/u-boot-linaro-stable.git
$ cd u-boot-linaro-stable
$ git checkout -b pandaboard-es origin/Linaro-u-boot-2012.04.2
$ export CROSS_COMPILE=arm-linux-gnueabi-
$ make omap4_panda_config
$ make

変更したのは、2011.12のブランチを取得するようになっていたところを最新の2012.04に変更し、CROSS_COMPILE環境変数に指定する文字列から-noneを削除しました。

これをしない場合に、makeが正常に終了しない問題が発生しています。

ARM用gccをUbuntu 12.04 LTSに導入する

手元のUbuntu 12.04 LTSにarm用のgcc環境を構築するには、次のコマンドを実行します。

$ sudo apt-get install gcc-arm-linux-gnueabi

arm用のgcc-4.6が導入されています。 これで、コンパイルに必要なものはほぼ揃うはずです。

成果物の場所

目立ちませんが、$ makeを実行したカレントディレクトリに必要なファイルが作成されています。

  • MLO
  • u-boot.img

この2つのファイルをSDカード上に作成したFAT32領域に書き込めば、カードをPandaboardに移してテストです。

そういえば、配布されているイメージでは、u-boot.imgではなく、u-boot.binが入っていたんですよね。

どっちにしろMLOが見つからないらしく、X-Loader 1.41がエラーを出すので、u-bootまで処理が進んでいないと思われるので、関係ありませんが…。

確認に必要な環境

HDMIで液晶ディスプレイなどに出力をするにしても、まずはシリアル経由で接続しないとX-Loaderやら起動時の画面出力やらが分かりません。

Linux上で動作するUSBシリアルケーブルは内部にFTDIのチップを積んでいるものがお勧めです。

pandaboardのシリアルに接続する場合の、kermitの設定

次の設定を~/.kermrcに入れていて、kermit起動後にC-Kermit> connectとタイプして問題なく動作しています。

Ubuntu 12.04 LTS上の~/.kermrcファイルの全体

set port /dev/ttyUSB0
set speed 115200
set carrier-watch off

手元のPandaboardからの出力は、こんな感じになっています。

起動時のコンソール出力の抜粋

U-Boot SPL 2012.04.01 (Oct 09 2012 - 13:49:33)
OMAP4460 ES1.1
OMAP SD/MMC: 0
reading u-boot.img
reading u-boot.img

U-Boot 2012.04.01 (Oct 09 2012 - 13:49:33)

CPU  : OMAP4460 ES1.1
Board: OMAP4 Panda
I2C:   ready
DRAM:  1 GiB
MMC:   OMAP SD/MMC: 0
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   No ethernet found.
checking for preEnv.txt
reading preEnv.txt

** Unable to read "preEnv.txt" from mmc 0:1 **
Hit any key to stop autoboot:  0
reading uEnv.txt

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

** Unable to read "boot.scr" from mmc 0:1 **
reading uImage

2665748 bytes read
Booting from mmc0 ...
## Booting kernel from Legacy Image at 82000000 ...
   Image Name:   Linux-2.6.35-g6d019da-dirty
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2665684 Bytes = 2.5 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.35-g6d019da-dirty (danders@ccd-dev) (gcc version 4.3.3 (GCC) ) #15 SMP PREEMPT Wed Sep 8 15:33:37 CDT 2010
CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: OMAP4430 Panda Board
Memory policy: ECC disabled, Data cache writealloc
OMAP4430 ES2.0
....

さいごに

まだgettyが最後に起動しないので、設定としてはいろいろ足りていないのですが、とりあえず起動するようにはなりました。

ロボットとか作っている人達をテレビでみるとこのカードを積んでたりしますよね。 サーボみたいに電流を流すものは扱わないのですが、ホームセンターなんかでバイク用の小型12Vバッテリーを眺めると、いろいろ夢は広がります。

まぁ12Vを安定的に得るのと充電するので、いろいろ大変そうですけどね…。

それでも携帯電話向けにソーラーパネルが付いたリチウム電池は普通に売っているので、そのままでは実用的に使えないでしょうけど、そんなに手間をかけなくてもモバイルでは運用できるのかな…。

0 件のコメント: