Raspberry Pi Zero WHとRaSCSI Adapter Lite

 RaSCSIはIOTの実験用教材として有名なRaspberry Pi(略称ラズパイ)のGPIOとX68000等のSCSI端子とを接続することで、仮想ストレージ機器として動作するエミュレータです。私のX68000にはすでにリムーバルのコンパクトフラッシュドライブがついてはいますが、今回はこれをバックアップ用に回し、メインのストレージとして利用しようと組み込みました。本来は外部SCSI端子に接続する周辺機器なのですが、とある目的もあってあえて本体内に組み込みました。

RaSCSIとは

 RaSCSIはGIMONSさんが開発された、ハードディスクやMO,CD-ROMなどSCSIデバイスのエミュレータです。仮想ディスクドライブのほか、イーサネット通信をサポートしたり、ラズパイ側のファイルシステムをX68000のドライブとして認識させることもできます。詳しくは以下のGIMONさんのサイトをぜひご覧ください。ラズパイのGPIOとX68000のSCSI端子を接続するアダプタの回路図や両者間でファイル連携を行うソフトウェアを公開されています。

RaSCSI

 私は、あいぼむさんがこの構想に従いながら、3.5インチHDDドライブのケースに内蔵することを想定して設計された、ターゲットモード専用の「RaSCSI Adapter Lite」なるものを入手しました。RaSCSI Adapter Liteでは、50ピンのSCSI内部バスに直接接続することができます。詳しくは以下のあいぼむさんの商品紹介ページをご覧ください。

RaSCSI Adapter Lite



ラズパイ

 
 Raspberry Pi(ラズベリー パイ)は、教育利用を想定しイギリスのラズベリーパイ財団によって開発された、ARMプロセッサ搭載のシングルボードコンピュータで、各種OSに対応していますが、ラズビアンというLinuxベースのOSがよく利用されます。2013年から販売が開始され、これまでにいくつかのモデルへバージョンアップが図られ、MODEL3B+が最新です。また、機能を限定したZEROシリーズも登場し、私は2000円以下で購入できるZERO WHをRaSCSI Adapter Liteに載せました。

 通常、ハットやシールドと呼ばれる拡張基板はコンピュータボードの上に載せてGPIO端子と接続しますが、冒頭の写真のように、ラズパイZERO WHはRaSCSI Adapter Liteより遙かに小さいので、ラズパイの方が乗っている形になりました。小さくても機能的にはフルハイビジョンHDMI出力、WiFi、Bluetooth、USBの各機能を備え、X68000以上の処理能力があります。


組み込み
 組み込みにあたって、まずはコンパクトフラッシュのSDAT基板をこれまで取り付けていたアルミ板の下に沈めました。そして、その上にRaSCSIのアダプタ基板を固定し、ラズパイを接続しました。ちょうどこの場所にはSCSI内部バスの終端(ターミネータ用コネクタ)があり、そこにこれらのアダプタを接続しました。電源はACアダプタからのUSBマイクロケーブルをラズパイにつなぎ、アダプタの4P電源コネクタは使用しませんでした。

コンパクトフラッシュのアダプタと
SDAT(IDE・SCSI変換基板)
ラズパイZEROとRaSCSIアダプタ RaSCSIアダプタとラズパイZEROの
取り付け、ケーブル接続


 SCSI内部バスの接続やIDは最終的に以下のように設定することにしました。

SCSI IDドライブ
CF
RaSCSI
DVD
本体


設定

 RaSCSIとして機能させるラズパイの設定については、Hirofumi Iwasakiさん制作のサイトの以下のページでていねいに解説されています。私はこちらを見てRaSCSI導入を決意しました。
SCSIデバイスエミュレーターRaSCSIの設定方法

 RaSCSI Adapter Lite ではRaSCSIモジュール内のStandard版を使用します。以下は上記ページを参照して私が実際に操作した手順の記録です(ほとんど、まんまですが・・・)。

設定手順
  1. ラズパイ公式サイトからのRaspbian Stretch LiteのimgファイルのダウンロードとSD書き込み
  2. SDをセットしてラズパイ起動。Wifi・タイムゾーン・言語等の設定 $ sudo raspi-config
  3. SWAPの削除  $ sudo swapoff --all ; sudo apt-get remove dphys-swapfile ; sudo reboot
  4. SSHサーバの有効化 $ sudo systemctl enable ssh ; sudo systemctl start ssh
  5. ラズパイのIPアドレス確認 $ /sbin/ifconfig -a 
  6. 以降はWindowsPCからSSH接続で操作。まずは最新の状態に更新
     $ sudo apt-get update;sudo apt-get -y upgrade
     $ sudo apt-get install chrony
  7. GIMONSさんのサイトからRaSCSI Stretch版のダウンロード、SFTPによるラズパイへの転送
  8. RaSCSIファイル伸張 $ tar xvzf rascsi.tar.gz
  9. X68000エミュレータXM6のツールでSCSI HDDイメージ(X68SCSI1.HDS)を常用CFに合わせ500MBで作成
  10. SFTPにて、X68SCSI1.HDSファイルをラズパイのrascsiディレクトリーへ転送
  11. SCSIのIDを1としてRaSCSIバイナリー起動確認 $ standard/rascsi -iD1 X68SCSI1.HDS  
    SCSI Target Emulator RaSCSI(*^..^*) version 1.34
    Powered by XM6 TypeG Technology / Copyright (C) 2016-2018 GIMONS
    Connect type : STANDARD
    ---+------+---------------------------------------
    ID | TYPE | DEVICE STATUS
    ---+------+---------------------------------------
    1 | SCHD | X68SCSI1.HDS
    ---+------+---------------------------------------
    
    以上の正常メッセージが出たらCtrl+Cで停止
    
  12. rascsiを/opt下に転送   $ sudo mv rascsi /opt 
  13. rascsiをカーネルモジュール登録 $ cd /opt/rascsi/standard ; sudo cp rascsidrv.ko /lib/modules/4.9.59-・・・
  14. ファイル作成 $ sudo nano /etc/modules   rascsidrv と入力して保存
  15. カーネルモジュール間の依存を解決   $ sudo depmod -at
  16. rascsidrv.confを新規作成   $ sudo nano /etc/modules-load.d/rascsidrv.conf rascsidrv と入力して保存
  17. RaSCSI本体の起動スクリプト作成  $ cd /etc/systemd/system/ ; sudo nano rascsi.service
    [Unit]
    Description=RaSCSI
    After=syslog.target
     
    [Service]
    Type=simple
    WorkingDirectory=/opt/rascsi
    ExecStart=/usr/bin/sudo standard/rascsi -ID1 X68SCSI1.HDS
    TimeoutStopSec=5
    StandardOutput=null
     
    [Install]
    WantedBy = multi-user.target
    
  18. rascsiプロセスを自動起動に設定  $ sudo systemctl enable rascsi
  19. 再起動   $ sudo shutdown -r now
  20. プロセスが自動起動しているか確認 $ cd /opt/rascsi/standard ; ./rasctl -l
    ---+------+---------------------------------------
     ID | TYPE | DEVICE STATUS
     ---+------+---------------------------------------
     1 | SCHD | X68SCSI1.HDS
     ---+------+---------------------------------------
    
  21. X68000のFORMATコマンドでSCSI検索、領域確保、システム転送。
  22. DIR B:コマンドでドライブ内にHUMAN.SYS、COMMAND.X があるのを確認。
  23. COPYALL A:\*.* B: にて、コンパクトフラッシュドライブの内容を全てコピー。
  24. SWITCHコマンドで「SCSI1」を起動ドライブに設定


 以下はRaSCSIでの起動の様子です。さっそくRaSCSIとCFドライブとで電源ONからとリセットボタン押し後からの起動時間を比較してみました。また、ZERO WHで設定したSDカードはラズパイ MODEL 3Bでもそのまま起動に使えましたので、これも比較に加えてみました。

起動時間比較
起動ドライブ電源ON後リセット後
CFドライブ20秒20秒
RaSCSI
with ZERO WH
34秒18秒
RaSCSI
with model 3B
24秒18秒


 結果ですが、やはり電源ONからだと、ラズパイ自身が起動する時間の分、余分に時間がかかり、CFの方が有利です。また、当然のようにModel 3Bの方がZERO WHより早く起動するので全体として起動時間は短くなっています。なお、表のCFの計測時間はSCSIバスに単独接続の場合で、RaSCSIと同時接続した場合はSCSI検索の影響のせいか、MODEL 3B、ZERO WHのいずれの場合もRaSCSIとほぼ同じ値となりました。このような結果にはなりましたが、実際の運用の場合はRaSCSIスタイバイの状態からの電源ONが多いので、表のリセット後の起動時間が示すように、全く遜色なく利用できることがわかります。

自動シャットダウン

 ラズパイはLinux系OS上で制御ソフトを動かしていますので、電源を切る前にきちんとシャットダウン作業をさせる必要があります。いわゆる「ぶちぎり」は厳禁です。シャットダウンの指示はPCからWifi経由のSSHで可能ですが、面倒ですので、空きのGPIOの一つにX68000のメイン電源の5V(Vcc1)から抵抗を通して電圧を与えておき、Vcc1が切れたら自動でシャットダウンするようにしました。

 以下がその回路図および作成したシェルスクリプト(/usr/local/sbin/shutdown.sh)です。これを /etc/rc.local ファイルの exit0の前に /usr/local/sbin/shutdown.sh & と追加することで、自動シャットダウンができるようになりました。このシャットダウンが完了したことを見計らって別途ACアダプタから供給されているラズパイの電源を切ります。
!/bin/sh
 echo "7" > /sys/class/gpio/unexport
 echo "7" > /sys/class/gpio/export
 echo "in" > /sys/class/gpio/gpio7/direction

 while :
 do
 X68Vcc1=$(/bin/cat /sys/class/gpio/gpio7/value)
 if [ $X68Vcc1 = 1 ]; then
   break
 fi
 done

 while :
 do
 sleep 0.5s
 X68Vcc1=$(/bin/cat /sys/class/gpio/gpio7/value)
 if [ $X68Vcc1 = 0 ]; then
        /sbin/shutdown -h now
 fi
 done

追加回路図追加配線/usr/local/sbin/shutdown.sh


  おわりに

 RaSCSI導入にあたって、多くの方の取り組みを参考にさせていただきました。特にRaSCSIそのものを開発されたGIMONSさん、同人ハードとしてアダプタを製作・提供いただいたあいぼむさんには大変感謝しております。これで、CF以外の新たな起動可能ストレージができ、一段とX68000をパワーアップすることができました。さて、RaSCSI関連記事は実はこれで終わりではありません。続きます、本来の目的に向けて。キーワードは「USB」。お楽しみに。 


文中で紹介した以外に、とても参考になったサイト

RaSCSIを使うラズパイへの日本語環境のインストール、SWAP削除など参考になりました。
ラズパイに電源スイッチをshutdownのシェルスクリプトは参考になりました。