ラベル pandaboard の投稿を表示しています。 すべての投稿を表示
ラベル pandaboard の投稿を表示しています。 すべての投稿を表示

2012/10/09

シリアルから扱えるよう、Pandaboardのgettyを有効にしてみた

前回まででPandaBoardが起動するようにはなったのですが、シリアルの通信は途絶えてしまいシェルが起動するという事にはなりませんでした。

HDMIは使わないので、サーバーとして扱えるようにネットワークとシリアルを有効にするところまでです。

環境

ベースにしているrootfsは前回と同様にL24.9-PandaBoard_validation_environment.tar.gzです。

MLOとu-boot.imgをgitから準備をして起動するようにはなりました。

現状

で、起動はするものの、runlevelを聞いてきたところで数字は打つものの処理が止まってしまいます。

runleveの入力後に処理が停止する様子


...
Enter runlevel: 2
INIT: Entering runlevel: 2
INIT: no more processes left in this runlevel
...

まぁgettyを起動させれば良いのでしょうと、いうわけでSDカードをUbuntu 12.04 LTSに差し、認識された/dev/sdd2を/mnt/mmc2にマウントして、/mnt/mmc2/etc/inittabファイルを編集したりしました。

ここら辺の強調したデバイス名やらは環境に依存して変化するので読み替えて下さい。

/etc/inittabを変更して、ちょっとだけ改善

ちょっとだけ進んだところ


...
Enter runlevel: 2
INIT: Entering runlevel: 2

.-------.                                           
|       |                  .-.                      
|   |   |-----.-----.-----.| |   .----..-----.-----.
|       |     | __  |  ---'| '--.|  .-'|     |     |
|   |   |  |  |     |---  ||  --'|  |  |  '  | | | |
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'
                -'  |
                '---'

The Angstrom Distribution (none) ttyO2

Angstrom 2010.4-test-20100406 (none) ttyO2

(none) login: root
Login incorrect

よくよくみると、いろいろマニュアルに問題があるようなので、そこら辺をまとめておきます。

inittabファイルの書式について

Minimal-FSの/etc/inittabは次のようになっていました。

null::sysinit:/bin/mount -t proc proc /proc
null::sysinit:/bin/mount -t sysfs sysfs /sys
null::sysinit:/bin/mount -t usbfs usbfs /proc/bus/usb
null::sysinit:/bin/mount -o remount,rw /
null::sysinit:/etc/init.d/udev

ttyO2::respawn:/bin/sh

ここで最後の行でtty02をtty2のように数字を除いて指定する必要がありました。

ここを修正すると起動後にrunlevelを入力させた後にシェルが起動します。

まぁMinimal-FSはapt-getもないので、本当にどうしようもないのですが、とりあえずこれでrootでログインする事が可能になります。

別の文書ではboot.scrでカーネルパラメータを指定するような指定もありましたが、デフォルトのkernelパラメータは次のようになっています。

kernelパラメータ

Kernel command line: console=ttyO2,115200n8 vram=16M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait

もしこのパラメータを変更する必要があれば、mkimageコマンドを使ってboot.scrファイルを生成します。 今回は試したものの必要ないので、boot.scrファイルは使っていません。

FAQによれば、コマンドラインは次のようになっています。

http://omappedia.org/wiki/PandaBoard_FAQより抜粋


Step-1: create a boot.scr.txt like:
fatload mmc 0 0x80300000 uImage
echo Booting from mmc0 ...
setenv bootargs console=ttyO2,115200n8 noinitrd init=/sbin/init root=/dev/mmcblk0p2 rootwait rw loglevel=8
bootm 80300000

Step-2: run:
mkimage -A arm -T script -O linux -C none -a 0 -e 0 -n "boot.scr" -d boot.scr.txt boot.scr

mkimageコマンドは手元のUbuntu 12.04 LTS上で実行していますが、 ここら辺はuboot-mkimage-0.4当りをキーワードに検索すれば関連する情報が探せるかと思います。

さいごに

rootでログインができたので、必要そうな情報をコピーしておきます。

ネットワークカード
# ip addr
1: lo: <LOOPBACK> mtu 16436 qdisc noop 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: usb0: <BROADCAST,MULTICAST> mtu 1492 qdisc noop qlen 1000
    link/ether 22:17:88:b7:fc:59 brd ff:ff:ff:ff:ff:ff
/proc/cpuinfo

この情報をみるとOMAP4460としては認識されていないのかなと思えます。 あとでちゃんとしたkernelを使って検証することにしましょう。

# cat /proc/cpuinfo 
Processor       : ARMv7 Processor rev 10 (v7l)
processor       : 0
BogoMIPS        : 1396.94

processor       : 1
BogoMIPS        : 1363.33

Features        : swp half thumb fastmult vfp edsp thumbee neon vfpv3 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x2
CPU part        : 0xc09
CPU revision    : 10

Hardware        : OMAP4430 Panda Board
Revision        : 0020
Serial          : 0000000000000000

さいごに

ここら辺でMinimal-FSは止めて、Ubuntu 12.04 (precise) を動作させてみようと思います。

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を安定的に得るのと充電するので、いろいろ大変そうですけどね…。

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