Raspberry Pi 3 + NetBSD/evbarm で RaSCSI
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

Raspberry Pi 3 + NetBSD/evbarm で RaSCSI

2018-05-02 04:33

    RaSCSI version 1.34

    4/26 にリリースされた RaSCSI version 1.34 では NetBSD対応パッチがマージされました。

    実は去年の 6月ぐらいに Raspberry Pi 3 MODEL B を買ってからずっと放置していたのですが、NetBSD対応が入ったということで GW中の課題として試してみました。

    結論からいうと NetBSD/evbarm 上でもあっさり動きました。

    手順まとめ

    手順としては以下(わざわざ NetBSD で動かそうと思うようなある程度わかっている人向け)

    • どうにかして Raspberry Pi で NetBSD/evbarm が起動するSDカードを用意する
      えびじゅんさんのSDイメージを使うのがとりあえず簡単です
    • カーネルコンフィグに options INSECURE を追加してカーネルを作り直す
    • options INSECURE 付きで作り直したカーネルで再起動
      起動用DOSパーティションに .bin なカーネルを入れるとか手順がありますがそのへんは別途
    • RaSCSI version 1.34 をダウンロードして展開
      標準の /usr/bin/unzip でも解凍可能
    • rascsi134/doc/rascsi.txt の説明をちゃんと読む
    • 使用する接続方法(直結 or 各種変換基板)に合わせて rascsi134/src/raspberrypi/gpiobus.h の「接続方法定義の選択」のコメントアウトを適宜修正
    • make によりビルド
    • 生ディスクイメージを拡張子 .hds で用意
    • ./rascsi -id0 [ディスクイメージファイル].hds で起動

    options INSECURE

    options INSECURE が必要というのは @LabDrunker さんの情報です。

    options INSECURE が無いカーネル (NetBSD/evbarm のデフォルトではついていない) で rascsi を起動すると以下のように怒られます。

    Error : Initializing

    options INSECURE が指定されると、カーネルとしてはグローバル変数 securelevel の値が変化します。securelevel の値とデバイスアクセス関連については src/sys/secmodel/securelevel/secmodel_securelevel.c あたりのコードを参照してください(手抜き)

    RaSCSI コマンド起動オプション

    デーモン本体として rascsi コマンドと、外部からの制御用の rasctl コマンドとでは SCSI ID指定やイメージファイル指定のオプション体系が異なります。ちゃんとドキュメントを読んでから試さないとオプションを間違えていろいろ怒られることになるので注意しましょう……。

    RaSCSI on OMRON LUNA

    とりあえずのテストで RaSCSI + GAMERnium版変換基板(初版 GMN-03)を初代LUNAにつないでテストするとこれもあっさり動きました。

    SCSI mode selece コマンド

    初代LUNAのブートPROM(というか、内蔵のファームウェア)は SCSI起動時に mode select コマンドを発行するのですが、よくある IDE-SCSI 変換内蔵の HDDではこの mode select コマンドをサポートしておらず、結果として初代LUNAでは起動できない、という問題がありました。

    一方、 RaSCSI はちゃんと mode select コマンドにも対応しているようで、 LUNAのファームウェアからの起動も問題なく可能でした。

    rascsi-DDISK_LOG のオプション付きでビルドすると、ホスト側から飛んできた SCSIコマンドのログが一通り表示されるようになります。なので、「謎マシンが謎コマンドを送ってくる!」という場合も RaSCSI があれば調査可能です。

    LUNA のブートPROM の "x" コマンドでブートローダーを読み出した時に飛んできたコマンドの RaSCSI のログ出力はこんな感じです。

    SCSI Target Emulator RaSCSI(*^..^*) version 1.34
    Powered by XM6 TypeG Technology / Copyright (C) 2016-2018 GIMONS
    Connect type : GAMERnium.com version
    Peripheral address : 0x3f000000

    ---+------+---------------------------------------
    ID | TYPE | DEVICE STATUS
    ---+------+---------------------------------------
    5 | SCHD | DK312-1-BSD.hds
    ---+------+---------------------------------------
    セレクションフェーズ ID=5 (デバイスあり)
    コマンドフェーズ
    コマンド $00
    コマンド $00
    コマンド $00
    コマンド $00
    コマンド $00
    コマンド $00
    実行フェーズ コマンド$00
    TEST UNIT READYコマンド
    ステータスフェーズ
    メッセージインフェーズ
    バスフリーフェーズ
    セレクションフェーズ ID=5 (デバイスあり)
    コマンドフェーズ
    コマンド $12
    コマンド $00
    コマンド $00
    コマンド $00
    コマンド $24
    コマンド $00
    実行フェーズ コマンド$12
    INQUIRYコマンド
    データインフェーズ
    ステータスフェーズ
    メッセージインフェーズ
    バスフリーフェーズ
    セレクションフェーズ ID=5 (デバイスあり)
    コマンドフェーズ
    コマンド $15
    コマンド $00
    コマンド $00
    コマンド $00
    コマンド $0C
    コマンド $00
    実行フェーズ コマンド$15
    MODE SELECTコマンド
    データアウトフェーズ
    ステータスフェーズ
    メッセージインフェーズ
    バスフリーフェーズ
    セレクションフェーズ ID=5 (デバイスあり)
    コマンドフェーズ
    コマンド $08
    コマンド $00
    コマンド $00
    コマンド $00
    コマンド $01
    コマンド $00
    実行フェーズ コマンド$08
    READ(6)コマンド レコード=000000 ブロック=1
    データインフェーズ
    ステータスフェーズ
    メッセージインフェーズ
    バスフリーフェーズ
    セレクションフェーズ ID=5 (デバイスあり)
    コマンドフェーズ
    コマンド $08
    コマンド $00
    コマンド $00
    コマンド $10
    コマンド $03
    コマンド $00
    実行フェーズ コマンド$08
    READ(6)コマンド レコード=000010 ブロック=3
    データインフェーズ
    ステータスフェーズ
    メッセージインフェーズ
    バスフリーフェーズ

    [... 以下 READ(6)コマンドの繰り返し ...]

    おまけ

    ちなみに、イニシエータモードが無い変換基板であっても、USB-SCSI 変換があれば実HDDからイメージ吸い出しも RPI 上で完結できますが、今となっては実HDD並みに入手が難しいかも。

    なお、USB-SCSI変換の SCSI側を RaSCSIにつないで USB側を Raspberry Pi 自身につなぐという哲学的な操作も特に問題なく動くようです。



    なお、GAMERnium版の変換基板の場合は TERM POWER は供給されない (パターンはあるが FUSE とダイオードが実装されていない) ようなので、 USB-SCSI変換を使用する場合は TERM POWER 用の 5V電源をつないでやる必要があります。

    あいぼむ版の変換基板では TERM POWER 用の部品も実装されていて TERM POWER ON/OFF のスイッチもついていますが、ラズパイの 5V電源容量的には外から 5V供給したほうがよいかも? (あいぼむ版の細かい動作については未確認です)

    おまけ 2

    LUNA の SCSIチップは実は富士通SPC (MB89352) で X680x0 と同じです。なので、テストとしてはあまりうれしくないかな、ということで SPARCstation20 (SCSI チップは NCR53C94系) でもざっとテストしてみました。が、こちらは問題ありのようでした。

    このあたりはまたぼちぼち調べたいと思います。


    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。