web-dev-qa-db-ja.com

QEMUを使用してパススルーSCSIアクセスでDOSをエミュレートしますか?

QEMUを使用して、SCSIテープデバイスと通信する必要がある非常に特殊なプロプライエタリソフトウェアを実行するMS-DOSシステムをエミュレートしたいと思います。

QEMUはホストSCSIバスへのパススルーアクセスを提供し、ゲストOSが使用できるSCSIアダプターもエミュレートできるようです。しかし、SCSIを使用してQEMUをセットアップした経験はほとんどなく、ドキュメントは少し密集していて複雑です。

これまでの私のQEMUコマンドラインは次のとおりです。

qemu-system-i386 -m 32 -drive file="dosdrive.img",format=raw \
-option-rom "8xx_64.ROM" \
-drive file=/dev/sg2,if=scsi,bus=0,unit=0,format=raw \
-device dc390

エミュレートされたBIOSは、テープドライブを確実に認識します。

enter image description here

...そしてDOSがASPIドライバーを正常にロードしたようです。しかし、ソフトウェアが実際にSCSIデバイスから読み取ろうとすると、ハングし、QEMUから次のエラーが発生します。

lsi_scsi: error: Unhandled writeb 0xbc = 0x0
lsi_scsi: error: IO mappings not implemented

これは私が運が悪かったことを意味し、QEMUはSCSIテープドライブで動作できませんか?または、構成に問題がありますか?

1
Dmitry Brant

私は直接助けることはできませんが:

  • 最新のQEMU4とgit開発バージョンを試してみてください-おそらくすでに修正されています(他のメッセージで「lsi_scsi:」を除いて現在のgitでエラーメッセージ文字列を見つけることができません) https:// wiki .qemu.org/ChangeLog/4.0#SCSI ->「LSI53C8xxAおよびESP/PCscsiパラレルSCSIアダプターのいくつかのバグ修正。」
  • ソフトウェアはパススルーなしで(画像ファイルを使用して)動作しますか?
  • テープは別のmsdosソフトウェア(多分fastape http://www.dcee.net/Files/Utils/ )で動作しますか?

ヒント:使用するコンポーネントの正確なベンダー/名前/バージョンを常に投稿してください。

  • qemu
  • 8xx_64.ROM(おそらく古いバージョンが機能していて、このマッピングを実装する必要はありません)
  • Tekram DC390(W、U、F ..?)-SCSI ProzessorSYM53C895Aを搭載したPCISCSIコントローラーアドオンボード? Linuxでsymドライバーを使用する https://github.com/torvalds/linux/blob/master/drivers/scsi/Kconfig#L907
  • ASPIドライバー(LSI aspi8xx.sys?)
  • あなたのテープドライブはULT3580-TD5ですか?
  • ホストシステムx86/x64?
  • ディストリビューション、KVMサポート?

qemu/romバージョンと比較するためにubuntu19.04x64でqemugitをコンパイルしました

./i386-softmmu/qemu-system-i386 --version
  QEMU emulator version 4.0.50 (v4.0.0-312-gdf06df4f41-dirty)

./i386-softmmu/qemu-system-i386 -nographic -device dc390 -option-rom "../lsi_bios/8xx_64.rom"
  SeaBIOS (version rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org)

  iPXE (http://ipxe.org) 00:03.0 C980 PCI2.10 PnP PMM+07F912F0+07EF12F0 C980

  LSI Logic Corp. Symbios SDMS (TM) V4.0 PCI SCSI BIOS, PCI Rev. 2.0, 2.1
  Copyright 1995-2001 LSI Logic Corp.
  PCI-4.19.00                            

だから私はより最新のROM4.16 /4.19を見つけたと思います:)

https://www.broadcom.com/site-search?q=lsi_bios.Zip から8xx_64.romを入手しました

だから私はあなたが本当にあなたのコンポーネントをアップグレードするべきだと思います、qemu gitビルドは簡単でインストールを必要としないのであなたはそれを試してみることができます

別のチェックでは、SCSI通信が正常に機能するかどうかをテストするためにqemu内の現在のqemu/romとlinuxを使用します(おそらく、qemuだけでなくDOSドライバーもここで問題になります)

qemuメーリングリストにもあなたの投稿を見ました

多分これは役立ちます: https://k1024.org/posts/2019/2019-02-22-qemu-scsi-tape-passthrough/

私はこのように行きます:

  1. ホストx64:Debian/Ubuntu-qemu 4や他のバージョンの競合に関する依存関係の問題を減らすために、最新バージョンのディストリビューションを使用したいのですが、このようなテスト用の専用ハードディスクを備えたリムーバブルディスクスロットがあります

  2. テープドライブがLinuxで完全に実行されていることを確認します(問題を可能な限りDOSまで減らすため)。テープアクセスのワイルドテストが利用できる可能性があります(たとえば、読み取り/書き込みベンチマーク https:// blog。 devnu11.net/2009/11/benchmarking-tape-drives/ またはmtツールの使用 http://fibrevillage.com/storage/121-linux-mt-control-magnetic-tape-drive-操作 )--->それが本番環境で使用されるかどうかを強力にチェックします

  3. ソースからqemu4.0(qemu-system-i386)をビルドします(またはビルド前のパッケージを見つけます)

  4. 32ビットUbuntu/Debian(同じバージョン)非UI最小システム(テストのためだけにインストールが高速)を(virt-?)scsi-path-throughを使用してqemuにインストールします

  5. ステップ2のように再テストします(ただし、qemuの内部)

->これで、scsi-pass-throughがデータの失敗や奇妙なエラーなどなしで機能することが100%明確になり、この段階までqemuメーリングリストで助けを得るのが簡単になりました-DOSが登場すると汚れます:)

6.ここでBIOSまたはDOSのみが失敗した場合は、DOSテストを再度実行します(qemu 4、最新のコンポーネントを使用)。ASPIが原因です。

6つに分割される場合-テープアクセスは機能しますか(たとえば、 https://winworldpc.com/product/pc-tools/9x -> Central Point Backup)、その後、ソフトウェアが動作します

2
llm