問題タブ [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.
standards - SCSI センス データ フォーマットと MODE SENSE コントロール ページ
SCSI リファレンス マニュアルでは、固定記述子ベースと可変記述子ベースの 2 種類のセンス データ フォーマットが定義されています (2.4 章)。MODE SENSE SCSI コマンドへの応答として返されることになっている "Control Mode Page (0Ah)" (4.3.8) には、次のように定義されている D_SENSE ビットが含まれています。
D_SENSE (DESCRIPTOR FORMAT SENSE DATA) ビット
0 ゼロに設定されたディスクリプタ フォーマット センス データ (D_SENSE) ビットは、同じ I_T_L_Q nexus トランザクションで CHECK CONDITION ステータスとしてセンス データを返すときに、デバイス サーバーが固定形式のセンス データを返すことを指定します。
1 1 に設定された D_SENSE ビットは、2.4.1 で定義されている場合を除き、CHECK CONDITION ステータスとして同じ I_T_L_Q nexus トランザクションでセンス データを返すときに、デバイス サーバーが記述子形式のセンス データを返すことを指定します。
私の質問は、SCSI ターゲット側でのこのビットの解釈についてです。このビットが 1 の場合、ターゲット サーバーは記述子形式でセンス データを返す義務がありますか? それとも、このデータを任意の形式で返す可能性があるだけですか?
センス データの最初のバイトは、そのフォーマットを決定するために使用できるため、SCSI イニシエータは、受信したセンス データをデコードする方法を決定するために、実際には D_SENSE ビット値を必要としません。
私がこの質問をしているのは、SCSI ターゲットをシミュレートするはずのソフトウェアに取り組んでいるためです。そのため、複数の SCSI ドキュメントを消化して正しくする必要があります。
target - 同じイニシエータ IQN を使用した ISCSI 複数接続
同じイニシエーター IQN を使用して、複数のコンピューターが同じターゲットに同時に接続することは可能ですか?
ありがとうございました。
scsi - SCSI 標準では、デバイスが複数の「ポート」と複数の「論理ユニット」の両方を持つことができるのはなぜですか?
SCSI の低レベルの詳細を理解しようとしています。SCSI 標準 (SAM-5 SCSI アーキテクチャ ドキュメントなど) では、1 つの SCSI デバイスが複数の「ターゲット ポート」と複数の「論理ユニット」を持つことができると規定されています。イニシエーターがデータの読み取り/書き込み要求をターゲットに送信する場合、目的のターゲット ポートと論理ユニット番号の両方を指定する必要があります。
必要な多重化を実行するには、ポート番号または論理ユニット番号だけで十分であるように思われるため、単一の SCSI インターフェイスで複数のデータ ソース/シンクへのアクセスを提供できます。
現実世界の SCSI デバイスは、実際に複数のターゲット ポートと複数の論理ユニットを提供しますか?
複数のターゲット ポートを持つデバイスと複数の論理ユニットを持つデバイスの例を提供して、実際にどのポート/LUN が使用されているかを示すことができれば、非常に役に立ちます。
scsi - SCSI の場合、ADDITIONAL LENGTH の定義に変更はありましたか?
SCSI SPC4r22 を読んでいます。ADDITIONAL LENGTH に関して、spc3 より前のすべてのリビジョンは次のように述べています (「調整しないでください」)。
spc2r20.pdf から:
「ADDITIONAL LENGTH フィールドは、パラメーターの長さをバイト単位で指定するものとします。CDB の ALLOCATION LENGTH が小さすぎてすべてのパラメーターを転送できない場合、ADDITIONAL LENGTH は切り捨てを反映するように調整されません。」
しかし、SPC3 や SPC4 にはそのような記述はありません。それは変更されましたか、それともフレーズがありませんか? 私がそれを見逃している場合、誰かがそれを引用できますか?
assembly - USB からの SCSI パケット
だから私はこのリンクを見つけましたフラッシュドライブの最初のセクター(MBR)はコンピューターへの挿入時に実行され、回答に記載されているUSB SCSIパケットの詳細について疑問に思っていました。まず、フラッシュドライブのどこに保存されていますか? USB ドライブの 16 進ダンプを実行すると、パケットを表示できますか? また、表示できる場合、どのメモリ レジスタで? 次に、すべての企業が異なる命令セットを使用している場合、コンピュータは非標準パケットをどのように処理するのでしょうか? 第三に、ドライブから返されたパケットを変更するにはどうすればよいでしょうか?
c - ファイル記述子が閉じられた後の SCSI ドライブのスピンアップ
マウントされていない、または他の方法で使用されていないドライブのスピンダウンが必要なプログラムがあります。
ファイル記述子を閉じると、ドライブが自動的にスピンアップすることに気付きました。
これが原因であるという情報は見つかりませんでした。これを無効にする方法はありますか?
これは、自分でテストするための短いプログラムです。ヘルプやポインタをいただければ幸いです
vmware - VMware ESXi カーネル ログファイルの「Bad CDB」メッセージ
VMware ESXi 5.5ハイパーバイザーを実行していますが、その/var/log/vmkernel.log
ファイルに次のようなエラー メッセージが多数表示されます。
コードによる SCSI 操作0x9e
はSERVICE ACTION IN (16)
で、16 バイトのコマンドです。では、なぜサーバーはmax=12
制限について文句を言うのでしょうか? これらのメッセージが表示される理由は何ですか? それらを取り除くには何を変更する必要がありますか?
c - 汎用 scsi ioctl 後の fread 中のセグメンテーション違反
バックグラウンド
USB 経由で組み込み ARM システムを起動するツールを作成しています。この特定の ARM システムには、大容量記憶装置をエミュレートし、ホストがメモリに情報を書き込むことを可能にするいくつかのベンダー SCSI オペコードを実装することにより、USB 経由でシステムをロードできるブート ローダーがあります。組み込み ARM システムが接続されているホスト上で実行される私のツールは、これらのベンダー コマンドを使用して zImage またはその他のバイナリをデバイスに送信することです。
Linux 汎用 SCSI インターフェイスを使用してコマンドを送信します。
RAM コントローラーを制御するレジスターに値を書き込むコマンドをいくつか送信した後、プログラムはファイルを開き、ファイルから一度に 4096 バイトを読み取るループに入り、それらをデバイスに送信します。
送信する必要がある SCSI コマンドに関するドキュメントはありません。ベンダーが提供する同等の Windows 専用ツールによって送信される USB トラフィックをキャプチャして分析することにより、使用するプロトコルを決定しました。このプロトコルには奇妙な側面がいくつかあります。特に、リトル エンディアン形式のアドレスと値を受け入れ、SCSI コマンド内の 32 ビット値がワード アラインされていないことですが、これらが目前の問題とは関係がないと思います。
問題
最初の 7 つのバッファーを送信した後、プログラムはセグメンテーション違反を起こします。
segfault するセクションは次のとおりです。
fread を呼び出すとセグメンテーション違反が発生します。バックトレースは次のようになります。
ファイルの処理方法に問題はありません。ak_usbboot_storemem の呼び出しをコメント アウトすると、ループは問題なく完了します。
ak_usbboot_storemem は次のようになります。
_sendCmd は次のようになります。
SCSI Generic IOCTL で行っていることが原因であると推測していますが、これまでのところ何も見つけることができませんでした。
どんな洞察も歓迎します!