SheevaPlugで遊ぼう  

2009-12-15 : この記事はMarvel社のSheevaPlug Development Kitについて書かれています

最近話題のMarvell社のSheevaPlug Development Kitを購入したので設定などのメモ。
SheevaPlugに関しては情報がネットにあふれていますのでその辺りを参照していただくとして、このページでは実際のアップデート手順などをメモしておこうと思います。Linux PCを使ってしまうと簡単なのですが、私の自宅にはありません(組み込みボードのALIXはありますが)ので、VirtualBox上のLinux環境で作業を行う方法をメインにしたいと思います。でも、Windowsだけでもできそうな感じ・・・
SheevaPlugの設定メモはネット上にいくらでも存在するので私の作業メモみたいな感じですが・・・

構成  

この記事で想定している構成は以下のものです。

内容  

私も入手して日が浅いので最低限以下のことを取り上げてみます。

シリアルコンソールでのログイン  

シリアルコンソールでのログインはWindows PCからでも行えます。

デバイスドライバの展開  

まずはデバイスドライバを用意しておきます。付属のCDまたはplugcomputer.orgからSheevaPlug_Host_SWsupportPackageWindowsHost1.2.zipをコピーして適当なディレクトリに展開します。展開するとWindowsHost/WindowsTeraTermUSBDriver.zipができるのでさらに展開します。これで作成されるCDM 2.04.16_SHEEVAディレクトリがデバイスドライバのディレクトリになります。

Windowsからの認識  

SheevaPlugをコンセントにさし、デバッグ用ポートにUSBケーブルをつなぐとWindowsで認識されます。認識されるとデバイスドライバの場所を聞いてきますので先ほどのCDM 2.04.16_SHEEVAディレクトリを選択します。

TeraTermで接続  

うまく認識できたらTeraTermのシリアルポートで接続します。

メモ途中  

jffs2イメージをループバックでマウントする  

SheevaPlugのルートファイルシステムはjffs2イメージで提供されていますが、SDカードにコピーしたかったのでループバックにマウントして展開しました。

マウント  

ubuntu-9.0.5.Release.jffs2のerasesizeは0x20000(131072)Bytesなのでマウントするときにその値を使います。よく知らなかったのですがerasesizeを適切な値にしないとファイルをまともに扱えないので注意!(jffs2を使う人には常識?)

# modprobe jffs2 <-- 環境によっては必要かも(私のVine 4.2/5.0では不要でした)
# modprobe mtdblock
# losetup /dev/loop0 ubuntu-9.0.5.Release.jffs2
# modprobe block2mtd block2mtd=/dev/loop0,131072
# mount -t jffs2 -o ro /dev/mtdblock0 /mnt/disk

アンマウント  

# umount /mnt
# rmmod block2mtd
# losetup -d /dev/loop0

SDカード上のuImageでブート  

SDカード上のuImageを読み込むにはパッチを当ててビルドされたU-Bootまたは3.4.23あたりが必要です。私は3.4.23をビルドして使いました。
plugcomputer.orgのフォーラムによると3.4.27ではSDカードからのブートではBad Data CRCエラーが出ると報告されています(私も同じ現象でした)。従って3.4.23を使う方が無難なようです。

Mervell>> setenv bootargs console=ttyS0,115200 rw root=/dev/mmcblk0p3 panic=10
Mervell>> mmcinit
Mervell>> ext2load mmc 0:1 0x0800000 /sheeva-2.6.31.8-uImage
Mervell>> bootm 0x0800000

解説  

mmcinit

SDカードデバイスを初期化する

ext2load interface dev[:part] [addr] [filename] [bytes]

Mervell>> ext2load mmc 0:1 0x0800000 /sheeva-2.6.31.8-uImage
2777768 bytes read

SDカードデバイス0のパーティション1(先頭パーティション)からsheeva-2.6.31.8-uImageをアドレス0x0800000に読み込む

bootm [addr [arg ...]]

Mervell>> bootm 0x0800000

アドレス0x0800000に格納されたアプリケーションイメージでブートする

変数  

ブートパラメータなどのメモ

NANDからLinuxを起動
bootargsrootfstype=jffs2 console=ttyS0,115200 mtdparts=orion_nand:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw root=/dev/mtdblock1 panic=10
bootcmdnand read.e 0x800000 0x100000 0x400000; bootm 0x800000
SDカードからLinuxを起動
bootargsconsole=ttyS0,115200 rw root=/dev/mmcblk0p3 panic=10
bootcmdmmcinit; ext2load mmc 0:1 0x800000 /sheeva-2.6.31.8-uImage; bootm 0x800000

カーネルモジュールの追加ビルド  

2009-12-26

SheevaPlugのuImageはhttp://sheeva.with-linux.com/sheeva/から取得可能で、DevKitに標準でついてくるuImageよりもたくさんの機能やモジュールがありますが、それでもやはり不足している場合があります。そんな場合のカーネルモジュールの追加ビルド方法をメモしておきます。

目的  

Windowsで使用するハードディスクなどをマウントしようとすると、そのままではコードページの関係で日本語が文字化けします。そのためにはcp932に対応している必要があるのですが、上記のサイトのuImageやモジュールでは残念ながら無効にされています。ファイルシステムでcp932を使うために必要なモジュールnls_cp932.koを追加ビルドしてみます。
ストレートな方法ではカーネルの再構築を行えばいいのですが、非力なSheevaPlugでビルドするので必要なモジュールのみビルドします。ちょっとしたモジュールの追加ならSheevaPlugでも現実的です。もちろん高速なクロスコンパイル環境があるなら再構築でいいと思いますが [worried]

ソースの取得  

  1. kernel.orgより必要なバージョンのカーネルソースを取得します。今回は2.6.31.8を使用しました。
  2. http://sheeva.with-linux.com/sheeva/より同じバージョンのコンフィグファイルを取得します。ここでは2.6.31.8/sheeva-2.6.31.8.configです。
  3. 必要ならpatchesディレクトリよりパッチを取得します。今回は無関係そうだったので無視しました(いいのかな?)

以上で必要なファイルがそろいました。

ビルドする  

そんなわけでSheevaPlug上でビルドします。あらかじめbuild-essentialをインストールしておきましょう。

% tar jxvf linux-2.6.31.8.tar.bz2
% cd linux-2.6.31.8
% cp sheeva-2.6.31.8.config .config  <-- 名前を変更

コピーした.configファイルのモジュール設定の部分を修正します。修正箇所は以下の通りです。

2315: # CONFIG_NLS_CODEPAGE_932 is not set  (修正前)
2315: CONFIG_NLS_CODEPAGE_932=m             (修正後)

修正後、ビルドします。

% make oldconfig
% make fs/nls/nls_cp932.ko

以上で目的のモジュールnls_cp932.koが作成されます。なお、sheeva-2.6.31.8.configを使用しないとモジュールをロードしたときにInvalid module formatと怒られてロードできないので注意してください。

ロードする  

rootになってロードします。

# /sbin/insmod nls_cp932.ko

無事読み込めたらOK。

インストール  

ちゃんとした手順があるのかもしれませんがとりあえず手動でビルドしたファイルをインストールしました。
modules.depにファイル名を追加しておくとmodprobeで読み込めるようになります。

# mkdir /lib/modules/2.6.31.8/kernel/fs/nls
# cp nls_cp932.ko /lib/modules/2.6.31.8/kernel/fs/nls/
# vi /lib/modules/2.6.31.8/modules.dep  <-- modules.depを修正
230 /lib/modules/2.6.31.8/kernel/fs/autofs/autofs.ko:
231 /lib/modules/2.6.31.8/kernel/fs/nls/nls_cp932.ko:  <-- このあたりに追加
232 /lib/modules/2.6.31.8/kernel/drivers/watchdog/softdog.ko:

以上で(多分)インストールできました。

おまけ:日本語ファイル名を含むFATのマウント  

# mount /dev/sda1 /mnt/disk -o codepage=932,iocharset=utf8

modules.depの設定をしておくと、自動でnls_cp932を読み込んでくれるので、ShiftJISの日本語ファイル名も意識せずに使えます [smile]


以上の手順を応用すれば不足しているモジュールだけをビルドして追加することが可能になります。

コメント  

何かあればコメント下さい [smile]