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とタイプして問題なく動作しています。
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 件のコメント:
コメントを投稿