SH7706LSRにDebian 5.0をインストール

はじめに

8000円弱でSH3で遊べるボード、SH7706LSRDebian 5.0 (lenny)をインストールしたときのメモ。

Linuxのポーティングに関する情報は、三岩さんのページにまとまっている。また、Debian etchを動かすという話はいくつか見つかるのだけど、さすがに古いので、lennyにしたいと思い立った。結論から言うと、etchからlennyにアップデートして一応動くのだけど、何かDBが壊れているのか、Silicon Linuxで公開されているパッケージが不十分なのかわからないが、apt-getが全然機能しない。ということで、現時点ではetchを使い続ける方がお勧めである。

母艦にはMacBook Airを使った。何かとLinux環境が必要になるが、そこはVMWare Fusion上のUbuntu 11.04でカバーした。USB hubにはEthernet、シリアル、SDカードリーダがぶらさがっている。

SDカードの準備

8GBのSDHCカードを使った。基本戦略として、パーティションを3つ切り、最初はブートローダ用にFAT32、2番目はルートファイルシステム、3番目はスワップとした。Linuxローダのデフォルト設定では、カーネルコマンドライン引数に「root=/dev/shmmc2」を指定するので、2番目にルートファイルシステムを置くこと。おそらくこの設定は変更可能だと思うが、調べてない。

手順は「Linuxマシンによるメモリカードのセットアップ」に従えば問題ない。「2GB以上のメモリカードの場合はWindowsでフォーマットしてください」とあったが、Ubuntu 11.04のDisk utilityを使って、パーティショニング、フォーマットしても問題なくブートできた。fdiskの結果は次の通り。

Command (m for help): p

Disk /dev/sdb: 8011 MB, 8011120640 bytes
247 heads, 62 sectors/track, 1021 cylinders, total 15646720 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000562ad

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              62     1960191      980065    c  W95 FAT32 (LBA)
/dev/sdb2         1960192    14655497     6347653   83  Linux
/dev/sdb3        14655498    15635593      490048   82  Linux swap / Solaris

FAT32パーティション(ラベルはMES)には、「ダウンロード」ページにあるvmlinux、initrd.imgの他、Linuxローダのboot.exeをコピーする。

$ sudo cp ~/Downloads/{vmlinux,initrd.img,boot.exe} /media/MES
$ umount /media/MES

Ext3パーティション(ラベルはsh3linux)には、Silicon LinuxここからDebian Etchのベースイメージをダウンロードして、展開しておく。本当はLennyのベースイメージが欲しかったのだが、見つからなかったので、Etchをインストールし、Lennyにアップグレードすることにした。

$ curl -O http://www.si-linux.co.jp/pub/debian-sh/base/etch/debian-etch-sh3_20070713.tgz
$ sudo tar xvf debian-etch-sh3_20070713.tgz -C /media/sh3linux

あと、/etc/inittabとfstabはSH7706LSRに合わせて修正しておく。

# cp inittab initab.ORIG
# sed -e "s/ttySC0/ttySC1/g" inittab.ORIG > inittab

# cat /media/sh3linux/etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/shmmc2     /               ext3    errors=remount-ro 0       1
/dev/shmmc3     none            swap    sw              0       0

$ umount /media/sh3linux

Etchでブート

Mac OS Xからシリアルを使うときは、screenが便利。

$ sudo screen /dev/tty.usbserial-XXXX 115200

あと、Ethernetだが、わざわざハブを繋ぐのは面倒だったので、MBA無線LAN経由で外に出ることにした。BSDのようにipfwコマンドでいろいろ設定するのかなと思ったら、System PreferencesのInternet Sharingがipfwのフロントエンドになっているようで、「Share your connection from」のプルダウンで「AirPort」を選択し、「To computer using」のチェックボックスで「USB Ethernet」にチェックを入れればよいだけだった。簡単、簡単。

ブートローダであるMESの改行コードはCR+LRなので、表示がうまくいかないが、気にせず次のように入力すれば、Linuxが起動するはず。

MES> mount mmc0
MES> cd /mmc0
MES> boot.exe

modprobe時に以下のようなエラーメッセージが表示される。気になるなら、modules.depという空ファイルを用意しておけばメッセージは消える。

modprobe: FATAL: Could not load /lib/modules/2.6.28.10/modules.dep: No such file or directory

Lennyにアップグレード

特に変わったことをする必要はないので、Debianの「リリースノート」を参照して進める。ただし、aptitudeのパッケージはないようだ。

/etc/apt/sources.listを編集する。

# cat /etc/apt/sources.list
deb http://www.si-linux.co.jp/pub/debian-sh lenny main contrib non-free
deb-src http://ftp.debian.org/debian/       lenny main contrib non-free
# aptitude update
# aptitude install aptitude apt dpkg
# apt-get dist-upgrade

時間はかかるが、無事Lennyにアップグレードできた。一点注意が必要なのは、/etc/securettyにttySC1を追加しないとrootでログインできなくなることだ。

開発環境など

クロス開発用のツールチェインや、カーネルパッチも上記のダウンロードページから入手できる。

簡単なデバイスドライバのひな形を書いてみた。ソースはこちら。ledはLEDを光らせるだけのキャラクタデバイス。led2はTMU(タイマ管理ユニット)を使って周期的に点滅させるもの。SH7706は三つのTMUを持っているが、TMU2は使ってないみたいなので、割込みハンドラを登録してみた。

コンパイルするときは、KERNELDIRに適切なパスを指定すること。

$ make KERNELDIR=../../linux-2.6.28.10 CROSS_COMPILE=sh3-linux- ARCH=sh

謝辞

Linux kernelのポーティングや各種ツールを公開されている三岩さん、Debianパッケージのリポジトリを公開されているSilicon Linuxの海老原さんに感謝!