2

現在、telnet を介してファイルをやり取りしています。一度に複数のファイルを送信したいと考えています。

しかし、私のターゲット プラットフォーム (Blackfin プロセッサ) では、カーネル/busybox 構成 (uClinux ディストリビューション) で「tar」が有効になっていません。

ご存知のように、通常のコマンドは次のとおりです。

nc -p 12345 -l | tar -x
tar -c * | nc 192.168.0.100 12345 # with x.100 the robot IP address

tar を使用せずにnetcat を使用して複数のファイルを送信するにはどうすればよいですか?

プラットフォームにバイナリを簡単に追加できないことを考慮してください。基本的なユーティリティやシェル スクリプトを使用するのが最善です。

4

1 に答える 1

4

ついにこれを行うことができました、それは行うことができます!

ここで$l>は、あなたのマシンを で表しますIP 192.168.0.10。そして$e>、私の場合はロボットである、tar を使用しない組み込みデバイスで実行されます。ddディスク全体をコピーできる昔ながらの方法を使用します。

$l> nc -p 12345 -l | dd obs=4K of=/tmp/file.jffs2
$e> dd ibs=4K if=/dev/mtdblock2 | nc 192.168.0.10 12345

これで終わりですが、この形式のファイルシステムを読み取る方法を誰もが知っているわけではないため、次のようにしてマウントします。

file /tmp/file.jffs2
  /tmp/file.jffs2: Linux jffs2 filesystem data little endian
sudo su     #careful
mknod /tmp/mtdblock0 b 31 0
modprobe loop
losetup /dev/loop0 /tmp/file.jffs2
modprobe mtdblock
modprobe block2mtd
echo "/dev/loop0,128KiB" > /sys/module/block2mtd/parameters/block2mtd
modprobe jffs2
mkdir /media/robot
mount -t jffs2 /tmp/mtdblock0 /media/robot
Ctrl-D  #back as normal user

はい、ループバック デバイスが必要です。

sudo mount -t jffs2 /tmp/file.jffs2 /media/robot
  mount: /tmp/file.jffs2 is not a block device (maybe try `-o loop'?)

論理的には、これはファイル (chars) であり、ブロック デバイスではありません。dd私が知らない唯一のことは、組み込みデバイスのコマンドが含まれるファイルシステムのサブセットのみを選択できる構文があるかどうかです。その強みは生のバイトコピー動作ですが、dd理解する必要があるため、これはありそうにないと思います。jffs2

于 2013-05-17T08:59:04.853 に答える