問題タブ [scsi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - Windows 7 64 ビットで SPTI の「モード選択」が予期せず失敗する
カスタム SCSI デバイスと通信するために古いコードを変換している最中です。元のコードは WinXP と ASPI 用に書かれており、新しいコードは Win7 と SPTI で動作する必要があります。私の問題は、新しいコードが SCSI の「モード選択」操作を実行するための呼び出しで、ステータス コード 2 で失敗することです。これは SCSI の「条件の確認」エラーです。しかし、これは WinXP の古いコードでは発生しません。
通常、「Check Condition」コードを取得すると、デバイスに「Request Sense」コマンドを発行して、何が起こったかを調べることができます。残念ながら、このデバイスは (私の意見では) バグが多く、Request Sense を実行すると常に「すべて問題ありません」と返されます。だから私はここで暗闇の中で働いています。
そのため、SPTI コードで何が間違っている可能性があるかについての提案を期待しており、フィードバックをいただければ幸いです。
これに影響を与えている可能性があると私が考えたいくつかのことを次に示します。
- デバイスが期待するシーケンスは、"Reserve Unit"、"Rezero Unit"、"Mode Select"、その他の操作、"Release Unit" です。「リザーブユニット」「リゼロユニット」「リリースユニット」は正常に動作しているように見えますが、「モードセレクト」に失敗したため、その他の操作は失敗しています。
- 操作ごとに、SPTI コードは SCSI ホスト アダプタへのハンドルを開いたり閉じたりします。「予約ユニット」でハンドルを開き、シーケンス全体で開いたままにする必要がありますか?
- DeviceIoControl() に送信される ioctl は IOCTL_SCSI_PASS_THROUGH です。「モード選択」操作に IOCTL_SCSI_PASS_THROUGH_DIRECT を使用する必要がありますか? 単純な操作なので、もっと単純な API で十分だと思いましたが、それは間違っているかもしれません。
問題のコードは次のとおりです。
filesystems - USBマスストレージクラスデバイスでは、ブロックサイズはクラスターサイズと同じですか?USBドライブのクラスターサイズを決定する方法は?
USBマスストレージクラスデバイス(USBスティック、例:4GB)で、「クラスター」サイズをどのように決定しますか。
ここでのクラスターは、Fat32ファイルシステムのコンテキストから取得されます。
SCSIコマンドを使用して、論理ブロックサイズ、つまり512バイトを判別できました。これはクラスターサイズと同じですか?これはクラスターサイズと見なすことができますか?
このようなディスクレスデバイスの場合、クラスターサイズは依然として関係がありますか?
最後に、このコンテキストでは、論理ブロックとクラスターの関係は何ですか?
windows - USBドライブへのATAコマンド
Windows7C
プログラミング
VisualC++ 2008(VMWare内)
いくつかのATAコマンド(デバイスの識別、ネイティブの最大アドレスの読み取り、最大アドレスの設定)をDeviceIOContro
lとともにUSBハードドライブに送信したいと思います。したがって、いくつか質問があります。
私が理解したように、USBSTORはATAコマンドを直接(でIOCTL_ATA_PASS_THROUGH
)処理することはできません。これを試してみましたが、ネイティブIDEハードドライブでは機能しましたが、USBでは機能しませんでした。
アプリケーションがSCSIコマンドをデバイスに送信し、それらがデバイスに転送されるのは正しいですか?では、それぞれのATAコマンドをカプセル化してSCSIコマンドを作成する必要がありますか?
何
dwIoControlCode
でそれができますか?で試してみましたIOCTL_SCSI_MINIPORT
が、エラーはでしたERROR_NOT_SUPPORTED
。minportで動作しますか?ミニポートはまだ最新ですか?
linux - カーネルモジュール内からUSBデバイスにSCSIコマンドを送信することは可能ですか?
質問
udevがカーネルモジュール(おそらくブロックデバイスパス)に渡す情報を前提として、SCSIコマンドをブロックデバイスに送信するにはどうすればよいですか?(それ以外の場合は正常に機能します。つまり、パーティションがマウントされ、データが失われることはありません)
私がやろうとしていること
SCSIコマンドで制御されるLEDを備えたUSBマスストレージデバイスがあります。/ sys / class / leds/*エントリを提供するLEDドライバを作成したいと思います。
ここでの目標は、デバイスを正常に機能させることです(パーティションをマウントして機能させるなど)が、LEDを制御するためにSCSIコマンドを送信する/ sys / class / leds/*インタラクションも許可します。
sg_rawを使用すると、ユーザースペースで必要なSCSIコマンドを簡単に送信できます。しかし、/ sys / class /leds/を提供するにはkmodが必要です...
基本的に必要なのはioctl()です。ただし、kmod内からopen()、ioct()などを呼び出すことは一般的に悪い考えだと理解しています。
c++ - SCSI パススルーを使用する ioctrl
Windows を使用すると、次の簡略化されたコードを使用して USB デバイスと簡単に通信できます。
私はLinuxで同じことをやろうとしていますが、ioctrl()パラメーターを理解できていないか、構造をより適切に配置できていません。コード スニペットをいただければ幸いです。ありがとう。
storage - lsattrを使用したAIXでのLUNIDとターゲットIDの解釈
私はAIXを初めて使用します。AIXでコマンドlsattrを見つけました。これは、デバイスのSCSIIDとLUNIDを取得するのに役立ちます。SCSIIDとLUNIDの値を解釈する方法がわかりません。出力例は次のとおりです。
関連性のない行はスキップしました。
1)LUN IDは0x25f000000000000であり、これは巨大です。実際の値を取得するには、これを48ビット右シフトする必要があることをいくつかのブログで読んでください。これはどこに文書化されていますか?
2)また、SCSI IDについてはどうですか、この値でさえ巨大に見えます、0x21300
誰かがこれについて私を助けてくれますか?
ありがとうございます。それでは、お元気で、
アルンビジャプール
c - SCSI ATA PASS-THROUGH(16) での WRITE SECTOR(S) EXT ATA コマンドの使用
いらっしゃいませ。SCSI コマンド ATA PASS-THROUGH(16) for WRITE SECTOR(S) EXT - 34h、PIO Data-Out (WRITE DMA EXT - 35h、DMA 同一の結果) の実行中に問題が発生しました。カーネル 2.6.39 を使用しています。SCSI によって制御される HDD (SATA) が 1 台あります。このドライブの特定のセクターにデータを書き込みたいです。その目標を達成するために、SCSI コマンド ATA PASS_THROUGH(16) を使用します。ソース コードでは、次のように ioctl を実行します。
この操作は、ATA コマンドの LBA が 0xFE2600 未満の場合に正常に機能します。データはドライブに書き込まれ、読み取ることができ、再起動後も存在します。ただし、この ATA コマンドの実行中に LBA >= 0xFE2600 になると、次のメッセージが表示されます。
[ 5127.415214] ata1.00: 例外 Emask 0x0 SAct 0x0 SErr 0x0 アクション 0x0
[ 5127.421751] ata1.00: irq_stat 0x40000001
[ 5127.425737] ata1.00: コマンドに失敗しました: WRITE DMA EXT
[ 5127.430659] ata1.00: cmd 35/00:01:ff:ff:00/00:00:ff:00:00/40 タグ 0 dma 512 アウト
[ 5127.430664] res 51/10:01:ff:ff:00/00:00:ff:00:00/40 Emask 0x81 (無効な引数)
[ 5127.446389] ata1.00: ステータス: { DRDY ERR } [ 5127.450446] ata1.00:
エラー: { IDNF }
最初は、カーネルに何か問題があり、LBA 24 ビットのみをサポートし、LBA 48 ビットをサポートしていないのではないかと考えていましたが、この理論はしきい値 0xFE2600 と完全には一致していません (しきい値は 0x1000000 でした)。IDENTIFY DEVICE - ECh, PIO Data-In によって返されたデータから、最大 LBA が 0x2542EAB0 であり、ドライブが LBA 48 ビットをサポートしていることを読み取ることができます。この問題をどこで調査するかさえ、今は本当に考えないでください。誰かがアイデアを持っている場合は、私と共有してください。あなたが提供したい他の情報がある場合は、私に知らせてください。できるだけ早くそれを行います.
sockets - SCSI 上のソケット API?
異なるトランスポートで通常のソケット API を実行する既存のソフトウェアはありますか? 私は今、特に SCSI に興味を持っていますが、他のトランスポートで利用できるものがあるかどうかも知りたいです。接続の両側に何かが必要です。SCSI の場合は、その下にある SCSI を使用するエミュレーション レイヤーと、ターゲット側のソフトウェアも必要です。
なぜこれが必要なのかというと、ソケットを使用して FC 上で動作する既存のアプリケーションをサポートする必要があり、SCSI はその点でうまく適合します。FC 上の IP は長い間使用されていません。
前もって感謝します。