問題タブ [ata]
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.
ethernet - AoE 標準には CRC フィールドがないようです。これはイーサネット規格に違反していますか?
セットアップの 1 つで AoE をデバッグしています。
その中で、AoE パケットのフレームにチェックサム フィールドがないように見えることに気付きました。AoE 仕様を調べたところ、パケットの末尾に CRC チェックサムが定義されていないようです。
チェックサム フィールドはオプションですか?
windows - ATAコマンドデバイスIDENTIFY
ATA_PASS_THROUGH_EXを使用してデバイスを識別しようとしています。
出力バッファを見ると、すべて無効なデータが含まれています。誰かが私が間違っていることを助けてくれますか?
更新:エラー値を確認すると、5です。これは、アクセス違反であることを意味します。管理者モードで実行しています。私は何か間違ったことをしていますか?
-ニック
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で動作しますか?ミニポートはまだ最新ですか?
windows - Windows8でIOCTL_ATA_PASS_THROUGH_DIRECTが失敗する
これが私のサンプルコードです:
この呼び出しは、Windows8およびWindowsServer 2012でのみ失敗し、「パラメーターが正しくありません」(@err = 87)というメッセージがスローされます。Windows 7では正常に動作します。誰かがこの問題の解決策を提供できますか?
size - LBA48 を台無しにした ATA ドライバー LBA28 の書き込み
現在、ATA ドライバーで LBA を機能させようとしていますが、問題があります。
関数identify
が OK を返しword 83;bit 10
、返された識別データが設定されているため、デバイスは LBA48 をサポートしています。しかし、LBA48 セクター (構成ワード 100 ~ 103) の合計量を取得しようとすると、ゼロが返されます。仮想マシンには 1GB のディスク セットがありますが、このフィールドはまだゼロです。LBA28セクターの量も取得しようとしました=>それは正しいものです。
興味深いのは、出力するheads * cylinders * sectors_per_track
と、値が単語 60 ~ 61 にある合計 LBA28 セクターの値とほぼ同じになることです。2097152
合計LBA28用、2096640用ですh * c * s
。これら 2 つの値の差は です512
。
誰かが私が間違っていることを知っていますか? HDDのサイズを取得する他の方法はありますか?
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 ビットをサポートしていることを読み取ることができます。この問題をどこで調査するかさえ、今は本当に考えないでください。誰かがアイデアを持っている場合は、私と共有してください。あなたが提供したい他の情報がある場合は、私に知らせてください。できるだけ早くそれを行います.
c - libata を使用してユーザー空間アプリケーションから HDD で ATA コマンドを実行する
libata を使用して、ユーザー空間アプリケーションから HDD (SATA ドライブ) に ATA コマンド (最終的には、サポートされている ATA コマンド) を送信したいと考えています (これは可能ですよね?)。私が最初に喜んでいるのは、ATA コマンドの Identify Device を実行して、このデータを出力することです。残念ながら、そのような例は見つかりません。libata [ファイル libata-core.c (linux-2.6.39/drivers/ata/)] には、関数 ata_dev_read_id [ソース コードの 1860 行目、以下] があり、これは私がやりたいことを実行するために継ぎ目があります。問題は、それが ata_device への引数ポインタの 1 つとして取られ、初期化する方法がわからないことです。libATA 開発者ガイド ( http://www.hep.by/gnu/kernel/libata/index.html ) をいくつか読みました。)、しかし、それは私にとって明確ではありませんでした。ソースコードの例がもっと役立つと思います。誰でもそのような例を提供できますか (コア ソースで十分です。エラー チェックなどは必要ありません)。実際に私が欲しいのは、このhttp://www.tldp.org/HOWTO/SCSI-Generic-HOWTO/pexample.htmlのようなことを行うソースコードですが、 sg.h ioctl を使用する代わりに libata を使用したいと思います。SCSI コマンド ATA パススルーを使用できることは承知しています。または、代わりに、libATAを使用するオープンソースツール、アプリケーションを知っている人がいて、そこでどのように使用されているかを見ることができますか?
linux - ATA の信頼できるコマンド - libata allow_tpm の設定方法
信頼できる送信/信頼できる受信をハード ドライブに送信したいと考えています。このページを見つけました: ATA Trusted commands in Linux . (エフェミエントとドミトリー・オブホフに感謝します)。
今のところ、libata allow_tpm = 1 を設定する方法が問題です。Ubuntu 13.10 を使用しています。私のコードは Dmitry Obukhov と同じです (Identify およびその他すべてのコマンドでは完全に機能しますが、信頼できるコマンドでは機能しません)。
別の側面を見た後、これらは私がしたことです:
ターミナルで:
再起動後、systool -a -v -m libata
再度実行しましたが、何も変わりませんallow_tpm
。変更するにはどうすればよいallow_tpm
ですか?
windows - SATA コントローラにはいくつの物理チャネルがありますか?
1 つの SATA コントローラを備えたシステムを想像してください。コントローラが IDE モードで動作している場合、デバイス マネージャに次のように表示されます。
Windows XP:
Windows >= Vista:
また、コントローラーが AHCI モードで動作する場合、XP と >= Vista の両方で「SATA AHCI コントローラー」のように表示されます。
AHCI モードの SATA コントローラーは、最大 32 個のデバイスをサポートします (32 ビット マスクはデバイス接続を示します)。各デバイスが個別のチャネルを必要とすることを考えると、これは単なるソフトウェアの制限だと思います。SATA コントローラが 32 チャネルすべてに「配線」されているようなシステムが存在する可能性は低いです。しかし、32 は、コントローラーが 2 つ以上のデバイスを処理できるため、2 つ以上のチャネルを持つことを意味する数字だと思います。そこで、実際に SATA コントローラーによくあるチャンネル数をお聞きしたいと思います。ATA コントローラには 2 つのチャネルがありますが、IDE モードでのソフトウェア互換性のために SATA コントローラに同じ数のチャネルがあるということですか? それとも、2 つ以上のチャンネルを持っているのに、IDE モードでは最初の 2 つのチャンネルしか利用できないのでしょうか? (少なくともXPでは「プライマリ」チャネルと「セカンダリ」チャネルのため