udev
データを回復しようとしているコンピュータの設定が破損しているため(参照私の記事)USBフラッシュドライブに対応する「キャラクタースペシャル」デバイスに書き込もうとするのに問題があります。
私が期待するのは、(root権限で)次のことができることです。
echo "test 123" > /dev/bus/usb/001/031
しかし、私は理解しています
bash: echo: write error: Invalid argument
どうなりますか?文字デバイスに書き込むには?
ポリスチレン:一般的に予想されたブロックデバイス(/dev/sdb
、にあるもの)が/dev/block
何らかの理由で生成されないため、特に興味深いです。ところで、USBドライブを接続すると実際にキャラクターデバイスが作成されることを確認しました。 (そして削除すると文字デバイスも削除されます。)そのデバイスに書き込む方法が見つかった場合は、オーディオケーブルを介してデータをゆっくり転送するのにかかる手間が少なくなります(現在はこれが最善の方法です)。
答え1
これは「raw USB」デバイスです。これを使用するには、いくつかのUSB関連ioctl()
機能が必要です。単にシェルから生データを書き込むだけでは、多くの成果を上げることはできません。データは最初に有効なUSBパケットでフォーマットされ、次にioctl()
機能を使用してデバイス内の正しいUSBエンドポイントへの接続を確立する必要があります。
USBストレージデバイスについて話しているので、プロセスがさらに複雑になります。これらのUSBパケットの場合は、6つの可能なストレージコマンドセットのうちの1つが必要です。実際、最も一般的なコマンドセットは、USBにカプセル化されたSCSIプロトコルである「SCSI Transparent」コマンドセットです。
したがって、まず/dev/sg*
独自のSCSIコマンドパケットを作成し、ディスクデバイスに書き込むためにデバイスを使用する方法を学ぶ必要があります。これが達成されたら、プロセスにUSB専用のラッパーを追加することができます。その後、これらのデバイスを使用して生のブロックを/dev/bus/usb/<busnum>/<devnum>
USBストレージデバイスに書き込むことができます。
ほとんどの場合、生のUSBを使用することは、ioctl()
非常に具体的なものが必要ない限り非常に退屈です。生のUSBアクセスを必要とするほとんどのプログラマは、libusb
他のライブラリ(たとえば、libftdi
FTDI USBシリアルコンバータチップ開発者レベルのアクセス用のハードウェア)を使用します。 USBの基本的なメカニズムを処理します。簡単に言えば、あなたのような構造的な状況で生のUSBストレージデバイスをうまく使用するには、かなり洗練されたUSB I / Oプログラマである必要があります。
しかし、あなたの他の投稿は本当に巨大なデータ復旧作業を完了しなければならなかったようです。その点で、私はあなたの業績を尊重しますが...また、バックアップの重要性も理解してください。