Sortix 1.1dev ports manual
This manual documents Sortix 1.1dev ports. You can instead view this document in the latest official manual.
SERIAL-TRANSFER(7) | Miscellaneous Information Manual | SERIAL-TRANSFER(7) |
NAME
serial-transfer — files over serial deviceDESCRIPTION
You can transfer data using the serial line. The sf(1) program provides simple framing which is useful to conduct advanced transfers by combining with other tools such as tar(1). The serial device will be available at the appropriate device after boot, such as /dev/com1. Data written to it will be available to readers on the other end and likewise data written on the other end will be available to local readers. Take care to ensure that the reader is always reading before writing or you may lose data. You get a byte stream between the guest and host using this interface. This is powerful but often you want to transfer finite payloads and have the transfer finish when done rather than needing to manually interrupt it. The sf(1) program encodes and decodes frames.sf -o
will emit a start byte
sequence, then read from stdin and encode a body, and finally emit an end
sequence. sf -i
will read bytes until it finds a start
sequence, then it will decode the body and emit it to stdout, and finally stop
when it receives the end sequence. We can use this to do transfers over the
serial connection.
sf(1) is a Sortix specific
program. Other operating systems don't come with it and you need to build it
from the Sortix source code. This is automatically done by the
build-tools target during
cross-development(7).
You can also just transfer its code from
/src/sf/sf.c over the serial line.
Virtual Machines
This method is useful when running inside a virtual machine and you wish to communicate with the host system. This is particularly useful if you connect the serial line to a unix socket. In Qemu, this is done with:-serial unix:/tmp/serial,server,nowait
Conventions
Let /dev/receiver mean the device on the receiving machine and let /dev/transmitter mean the device on the transmitting machine. This will be devices such as /dev/com1. If one end is the host of a virtual machine as described above, its device will be an unix socket such as /tmp/serial.Simple File Transfer
You can then transfer a file from this system to another. First run on the receiving machine:sf -i /dev/receiver > file.txt
sf -o /dev/transmitter < file.txt
Advanced File Transfer
You can transfer multiple files using tar(1). This also allows you to preserve file meta data such as permissions and modified time. First run on the receiving machine:sf -i /dev/receiver | tar -xv
tar -cv *.patch | sf -o /dev/transmitter
Network Connection
It is possible to use the sfnc(1) and sfncd(1) scripts to create a bidirectional communication channel using two serial ports, one for each direction. The scripts use a protocol where sfnc(1) sends a hostname, a port, and the body from stdin. Likewise the sfncd(1) script receives the two parameters and invokes nc(1) (or another program as specified). For instance, run on the server:sfncd /dev/receive /dev/transmit
sfnc example.com 443 /dev/transmit /dev/receive
SEE ALSO
sf(1), tar(1), development(7), user-guide(7)January 6, 2016 | Debian |