SheevaPlugで遊ぼう
2009-12-15 : この記事はMarvel社のSheevaPlug Development Kitについて書かれています
- 作成中 -- もうちょっとまとまったら徐々に再構成します
最近話題のMarvell社のSheevaPlug Development Kitを購入したので設定などのメモ。
SheevaPlugに関しては情報がネットにあふれていますのでその辺りを参照していただくとして、このページでは実際のアップデート手順などをメモしておこうと思います。Linux PCを使ってしまうと簡単なのですが、私の自宅にはありません(組み込みボードのALIXはありますが)ので、VirtualBox上のLinux環境で作業を行う方法をメインにしたいと思います。でも、Windowsだけでもできそうな感じ・・・
SheevaPlugの設定メモはネット上にいくらでも存在するので私の作業メモみたいな感じですが・・・
- OpenOCDでU-Bootを更新 -- 2009-12-16 (水) 21:51:13
- U-Bootをビルドする -- 2009-12-16 (水) 21:42:49
- 環境変数 -- 2009-12-28 (月) 09:46:34
構成
この記事で想定している構成は以下のものです。
- 対象とする読者
- 最低限のLinuxの知識がある遊び人
- 必要なハードウェア
- それなりのWindows PC (私の場合はPentium4 3.2GHz / 1GB / WinXP)
- Linuxがある方が何かと便利ですが
内容
私も入手して日が浅いので最低限以下のことを取り上げてみます。
- シリアルコンソールでのログイン -- TeraTermを使います
- U-Bootのアップデート -- LinuxからOpenOCDにより更新します
- カーネルのアップデート -- ネットワーク経由で更新します
シリアルコンソールでのログイン
シリアルコンソールでのログインは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を起動 | |
---|---|
bootargs | rootfstype=jffs2 console=ttyS0,115200 mtdparts=orion_nand:0x400000@0x100000(uImage),0x1fb00000@0x500000(rootfs) rw root=/dev/mtdblock1 panic=10 |
bootcmd | nand read.e 0x800000 0x100000 0x400000; bootm 0x800000 |
SDカードからLinuxを起動 | |
bootargs | console=ttyS0,115200 rw root=/dev/mmcblk0p3 panic=10 |
bootcmd | mmcinit; 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でも現実的です。もちろん高速なクロスコンパイル環境があるなら再構築でいいと思いますが
ソースの取得
- kernel.orgより必要なバージョンのカーネルソースを取得します。今回は2.6.31.8を使用しました。
- http://sheeva.with-linux.com/sheeva/より同じバージョンのコンフィグファイルを取得します。ここでは2.6.31.8/sheeva-2.6.31.8.configです。
- 必要なら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の日本語ファイル名も意識せずに使えます 。
以上の手順を応用すれば不足しているモジュールだけをビルドして追加することが可能になります。
コメント
何かあればコメント下さい 。
- modules.depにモジュール名を追加するには # depmod -a でOKです。 -- 2010-02-21 (日) 21:06:33
- ありがとうございます。何かコマンドがあるはずだと思ってましたが、助かりました(^^) -- どぶお 2010-02-22 (月) 13:45:14