Linux Driver Setup Guide for REX-CF03 25/Aug./2000 RATOC Systems,Inc. ------------------------------------------------------------------ ■はじめに 本ドキュメントは REX-CF03 を Linux上で動作させる手順を説明して います。 Linux における USB の本格的なサポートは、kernel 2.3 からで現行 Kernel 2.2.x では、試験的に USBキーボードと USBマウスがサポート されているだけです。 したがって、REX-CF03等のUSBストレージデバイス用モジュールを別途 追加する必要があります。 本ドキュメントでは Redhat6.2 および Laser5 Linux 6.2 でのこの USBをサポートするモジュールを追加する手順を例としています。 これらのディストリビューションでの Kernel の Version は 2.2.14 となっています。 Redhat6.2 および Laser5 Linux 6.2 で REX-CF03 を使用する場合、 下記の手順でUSB 用の各ドライバをコンパイルして登録する必要があ ります。 1. BackPortパッチ 2. USB Storage モジュールの CF03用 への変更 3. 各USBモジュールの作成と確認 これらの作業を行うにあたって、Linux での kernal および module の 開発環境がセットアップされている必要があります。セットアップ方法 については、各ディストリビューションの販売元(ディストリビュータ) にお問い合わせください。 また、あらかじめ ROOT ユーザでログインしてください。 ■ BackPortパッチ 【 Step1 】パッチファイルのダウンロード Webサイト www.linux-usb.org に Backport 2.4 USB code to 2.2 kernels への Link があり、その Link 先からダウンロードできます。 今回の確認では、usb-2.4.0-test2-pre2-for-2.2.16-v3.diff.gz を使用しました。 【 Step2 】パッチの実行 # cd /usr/src/linux # gzip -dc ../usb-2.4.0-test2-pre2-for-2.2.16-v3.diff.gz | patch -p1 パッチの実行途中で以下のメッセージが表示されます。 | diff -urN linux-2.2.16/arch/alpha/config.in linux/arch/alpha/config.in | --- linux-2.2.16/arch/alpha/config.in Mon Jun 19 11:26:22 2000 | +++ linux/arch/alpha/config.in Mon Jun 19 11:37:08 2000 File to patch: Enter を押すと " Skip this patch?[y] " と表示されるので y を押してスキップ させます。 /linux/drivers/char/cpia.c と /linux/drivers/char/cpia_pp.c についても 同様に表示されるのでスキップさせます。 また、以下のメッセージが表示されたら The next patch would detect the file include/linux/cpia.h which does not exist! Assume -R?[n] y を押して作業を進めます。 パッチが終了したら、次のコマンドを実行します。 # make distclean 最後に /usr/src/linux/arch/i386/config.in ファイルの usb モジュールに関する 箇所を確認します。 このファイルにある以下の記述が有効となっている必要があります。 source drivers/usb/Config.in この行の先頭が # でコメントになっている場合は、 # を削除してこの行を有効にし ておいてください。 ■ USB Storage モジュールの CF03用 への変更 usb-storage.c を編集します。変更は全部で3箇所あります。 【 Step1 】invoke_transport 関数への追加 ○編集前 if ((us->protocol == US_PR_CB) && (result == USB_STOR_TRANSPORT_GOOD) && ((srb->sense_buffer[2] & 0xf) == 0x0)) srb->sense_buffer[0] = 0x0; } invoke_transport の最後に、以下の-->部分の13行を追加します。 ○編集後 if ((us->protocol == US_PR_CB) && (result == USB_STOR_TRANSPORT_GOOD) && ((srb->sense_buffer[2] & 0xf) == 0x0)) srb->sense_buffer[0] = 0x0; --> /* Some device need the time for setup media. */ --> if ((us->protocol == US_PR_BULK) && --> (srb->sense_buffer[0] == 0x70) && --> ((srb->sense_buffer[2] & 0xf) == 0x2) ) { // Not ready --> /* 3A - Medium not present */ --> if ((srb->sense_buffer[12] == 0x3a) || --> /* 0401 - in progress of becomming ready */ --> (srb->sense_buffer[12] == 0x04 && --> srb->sense_buffer[13] == 0x01) ) { --> srb->result = srb->result | (DID_ERROR << 16); --> srb->allowed = 1000; // Max retry count 1000 --> } --> } } samples/redhat6-x の part-1.c を参考にしてください。 【 Step2 】 us_unsual_dev_list[] への追加 デバイスリストの中に REX-CF03 を登録しておきます。 ○編集前 { 0x07af, 0x0005, 0x0100, "Microtech USB-SCSI-HD50", US_SC_SCSI, US_PR_BULK, US_FL_ALT_LENGTH}, { 0x0000, 0x0000, 0x0, "", 0, 0, 0} firmware のバージョンまで確認が行われるため、us_unsual_dev_list の最後に、 CF03の ver1.00, 1.01, 1.02 として -->でマークしている以下の9行を追加します。 ○編集後 { 0x07af, 0x0005, 0x0100, "Microtech USB-SCSI-HD50", US_SC_SCSI, US_PR_BULK, US_FL_ALT_LENGTH}, --> { 0x0584, 0x0001, 0x0100, --> "RATOCSystems,Inc. USB Compact Flash Adapter", US_SC_SCSI, --> US_PR_BULK, US_FL_SINGLE_LUN | US_FL_ALT_LENGTH | US_FL_START_STOP}, --> { 0x0584, 0x0001, 0x0101, --> "RATOCSystems,Inc. USB Compact Flash Adapter", US_SC_SCSI, --> US_PR_BULK, US_FL_SINGLE_LUN | US_FL_ALT_LENGTH | US_FL_START_STOP}, --> { 0x0584, 0x0001, 0x0102, --> "RATOCSystems,Inc. USB Compact Flash Adapter", US_SC_SCSI, --> US_PR_BULK, US_FL_SINGLE_LUN | US_FL_ALT_LENGTH | US_FL_START_STOP}, { 0x0000, 0x0000, 0x0, "", 0, 0, 0} samples/redhat6-x の part-2.c を参考にしてください。 【 Step3 】 BULK RESET 発行の追加 ○編集前 /* now register - our detect function will be called */ ss->htmplt.module = THIS_MODULE; scsi_register_module(MODULE_SCSI_HA, &(ss->htmplt)); csi_register を呼び出しの前に -->部分の3行を追加します。 ○編集後 /* now register - our detect function will be called */ ss->htmplt.module = THIS_MODULE; --> /* some device need bulk-reset process */ --> if (ss->protocol == US_PR_BULK) --> ss->transport_reset(ss); /* BULK RESET */ scsi_register_module(MODULE_SCSI_HA, &(ss->htmplt)); samples/redhat6-x の part-3.c を参考にしてください。 ■ USB用kernel と USB用モジュールの作成 【 Step1 】menuconfig # cd /usr/src/linux # make menuconfig Code maturity level options [*] Prompt for development and/or incomplete code/drivers を有効にします。これを有効にしないと以下の選択ができません。 < > Support for USBを選択し、スペースキーを押して Support for USBに変更すると USB に関する詳細項目が表示 されます。 Support for USB [*] USB verbose debug messages --- Miscellaneous USB device filesystem [*] Preliminary USB device filesystem --- USB Controllers UHCI (Intel PIIX4, VIA, ...) support UHCI Alternate Driver (JE) support OHCI (Compaq, iMacs, Opti, Sis, Ali, ...) support .... USB Mass Storage support (EXPERIMENTAL) 上記設定が終ったら を選択して最初の画面まで戻ります。 そして、 を選択すると Do you wish to save your new kernel configuration ? と表示されるので、 を選択します。 次に、以下のコマンドを実行します。 # make dep 【 Step3 】kernel の再構築 make を実行して kernel を再構築します。 # make bzImage 【 Step4 】module の作成 make を実行して usb のモジュールを作成します。 # make modules modules_install 【 Step5 】kernel の変更 作成された kernel から起動するように設定します。 # cp arch/i386/boot/bzImage /boot/. Systems.map を新しい kernel 用に入れ替えます。 # cp System.map /boot/System.map-usb # cd /boot # rm System.map # ln -s System.map-usb System.map 【 Step6 】lilo の変更と reboot /etc/lilo/conf に usb用の kernel のエントリを追加します。 ここでは、例としてエントリを linux-usb とすることとします。 lilo を実行します。 # lilo Added linux Added linux-usb* Added dos 更新した情報を有効にするため、システムを再起動します。 # reboot LILO boot: loading linux-usb.... システム起動後、depmod を1回だけ実行します。 # depmod -av ■ USB モジュール起動の確認 # modprobe usbcore # modprobe usb-uhci ( modprobe usb-ohci) usb-uhci.c : Detected 2 ports # modprobe usb-storage Redhat6.2 では、modprobe を実行すると以下のメッセージが表示されますが、 特に問題はありません。 Note: /etc/conf.modules is more recent then /lib/modules/2.2.14-5.0/modules.dep また、以下の設定は CF03 を使用する場合には特に必要ありません # echo "scsi add-single-device 1 0 0 0" > /proc/scsi/scsi 各モジュールが起動している状態で、メディアを装着した状態で REX-CF03 のUSB ケーブルを装着すると、画面に以下のメッセージが表示されます。 scsi0: SCSI emulation for USB Mass Storage devices scsi : 1 host Vendor: RATOC Model: CompactFlash R/W Rev: 1.00 Type: Direct-Access ANSI SCSI revision: 02 Detected scsi removable disk sda at scsi0, channel 0, id 0, lun 0 SCSI device sda:hdrw secotr= 512 bytes. Sectors= 15680 [7 MB] [0.0GB] sda: Write Protect is off sda: sda1 以下のコマンドを入力して CF用をマウントポイントを作成し、mount を実行 します。 # mkdir /mnt/cf0 # mount -t msdos /dev/sda1 /mnt/cf0 これで、CFメディアを通常のストレージデバイスと同様にアクセス可能となり ます。 ■ メディアの交換 メディアを交換する場合は、以下のメディアを取り外す前に以下コマンドを 実行します。 # umount /mnt/cf0 # rmmod usb-storage ここで、メディアを取り外して、交換後に以下のコマンドを実行します。 # insmod usb-storage 以上 /END