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 发送多个文件?

请考虑到我无法在平台上轻松添加二进制文件。最好使用基本实用程序和/或 shell 脚本来完成。

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'?)

从逻辑上讲,它是一个文件(字符),而不是块设备。我唯一不知道的是dd,嵌入式设备上的命令是否有语法只能选择要包含的文件系统的子集。我认为这不太可能,因为这需要dd理解jffs2,而它的优势在于它的原始字节复制行为。

于 2013-05-17T08:59:04.853 回答