T-SH7706LANにUSBポートを増設


2.SH3-Linuxの組み込み編

ここでは、SH3-Linuxのカーネルをカスタマイズし、SL811-HST用のドライバを組み込む手順について紹介します。
なお、PCにはLinux(x86) をインストールしていることを前提としており、特に断り書きが無い限り、PCのLinux上でのコマンド操作方法を示しています。

○SH3-Linuxの組み込み

MES(Micro embeded System)を参照し、T-SH7706LANへSH3-Linuxをインストールします。

ただ、このままではSL811-HSTは有効になりませんので、続く手順でカーネルをカスタマイズし、ドライバを組み込む必要があります。

○カーネルのコンパイル環境の設定

SL811-HST用のドライバや、USBメモリ/キーボードといった一般的なUSBデバイス用のドライバは、オリジナルカーネルにオプションとして含まれています。

従って、カーネルをコンフィギュレーションし、コンパイルすることで組み込むことができます。

まず、h83069fのページを参照し(有り難うございます)、PCにクロスコンパイルのための環境をセットアップします。
カーネルソースとパッチは、MES(Micro embeded System)からダウンロードすることができます。

カーネルソースをコンパイルすると、makeを実行したディレクトリに直下に、「vmlinux」というファイルが作成されます。
これを、SDカードの1番目のパーティション(FATでフォーマットされているはず)に、上書きコピーします。

そして、T-SH7706/LANを再起動し、新しいカーネルで起動することを確認できれば、カーネルソースのコンパイル環境は完成です。

○カーネルのコンフィギュレーション

カーネルのコンパイル環境が整ったら、SL811-HST用のドライバと、一般的と思われるUSBデバイス用のドライバを組み込みます。

1)カーネルのコンフィギュレーション変更

まず、カーネルのコンフィギュレーションを変更し、SL811-HST用のドライバや、各種USBデバイス用のドライバを組み込みます。

カーネルソースを展開したディレクトリで、以下のコマンドを入力します。

 $ make ARCH=sh menuconfig 

カーネルのコンフィギュレーションを行うためのメニューが表示されますので、以下の項目にチェックマーク(<*>がチェック状態です)を入れます。

項目を選び、スペースキーを押すと、< >→<*> 又は、< >→<M>→<*>と切り替わります。

Device Drivers --->
 USB support --->
  < > ISP116X HCD support ←ここの「*」を外し…
  <*> SL811HS HCD support ←代わりにここに「*」を入れる
  <*> USB Mass Storage support
  <*> USB Human Interface Device (full HID) support
  [*] HID input layer support

また、USBメモリを使用するためにはSCSIドライバも必要ですので、これも有効にしておきます。

Device Drivers --->
 SCSI device support --->
  [*] legacy /proc/scsi/ support
  <*> SCSI disk support

2) システムのセットアップルーチンの変更

カーネルソースを展開したディレクトリ内の、以下のファイルをテキストエディタで開きます。

arch/sh/boards/shmin/setup.c

このファイルには、カーネルが起動する初期の段階で実行されるルーチンの他、追加したハードウェアに関する情報が書かれています。 ここでは、SL811-HSTのドライバに渡すパラメータを設定します。

まず、I/Oアドレスと割り込みポートをターゲットに合わせ込みます。
今回は、SL811-HSTをCS5領域に接続し、割り込みポートはIRQ0を使用しますので、赤字の部分のように変更します。

/* ←ここのコメントも忘れずに外します!
static struct resource sl811_resources[] = {
    [0] = {
        .start = 0xb4000000,
        .end   = 0xb4000000,
        .flags = IORESOURCE_MEM,
    },
    [1] = {
        .start = 0xb4000002,
        .end   = 0xb4000002,
        .flags = IORESOURCE_MEM,
    },
    [2] = {
        .start = IRQ0_IRQ, ←割り込みポート(今回は変更無し)
        .flags = IORESOURCE_IRQ,
    },
};
...
*/

上の部分はコメントアウトされており、初期化されないようになっているため、コメントを外しておきます。

3)カーネルの再コンパイル

PCでカーネルを再コンパイルします。

 $ make clean
 $ make ARCH=sh CROSS_COMPILE=sh3-linux-

コンパイルに成功したら、カーネルのコンパイル環境の設定の手順で新しいカーネルをインストールします。

4)デバイスファイルの作成

動作確認のためのデバイスファイルを作成します。
ここでは、PC上のLinuxを使い、ルート権限で作業を行います。

まず、SH3-LinuxをインストールしたSDカードを/mnt2にマウントします。
(mnt2ディレクトリは既に作成してあることを前提にしています)

 # mount /dev/sda2 /mnt2

次にデバイスファイルを作成します。

 # mknod /mnt2/dev/sda b 8 0
 # mknod /mnt2/dev/sda1 b 8 1
 # mknod /mnt2/dev/sda2 b 8 2
 # mknod /mnt2/dev/sda3 b 8 3
 # mknod /mnt2/dev/sdb b 8 16
 # mknod /mnt2/dev/sdb1 b 8 17
 # mknod /mnt2/dev/sdb2 b 8 18
 # mknod /mnt2/dev/sdb3 b 8 19

最後に、SDカードをアンマウントします。

 # umount /mnt2

○USBデバイスの動作確認

いよいよ、SL811-HSTのドライバを組み込んだSH3-Linuxを起動してみます。

SH3-Linuxの起動で、以下のメッセージが追加されていれば、とりあえずSL811-HSTが正しく認識されていることになります。

sl811: driver sl811-hcd, 19 May 2005
sl811-hcd sl811-hcd: SL811HS v1.5
sl811-hcd sl811-hcd: new USB bus registered, assigned bus number 1
sl811-hcd sl811-hcd: irq 32, io mem 0xb4000000
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
Initializing USB Mass Storage driver...
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usbcore: registered new driver usbhid
drivers/usb/input/hid-core.c: v2.01:USB HID core driver

起動後、USBメモリ(FAT/FAT32でフォーマットされているもの)を装着してみます。
USBメモリを装着すると、コンソールには以下のようなメッセージが表示されるはずです。

usb 1-1: new full speed USB device using sl811-hcd and address 2
scsi0 : SCSI emulation for USB Mass Storage devices
Vendor: BUFFALO Model: USB Flash Disk Rev: 4000
Type: Direct-Access ANSI SCSI revision: 00
SCSI device sda: 3963904 512-byte hdwr sectors (2030 MB)
sda: Write Protect is off
sda: assuming drive cache: write through
SCSI device sda: 3963904 512-byte hdwr sectors (2030 MB)
sda: Write Protect is off
sda: assuming drive cache: write through
sda: sda1
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0

そして、SH3-Linuxのコンソールから以下のコマンドを入力し、マウントしてみます。

 # mount /dev/sda1 /mnt
 # ls /mnt

これでUSBメモリの中身のファイルが一覧表示されるとOKです。
アンマウントするには、以下のコマンドを入力します。

 # umount /mnt1

ここまで成功していれば、あとは使い方次第ということになります(*^_^*)

以上で、SH3-Linuxの組み込み編は終了です。


[戻る]