When talking about communications data rates, this section does not use the term “baud”. Baud refers to the number of electrical state transitions that may be made in a period of time, while “bps” (bits per second) is the correct term to use (at least it does not seem to bother the curmudgeons quite as much).
To connect a modem or terminal to your FreeBSD system, you will need a serial port on your computer and the proper cable to connect to your serial device. If you are already familiar with your hardware and the cable it requires, you can safely skip this section.
There are several different kinds of serial cables. The two most common types for our purposes are null-modem cables and standard (“straight”) RS-232 cables. The documentation for your hardware should describe the type of cable required.
A null-modem cable passes some signals, such as “Signal Ground”, straight through, but switches other signals. For example, the “Transmitted Data” pin on one end goes to the “Received Data” pin on the other end.
You can also construct your own null-modem cable for use with terminals (e.g., for quality purposes). This table shows the RS-232C signals and the pin numbers on a DB-25 connector. Note that the standard also calls for a straight-through pin 1 to pin 1 Protective Ground line, but it is often omitted. Some terminals work OK using only pins 2, 3 and 7, while others require different configurations than the examples shown below.
Signal | Pin # | Pin # | Signal | |
---|---|---|---|---|
SG | 7 | connects to | 7 | SG |
TD | 2 | connects to | 3 | RD |
RD | 3 | connects to | 2 | TD |
RTS | 4 | connects to | 5 | CTS |
CTS | 5 | connects to | 4 | RTS |
DTR | 20 | connects to | 6 | DSR |
DTR | 20 | connects to | 8 | DCD |
DSR | 6 | connects to | 20 | DTR |
DCD | 8 | connects to | 20 | DTR |
Here are two other schemes more common nowadays.
Signal | Pin # | Pin # | Signal | |
---|---|---|---|---|
RD | 2 | connects to | 3 | TD |
TD | 3 | connects to | 2 | RD |
DTR | 4 | connects to | 6 | DSR |
DTR | 4 | connects to | 1 | DCD |
SG | 5 | connects to | 5 | SG |
DSR | 6 | connects to | 4 | DTR |
DCD | 1 | connects to | 4 | DTR |
RTS | 7 | connects to | 8 | CTS |
CTS | 8 | connects to | 7 | RTS |
Signal | Pin # | Pin # | Signal | |
---|---|---|---|---|
RD | 2 | connects to | 2 | TD |
TD | 3 | connects to | 3 | RD |
DTR | 4 | connects to | 6 | DSR |
DTR | 4 | connects to | 8 | DCD |
SG | 5 | connects to | 7 | SG |
DSR | 6 | connects to | 20 | DTR |
DCD | 1 | connects to | 20 | DTR |
RTS | 7 | connects to | 5 | CTS |
CTS | 8 | connects to | 4 | RTS |
When one pin at one end connects to a pair of pins at the other end, it is usually implemented with one short wire between the pair of pins in their connector and a long wire to the other single pin.
The above designs seems to be the most popular. In another variation (explained in the book RS-232 Made Easy) SG connects to SG, TD connects to RD, RTS and CTS connect to DCD, DTR connects to DSR, and vice-versa.
A standard serial cable passes all of the RS-232C signals straight through. That is, the “Transmitted Data” pin on one end of the cable goes to the “Transmitted Data” pin on the other end. This is the type of cable to use to connect a modem to your FreeBSD system, and is also appropriate for some terminals.
Serial ports are the devices through which data is transferred between the FreeBSD host computer and the terminal. This section describes the kinds of ports that exist and how they are addressed in FreeBSD.
Several kinds of serial ports exist. Before you purchase or construct a cable, you need to make sure it will fit the ports on your terminal and on the FreeBSD system.
Most terminals will have DB-25 ports. Personal computers, including PCs running FreeBSD, will have DB-25 or DB-9 ports. If you have a multiport serial card for your PC, you may have RJ-12 or RJ-45 ports.
See the documentation that accompanied the hardware for specifications on the kind of port in use. A visual inspection of the port often works too.
In FreeBSD, you access each serial port through an entry in
the /dev
directory. There are two different
kinds of entries:
Call-in ports are named
/dev/ttydN
where N
is the port number,
starting from zero. Generally, you use the call-in port for
terminals. Call-in ports require that the serial line assert
the data carrier detect (DCD) signal to work correctly.
Call-out ports are named
/dev/cuadN
.
You usually do not use the call-out port for terminals, just
for modems. You may use the call-out port if the serial cable
or the terminal does not support the carrier detect
signal.
Call-out ports are named
/dev/cuaaN
in
FreeBSD 5.X and older.
If you have connected a terminal to the first serial port
(COM1
in MS-DOS®), then you will
use /dev/ttyd0
to refer to the terminal. If
the terminal is on the second serial port (also known as
COM2
), use
/dev/ttyd1
, and so forth.
FreeBSD supports four serial ports by default. In the
MS-DOS® world, these are known as
COM1
,
COM2
,
COM3
, and
COM4
. FreeBSD currently supports
“dumb” multiport serial interface cards, such as
the BocaBoard 1008 and 2016, as well as more
intelligent multi-port cards such as those made by Digiboard
and Stallion Technologies. However, the default kernel only looks
for the standard COM ports.
To see if your kernel recognizes any of your serial ports, watch
for messages while the kernel is booting, or use the
/sbin/dmesg
command to replay the kernel's boot
messages. In particular, look for messages that start with the
characters sio
.
To view just the messages that have the word
sio
, use the command:
#
/sbin/dmesg | grep 'sio'
For example, on a system with four serial ports, these are the serial-port specific kernel boot messages:
sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A sio3 at 0x2e8-0x2ef irq 9 on isa sio3: type 16550A
If your kernel does not recognize all of your serial
ports, you will probably need to configure your kernel
in the /boot/device.hints
file. You can
also comment-out or completely remove lines for devices you do not
have.
On FreeBSD 4.X you have to edit your kernel configuration file. For detailed information on configuring your kernel, please see 章 8, 設定 FreeBSD Kernel. The relevant device lines would look like this:
device sio0 at isa? port IO_COM1 irq 4 device sio1 at isa? port IO_COM2 irq 3 device sio2 at isa? port IO_COM3 irq 5 device sio3 at isa? port IO_COM4 irq 9
Please refer to the sio(4) manual page for more information on serial ports and multiport boards configuration. Be careful if you are using a configuration file that was previously used for a different version of FreeBSD because the device flags and the syntax have changed between versions.
port IO_COM1
is a substitution for
port 0x3f8
, IO_COM2
is
0x2f8
, IO_COM3
is
0x3e8
, and IO_COM4
is
0x2e8
, which are fairly common port addresses for
their respective serial ports; interrupts 4, 3, 5, and 9 are fairly
common interrupt request lines. Also note that regular serial ports
cannot share interrupts on ISA-bus PCs
(multiport boards have on-board electronics that allow all the
16550A's on the board to share one or two interrupt request
lines).
Most devices in the kernel are accessed through “device
special files”, which are located in the
/dev
directory. The sio
devices are accessed through the
/dev/ttydN
(dial-in)
and /dev/cuadN
(call-out) devices. FreeBSD also provides initialization devices
(/dev/ttydN.init
and
/dev/cuadN.init
on
FreeBSD 6.X,
/dev/ttyidN
and
/dev/cuaidN
on
FreeBSD 5.X and older) and
locking devices
(/dev/ttydN.lock
and
/dev/cuadN.lock
on
FreeBSD 6.X,
/dev/ttyldN
and
/dev/cualdN
on
FreeBSD 5.X and older). The
initialization devices are used to initialize communications port
parameters each time a port is opened, such as
crtscts
for modems which use
RTS/CTS
signaling for flow control. The locking
devices are used to lock flags on ports to prevent users or programs
changing certain parameters; see the manual pages termios(4),
sio(4), and stty(1) for
information on the terminal settings, locking and initializing
devices, and setting terminal options, respectively.
FreeBSD 5.0 includes the devfs(5)
filesystem which automatically creates device nodes as
needed. If you are running a version of FreeBSD with
devfs
enabled then you can safely skip
this section.
A shell script called MAKEDEV
in the
/dev
directory manages the device special
files. To use MAKEDEV
to make dial-up device
special files for COM1
(port 0),
cd
to /dev
and issue the
command MAKEDEV ttyd0
. Likewise, to make dial-up
device special files for COM2
(port 1),
use MAKEDEV ttyd1
.
MAKEDEV
not only creates the
/dev/ttydN
device
special files, but also the
/dev/cuaaN
,
/dev/cuaiaN
,
/dev/cualaN
,
/dev/ttyldN
,
and
/dev/ttyidN
nodes.
After making new device special files, be sure to check the
permissions on the files (especially the
/dev/cua*
files) to make sure that only users
who should have access to those device special files can read and
write on them —— you probably do not want to allow your average
user to use your modems to dial-out. The default permissions on the
/dev/cua*
files should be sufficient:
crw-rw---- 1 uucp dialer 28, 129 Feb 15 14:38 /dev/cuaa1 crw-rw---- 1 uucp dialer 28, 161 Feb 15 14:38 /dev/cuaia1 crw-rw---- 1 uucp dialer 28, 193 Feb 15 14:38 /dev/cuala1
These permissions allow the user uucp
and
users in the group dialer
to use the call-out
devices.
The ttydN
(or
cuadN
) device is the
regular device you will want to open for your applications. When a
process opens the device, it will have a default set of terminal I/O
settings. You can see these settings with the command
#
stty -a -f /dev/ttyd1
When you change the settings to this device, the settings are in
effect until the device is closed. When it is reopened, it goes back to
the default set. To make changes to the default set, you can open and
adjust the settings of the “initial state” device. For
example, to turn on CLOCAL
mode, 8 bit communication,
and XON/XOFF
flow control by default for
ttyd5
, type:
#
stty -f /dev/ttyd5.init clocal cs8 ixon ixoff
System-wide initialization of the serial devices is
controlled in /etc/rc.d/serial
. This file
affects the default settings of serial devices.
On FreeBSD 4.X, system-wide initialization of the serial devices
is controlled in /etc/rc.serial
.
To prevent certain settings from being changed by an
application, make adjustments to the “lock state”
device. For example, to lock the speed of
ttyd5
to 57600 bps, type:
#
stty -f /dev/ttyd5.lock 57600
Now, an application that opens
ttyd5
and tries to change the speed of
the port will be stuck with 57600 bps.
Naturally, you should make the initial state and lock state devices
writable only by the root
account.
本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。
若有 FreeBSD 方面疑問,請先閱讀
FreeBSD 相關文件,如不能解決的話,再洽詢
<questions@FreeBSD.org>。
關於本文件的問題,請洽詢
<doc@FreeBSD.org>。