mirror of https://github.com/tLDP/LDP
updated
This commit is contained in:
parent
6d4a3642a5
commit
8d99c74588
|
@ -4032,7 +4032,7 @@ Addresses Linux localization issues specific to Serbian users
|
|||
Serial-HOWTO</ULink>,
|
||||
<CiteTitle>Serial HOWTO</CiteTitle>
|
||||
</Para><Para>
|
||||
<CiteTitle>Updated: Nov 2010</CiteTitle>.
|
||||
<CiteTitle>Updated: Feb 2011</CiteTitle>.
|
||||
Describes serial port features other than those which should be
|
||||
covered by other HOWTOs. Lists information on multiport serial cards
|
||||
and contains detailed technical information about the serial port
|
||||
|
|
|
@ -1166,7 +1166,7 @@ writers may need to know. </Para>
|
|||
Serial-HOWTO</ULink>,
|
||||
<CiteTitle>Serial HOWTO</CiteTitle>
|
||||
</Para><Para>
|
||||
<CiteTitle>Updated: Nov 2010</CiteTitle>.
|
||||
<CiteTitle>Updated: Feb 2011</CiteTitle>.
|
||||
Describes serial port features other than those which should be
|
||||
covered by other HOWTOs. Lists information on multiport serial cards
|
||||
and contains detailed technical information about the serial port
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
<!doctype linuxdoc system>
|
||||
<article>
|
||||
<title> Serial HOWTO
|
||||
<author>David S.Lawyer
|
||||
<tt><htmlurl url="mailto:dave@lafn.org" name="dave@lafn.org"></tt>
|
||||
original by Greg Hankins
|
||||
<date> v2.26 November 2010
|
||||
<date> v2.27 February 2011
|
||||
|
||||
<!-- Change log:
|
||||
2.26 Nov. 2010 Changed EIA-232 to RS-232. PCI-e bus is serial. No
|
||||
2.27 Feb. 2011: The serial port is still widely used in embedded
|
||||
systems, etc., and is not really obsolete. Better definition of
|
||||
input, output. Deleted devfs names such as tts.
|
||||
2.26 Nov. 2010: Changed EIA-232 to RS-232. PCI-e bus is serial. No
|
||||
serial port on new PCs since it's obsolete and this HOWTO is now
|
||||
mainly of historical interest.
|
||||
2.25 Jan. 2007 picocom. devfs is obsolete. ser2net. Revised parts on
|
||||
|
@ -64,50 +68,51 @@ v1.0: 6 Jan. 1994: first Serial-HOWTO by Greg Hankins
|
|||
v1.0: June 1993: was called Serial FAQ, by Greg Hankins
|
||||
-->
|
||||
<abstract>
|
||||
This document describes the now obsolete UART serial port features
|
||||
other than those which should be covered by Modem-HOWTO, PPP-HOWTO,
|
||||
Serial-Programming-HOWTO, or Text-Terminal-HOWTO. It lists info on
|
||||
multiport serial cards. It contains technical info about the serial
|
||||
port itself in more detail than found in the above HOWTOs and should
|
||||
be best for troubleshooting when the problem is the serial port
|
||||
itself. If you are dealing with a Modem, PPP (used for Internet
|
||||
access on a phone line), or a Text-Terminal, those HOWTOs should be
|
||||
consulted first. </abstract>
|
||||
This document is for the UART serial port. This port has mostly
|
||||
disappeared from desktops and laptops is still used elsewhere such as
|
||||
for embedded systems. It covers information other than that which
|
||||
should be covered by Modem-HOWTO, PPP-HOWTO, Serial-Programming-HOWTO,
|
||||
or Text-Terminal-HOWTO. It lists info on multiport serial cards. It
|
||||
contains technical info about the serial port itself in more detail
|
||||
than found in the above HOWTOs and should be best for troubleshooting
|
||||
when the problem is the serial port itself. If you are dealing with a
|
||||
Modem, PPP (used for Internet access on a phone line), or a
|
||||
Text-Terminal, those HOWTOs should be consulted first. </abstract>
|
||||
|
||||
<toc>
|
||||
<sect>Introduction
|
||||
|
||||
<p> This HOWTO covers basic info on the now obsolete serial port and
|
||||
multiport serial cards. It was written when the serial port was a
|
||||
major port for connecting a PC to other devices and the style of this
|
||||
article reflects this. It is mostly in the present tense but due to
|
||||
the historical nature of the serial port it probably should be in the
|
||||
past tense. It thus hasn't been modified to have the tone of a
|
||||
historical document. It contains much more information in it than
|
||||
most people needed to know and most people were able to use the serial
|
||||
port without reading this HOWTO. But if you're having problems with
|
||||
it or just want to understand how it worked this is one place to find
|
||||
out about it.
|
||||
<p> This HOWTO covers basic info on the serial port which is missing
|
||||
on newer personal computers but is being used in recent
|
||||
embedded systems as well as for routers, point-of-sale equipment, etc.
|
||||
It includes multiport serial cards. It was written when the serial
|
||||
port was a major port for connecting a PC to modems and printers, etc.
|
||||
and the style of this article reflects this. If you're having
|
||||
problems with the serial port, want to understand how it works, or
|
||||
need a detailed introduction to it before studying serial programming,
|
||||
this is one place to find out about it.
|
||||
|
||||
This HOWTO is about the slow original serial port which uses a UART
|
||||
This HOWTO is about the original serial port which uses a UART
|
||||
chip and is sometimes called a "UART serial port" to differentiate it
|
||||
from the newer types of serial devices: Universal Serial Bus or
|
||||
Firewire. Information specific to devices which use serial ports:
|
||||
modems, text-terminals, infrared devices, and a few printers are found
|
||||
in Modem-HOWTO, Text-Terminal-HOWTO, Infrared-HOWTO, and
|
||||
Printing-HOWTO. Info on getty (the program that runs the login
|
||||
process or the like) has been also moved to other HOWTOs since mgetty
|
||||
and uugetty are best for modems while agetty is best for
|
||||
text-terminals. If you are dealing with a modem, text terminal,
|
||||
infrared device, or printer, then you may not need to consult this
|
||||
HOWTO. But if you are using the serial port for some other device,
|
||||
using a multiport serial card, trouble-shooting the serial port
|
||||
itself, or want to understand more technical details of the serial
|
||||
port, then you may want to use this HOWTO as well as some of the other
|
||||
HOWTOs. (See <ref id="related_howtos" name="Related HOWTO's">) This
|
||||
HOWTO lists info on various multiport serial cards. This HOWTO
|
||||
addresses Linux running on PCs (ISA and/or PCI buses), although it
|
||||
might be valid for other architectures.
|
||||
Firewire. It's <ref id="slow_" name="slow">
|
||||
compared to newer serial devices but can send text several times
|
||||
faster than you can read it. Information specific to devices which
|
||||
use serial ports: analog modems, text-terminals, infrared devices, and
|
||||
a few printers are found in Modem-HOWTO, Text-Terminal-HOWTO,
|
||||
Infrared-HOWTO, and Printing-HOWTO. Info on getty (the program that
|
||||
runs the login process or the like) has been also moved to other
|
||||
related HOWTOs since mgetty and uugetty are best for modems while
|
||||
agetty is best for text-terminals. If you are dealing with a modem,
|
||||
text terminal, infrared device, or printer, then you may not need to
|
||||
consult this HOWTO. But if you are using the serial port for some
|
||||
other device, using a multiport serial card, trouble-shooting the
|
||||
serial port itself, or want to understand more technical details of
|
||||
the serial port, then you may want to use this HOWTO as well as some
|
||||
of the other HOWTOs. (See <ref id="related_howtos" name="Related
|
||||
HOWTO's">) This HOWTO lists info on various multiport serial cards.
|
||||
This HOWTO addresses Linux running on PCs (ISA and/or PCI buses),
|
||||
although it might be valid for other architectures.
|
||||
|
||||
<sect1> Copyright, Disclaimer, & Credits
|
||||
<sect2>Copyright
|
||||
|
@ -162,23 +167,27 @@ helpful. In Jan. 2006 "Charles Brockman" reviewed it for typos which
|
|||
resulted in many typos being fixed.
|
||||
|
||||
<sect1> New Versions of this Serial-HOWTO
|
||||
<p> New versions will be issued infrequently (if at all) due to the
|
||||
obsolesence of the serial port. They will be available to browse
|
||||
and/or download at LDP mirror sites see: <url
|
||||
<p> New versions will be issued perhaps every year or two. They will be
|
||||
available to browse and/or download at LDP mirror sites see: <url
|
||||
url="http://www.tldp.org/mirrors.html">. Various formats are
|
||||
available. If you only want to quickly check the date of the latest
|
||||
version look at <url
|
||||
url="http://www.tldp.org/HOWTO/Serial-HOWTO.html"> and compare it to
|
||||
this version: v2.26 November 2010 .
|
||||
this version: v2.27 February 2011 .
|
||||
|
||||
<sect1>New in Recent Versions <p> For a full revision history going
|
||||
back to the time I started maintaining this HOWTO, see the source file
|
||||
(in linuxdoc format): <url
|
||||
url="http://cvs.tldp.org/go.to/LDP/LDP/howto/linuxdoc/Serial-HOWTO.sgml?view=markup"
|
||||
name="(cvs) Serial-HOWTO.sgml"> <itemize>
|
||||
name="(cvs) Serial-HOWTO.sgml">
|
||||
<itemize>
|
||||
<item> TO do: explain use of udev for serial port for setting names
|
||||
and permissions. Fix dead links.
|
||||
<item>2.27 Feb. 2011: The serial port is still widely used in embedded
|
||||
systems, etc., and is not really obsolete. Better definition of
|
||||
input, output. Deleted devfs names such as tts.
|
||||
<item>2.26 Nov. 2010 Changed EIA-232 to RS-232. PCI-e bus is serial. No
|
||||
serial port on new PCs since it's obsolete and this HOWTO is now
|
||||
mainly of historical interest.
|
||||
serial port on new PCs. I incorrectly wrote in this update that the serial port was obsolete and that this HOWTO is now mainly of historical interest.
|
||||
<item>2.25 Jan. 2007 picocom. devfs is obsolete. ser2net. Revised
|
||||
parts on drivers as modules vs. built into kernel. Serial Programming
|
||||
wikibook.
|
||||
|
@ -199,8 +208,8 @@ explained above.
|
|||
on the Internet
|
||||
<item><tt>Serial-Programming-HOWTO</tt> helps you write
|
||||
C programs that read and write to the serial port
|
||||
and/or check/set its state. A version written by Vern
|
||||
Hoxie but not submitted to LDP is at <ref id="vern_" name="Internet">.
|
||||
and/or check/set its state. A version written by Vern Hoxie but not
|
||||
submitted to LDP is at <ref id="vern_" name="Internet section">.
|
||||
<item><tt>Text-Terminal-HOWTO</tt> is about how they work, how to install
|
||||
configure, and repair them. It includes a section on "Make a
|
||||
Terminal the Console" which is useful for using a remote terminal to
|
||||
|
@ -226,9 +235,9 @@ which is on all modern PCs.
|
|||
|
||||
Each serial port has a "file" associated with it in the /dev
|
||||
directory. It isn't really a file but it seems like one. For
|
||||
example, /dev/ttyS0 (or /dev/tts/0 for the Device File System). Other
|
||||
serial ports are /dev/ttyS1, /dev/ttyS2, etc. But ports on the USB
|
||||
bus, multiport cards, etc. have different names.
|
||||
example, /dev/ttyS0. Other serial ports are /dev/ttyS1, /dev/ttyS2,
|
||||
etc. But ports on the USB bus, multiport cards, etc. have different
|
||||
names.
|
||||
|
||||
The common specification for the conventional serial port is RS-232
|
||||
(or RS-232). So it's often called a "RS-232 serial port". The
|
||||
|
@ -246,7 +255,7 @@ The UART (Universal Asynchronous Receiver-Transmitter) chip does most
|
|||
of the work. Today, the functionality of this chip is usually built
|
||||
into another chip. See <ref id="uart_" name="What Are UARTs?"> These
|
||||
have improved over time and old models (prior to say 1994) are usually
|
||||
obsolete.
|
||||
very obsolete.
|
||||
|
||||
The serial port was originally designed for connecting external modems
|
||||
to a PC but it's used to connect many other devices also such as mice,
|
||||
|
@ -282,7 +291,9 @@ need to reserve.
|
|||
|
||||
For serial ports to be found, either the kernel must have been
|
||||
compiled with serial support, or serial support must be provided by a
|
||||
module.
|
||||
module. To check this look in the file /boot/config-2.6... and search
|
||||
for SERIAL. =m means it's a module and you may check to see the
|
||||
modules that are being used by typing: lsmod.
|
||||
|
||||
<sect> How the Hardware Transfers Bytes <label id="how_hdw_xfers">
|
||||
|
||||
|
@ -291,16 +302,17 @@ treatment of it see <ref id="fifo_" name="FIFOs">.
|
|||
|
||||
<sect1> Transmitting
|
||||
<p> Transmitting is sending bytes out of the serial port away from the
|
||||
computer. Once you understand transmitting, receiving is easy to
|
||||
understand since it's similar. The first explanation given here will
|
||||
be grossly oversimplified. Then more detail will be added in later
|
||||
explanations. When the computer wants to send a byte out the serial
|
||||
port (to the external cable) the CPU sends the byte on the bus inside
|
||||
the computer to the I/O (Input Output) address of the serial port.
|
||||
I/O is often written as just IO. The serial port takes the byte, and
|
||||
sends it out one bit at a time (a serial bit-stream) on the transmit
|
||||
pin of the serial cable connector. For what a bit (and byte) look
|
||||
like electrically see <ref id="volt_shape" name="Voltage Waveshapes">.
|
||||
computer (output). Once you understand transmitting, receiving
|
||||
(input) is easy to understand since it's similar. The first
|
||||
explanation given here will be grossly oversimplified. Then more
|
||||
detail will be added in later explanations. When the computer wants
|
||||
to send a byte out the serial port (to the external cable) the CPU
|
||||
sends the byte on the bus inside the computer to the I/O (Input
|
||||
Output) address of the serial port. I/O is often written as just IO.
|
||||
The serial port takes the byte, and sends it out one bit at a time (a
|
||||
serial bit-stream) on the transmit pin of the serial cable connector.
|
||||
For what a bit (and byte) look like electrically see <ref
|
||||
id="volt_shape" name="Voltage Waveshapes">.
|
||||
|
||||
Here's a replay of the above in a little more detail (but still very
|
||||
incomplete). Most of the work at the serial port is done by the UART
|
||||
|
@ -310,7 +322,7 @@ address. This byte gets into a 1-byte "transmit shift register" in
|
|||
the serial port. From this shift register bits are taken from the
|
||||
byte one-by-one and sent out bit-by-bit on the serial line. Then when
|
||||
the last bit has been sent and the shift register needs another byte
|
||||
to send it could just ask the CPU to send it another byte. Thus would
|
||||
to send, it could just ask the CPU to send it another byte. Thus would
|
||||
be simple but it would likely introduce delays since the CPU might not
|
||||
be able to get the byte immediately. After all, the CPU is usually
|
||||
doing other things besides just handling the serial port.
|
||||
|
@ -352,7 +364,7 @@ register and is still being transmitted bit-by-bit.
|
|||
|
||||
In review, when a byte has been fully transmitted out the transmit
|
||||
wire of the serial port and the shift register is now empty the
|
||||
following 3 things happen almost simultaneously:
|
||||
following 3 things happen in rapid succession:
|
||||
|
||||
<enum>
|
||||
<item> The next byte is moved from the transmit buffer into
|
||||
|
@ -365,7 +377,7 @@ yet another byte to the now empty transmit buffer
|
|||
Thus we say that the serial port is interrupt driven. Each time the
|
||||
serial port issues an interrupt, the CPU sends it another byte. Once
|
||||
a byte has been sent to the transmit buffer by the CPU, then the CPU
|
||||
is free to pursue some other activity until it gets the next
|
||||
is free to pursue some other activities until it gets the next
|
||||
interrupt. The serial port transmits bits at a fixed rate which is
|
||||
selected by the user (or an application program). It's sometimes
|
||||
called the baud rate. The serial port also adds extra bits to each
|
||||
|
@ -409,8 +421,8 @@ bytes from the port. For an interrupt sent when the 14th byte has
|
|||
been received, there could be 16 bytes to get if 2 more bytes have
|
||||
arrived since the interrupt. But if 3 more bytes should arrive
|
||||
(instead of 2), then the 16-byte buffer will overrun. It also may
|
||||
pick up less than 14 bytes by setting it that way or due to timeouts.
|
||||
See <ref id="fifo_" name="FIFOs"> for more details.
|
||||
pick up less than 14 bytes by setting it up that way or due to
|
||||
timeouts. See <ref id="fifo_" name="FIFOs"> for more details.
|
||||
|
||||
<sect1> The Large Serial Buffers
|
||||
<p> We've talked about small 16-byte serial port hardware
|
||||
|
@ -419,11 +431,20 @@ the CPU takes some bytes out of the receive buffer of the hardware, it
|
|||
puts them into a much larger (say 8k-byte) receive buffer in main
|
||||
memory. Then a program that is getting bytes from the serial port
|
||||
takes the bytes it's receiving out of that large buffer (using a
|
||||
"read" statement in the program). A similar situation exists for
|
||||
bytes that are to be transmitted. When the CPU needs to fetch some
|
||||
bytes to be transmitted it takes them out of a large (8k-byte)
|
||||
transmit buffer in main memory and puts them into the small 16-byte
|
||||
transmit buffer in the hardware.
|
||||
"read" statement in the program).
|
||||
|
||||
A similar situation exists for bytes that are to be transmitted. When
|
||||
the CPU needs to fetch some bytes to be transmitted it takes them out
|
||||
of a large (8k-byte) transmit buffer in main memory and puts them into
|
||||
the small 16-byte transmit buffer in the hardware. And when a program
|
||||
wants to send bytes out the serial port, it writes them to this large
|
||||
transmit buffer.
|
||||
|
||||
Both of these buffers are managed by the serial driver. But the
|
||||
driver does more than just dealing with these buffers. It also does
|
||||
limited filtering (minor modifications) of data passing thru these buffers
|
||||
and listens for control certain characters. All this is configurable
|
||||
using the <ref id="stty_" name="Stty"> program.
|
||||
|
||||
<sect> Serial Port Basics <label id="basics_">
|
||||
<!-- basics.D begin <sect> Serial Port and Modem Basics
|
||||
|
@ -455,15 +476,15 @@ name="How the Hardware Transfers Bytes"> but in greater detail.
|
|||
|
||||
<!-- ifdef SERIAL_ -->
|
||||
An I/O device is just a way to get data into and out of a computer.
|
||||
There are many types of I/O devices such as serial ports, parallel
|
||||
ports, disk drive controllers, ethernet boards, universal serial
|
||||
buses, etc.
|
||||
There are many types of I/O devices such as the older serial ports and
|
||||
parallel ports, network cards, universal serial buses (USB), and
|
||||
firewire etc.
|
||||
<!-- ifdef SERIAL_ end -->
|
||||
Most PC's have one or two serial ports. Each has a 9-pin connector
|
||||
(sometimes 25-pin) on the back of the computer. Computer programs can
|
||||
send data (bytes) to the transmit pin (output) and receive bytes from
|
||||
the receive pin (input). The other pins are for control purposes and
|
||||
ground.
|
||||
Most pre-2007 PC's have a serial port or two (on older PC's). Each
|
||||
has a 9-pin connector (sometimes 25-pin) on the back of the computer.
|
||||
Computer programs can send data (bytes) to the transmit pin (output)
|
||||
and receive bytes from the receive pin (input). The other pins are
|
||||
for control purposes and ground.
|
||||
|
||||
The serial port is much more than just a connector. It converts the
|
||||
data from parallel to serial and changes the electrical representation
|
||||
|
@ -483,8 +504,8 @@ things.
|
|||
|
||||
<sect2> Pins and Wires
|
||||
<p> Old PC's used 25 pin connectors but only about 9 pins were
|
||||
actually used so today most connectors are only 9-pin. Each of the 9
|
||||
pins usually connects to a wire. Besides the two wires used for
|
||||
actually used so later on most connectors were only 9-pin. Each of
|
||||
the 9 pins usually connects to a wire. Besides the two wires used for
|
||||
transmitting and receiving data, another pin (wire) is signal ground.
|
||||
The voltage on any wire is measured with respect to this ground. Thus
|
||||
the minimum number of wires to use for 2-way transmission of data is
|
||||
|
@ -496,8 +517,8 @@ only and not for sending bytes. All of these signals could have been
|
|||
shared on a single wire, but instead, there is a separate dedicated
|
||||
wire for every type of signal. Some (or all) of these control wires
|
||||
are called "modem control lines". Modem control wires are either in
|
||||
the asserted state (on) of +12 volts or in the negated state (off) of
|
||||
-12 volts. One of these wires is to signal the computer to stop
|
||||
the asserted state (on) of +5 volts or in the negated state (off) of
|
||||
-5 volts. One of these wires is to signal the computer to stop
|
||||
sending bytes out the serial port cable. Conversely, another wire
|
||||
signals the device attached to the serial port to stop sending bytes
|
||||
to the computer. If the attached device is a modem, other wires may
|
||||
|
@ -517,12 +538,11 @@ Industries Association) and later EIA/TIA after EIA merged with TIA
|
|||
(Telecommunications Industries Association). The EIA-232 spec
|
||||
provides also for synchronous (sync) communication but the hardware to
|
||||
support sync is almost always missing on PC's. The RS designation is
|
||||
obsolete but is still widely used and will be used in this howto for
|
||||
RS-232. Other documents may use the full EIA/TIA designation, or just
|
||||
EIA or TIA. For info on other (non-RS-232) serial ports see the
|
||||
section <ref id="non_rs232" name="Other Serial Devices (not async
|
||||
RS-232)">
|
||||
|
||||
was intended to become obsolete but is still widely used and will be
|
||||
used in this howto for RS-232. Other documents may use the full
|
||||
EIA/TIA designation, or just EIA or TIA. For info on other
|
||||
(non-RS-232) serial ports see the section <ref id="non_rs232"
|
||||
name="Other Serial Devices (not async RS-232)">
|
||||
<!-- ifdef SERIAL_ end -->
|
||||
|
||||
<sect1> IO Address & IRQ
|
||||
|
@ -976,28 +996,29 @@ See <ref id="set_serial" name="What is Setserial"> for more info on
|
|||
<!-- basics.D end -->
|
||||
|
||||
|
||||
<sect> The Serial Port is Now Obsolete
|
||||
<sect1> Introduction
|
||||
<p> The serial port is today (2010) obsolete (and often called a "legacy"
|
||||
device) but it is still in use on some older computers, especially for
|
||||
Linux. The serial port has many shortcomings and after about 2005
|
||||
most new PC's no longer had them. Most laptops and Macs discontinued
|
||||
them even earlier. During the era when some new PC's came with serial
|
||||
ports and others didn't, the PC's that didn't have serial ports were
|
||||
called "legacy-free". However, while PC's today no longer have serial
|
||||
ports, some do have them built into a modem (which plugs into a
|
||||
telephone line). Such a serial port only works with the modem and
|
||||
can't be used for any other device. The reason they have such a
|
||||
"built in" serial port is that analog modems are designed to only work
|
||||
thru a serial port.
|
||||
<sect1> The Serial Port is Now Obsolete on PCs <p> The serial port is
|
||||
today (2011) sort of obsolete on PCs (and often called a "legacy"
|
||||
device) but it is still in use on some older computers and is used in
|
||||
imbedded systems, for communication with routers and point-of-sale
|
||||
equipment, etc. The serial port is <ref id="slow_" name="slow">
|
||||
and after about 2005 most new PC's no longer had them. Most laptops
|
||||
and Macs discontinued them even earlier. During the era when some new
|
||||
PC's came with serial ports and others didn't, the PC's that didn't
|
||||
have serial ports were euphemistically called "legacy-free". However,
|
||||
while PC's today no longer have serial ports, some do have them built
|
||||
into a "legacy" modem (which plugs into a telephone line). Such a serial port
|
||||
only works with the modem and can't be used for any other device. The
|
||||
reason they have such a "built in" serial port is that analog modems
|
||||
are designed to only work thru a serial port.
|
||||
|
||||
The physical serial port on the back of an old PC, must pass data between
|
||||
the computer and an external cable. Thus it has two interfaces: the
|
||||
serial-port-to cable and the serial-port-to-computer-bus. Both of
|
||||
these interfaces are slow. First we'll consider the interface via
|
||||
external cable to the outside world.
|
||||
The physical serial port on the back of a PC (including the chip its
|
||||
connected to inside the PC), must pass data between the computer and
|
||||
an external cable. Thus it has two interfaces: the serial-port-to
|
||||
cable and the serial-port-to-computer-bus. Both of these interfaces
|
||||
are slow. First we'll consider the interface via external cable to
|
||||
the outside world.
|
||||
|
||||
<sect1> RS-232 Cable Is Low Speed & Short Distance
|
||||
<sect1> RS-232 Cable Is Low Speed & Short Distance <label id="slow_">
|
||||
<p> The conventional RS-232 serial port is inherently low speed and
|
||||
is severely limited in distance. Ads often read "high speed" but it
|
||||
can only work at "high speed" over very short distances such as to a
|
||||
|
@ -1023,7 +1044,7 @@ transmission was apparently not recognized. The result was that since
|
|||
the serial port couldn't handle high speeds, new types of serial
|
||||
interfaces were devised that could: Ethernet, USB, Firewire, etc.
|
||||
The final outcome was the demise of the serial port which due to it's
|
||||
ancient technology became obsolete.
|
||||
ancient technology became obsolete for high speed uses.
|
||||
|
||||
<sect1> Inefficient PCI Interface to the Computer (in some cases)
|
||||
|
||||
|
@ -1088,15 +1109,20 @@ supplied as a module. For the 2.6 kernels on, most drivers are
|
|||
supplied both ways: as a module or it can be built into the kernel.
|
||||
Take care not to both build support into the kernel and force the
|
||||
module to load for a certain serial card. For older kernels, there
|
||||
were often no modules for dumb serial multiport boards.
|
||||
were often no modules for dumb serial multiport boards so support was
|
||||
built into the kernel.
|
||||
|
||||
<sect2> Build support into the kernel?
|
||||
<sect2> Build (compile) support into the kernel?
|
||||
<p>A pre-compiled kernel may not have a driver for your multiport card
|
||||
built in. So then you must either compile the kernel yourself and
|
||||
build in the right driver, or insure that the module is available and
|
||||
loads. Of course if the driver doesn't come both ways (as a
|
||||
compile-time option and as a module) you have no such choice.
|
||||
|
||||
If you want to see what has already been compiled into an existing
|
||||
working kernel, go the the /boot directory (or wherever the compiled
|
||||
kernel(s) reside) and look in the config... file.
|
||||
|
||||
In the 2.6 kernel there are many options to select from in the
|
||||
configuration file for compiling. Adding support for certain
|
||||
multiport cards is listed under the headings "Character devices" or
|
||||
|
@ -1104,7 +1130,7 @@ multiport cards is listed under the headings "Character devices" or
|
|||
serial driver and are found under "Serial Drivers". More advanced
|
||||
cards have their own driver found under "Character devices"
|
||||
|
||||
For kernel 2.6 you should select "CONFIG_SERIAL_8250_EXTENDED". (or
|
||||
For compiling kernel 2.6 you should select "CONFIG_SERIAL_8250_EXTENDED". (or
|
||||
just "CONFIG_SERIAL_EXTENDED" for 2.4). Then you will be asked more
|
||||
questions about your serial ports with more options to select. If the
|
||||
resulting configuration is not quite right, then you may need to edit
|
||||
|
@ -1113,14 +1139,15 @@ the kernel configuration file manually.
|
|||
<sect2> Using module support <label id="modules_">
|
||||
<p>A pre-compiled kernel may come with a pre-compiled module for the
|
||||
board so that you don't need to recompile the kernel. This module
|
||||
must be loaded in order to use it, but the kernel may automatically do
|
||||
this for you if a program is trying to use a device on the smart board
|
||||
(provided there exists a table showing which module to load for the
|
||||
device). This table may be in /etc/modules.conf and/or be internal to
|
||||
the kernel. Also certain parameters may need to be passed to the
|
||||
driver (via lilo's "append" command, via grub's "kernel" command, or
|
||||
via /etc/modules.conf). For kernel 2.6 (and 2.4) the modules should
|
||||
be found in <tt>/lib/modules/.../kernel/drivers/char.</tt>
|
||||
must be loaded in order to use it and if there is installation
|
||||
software for the driver, it should also set up Linux to load the
|
||||
module (probably at boottime). Some of the modules to load at
|
||||
boottime are listed in /etc/modules or /etc/modules.conf
|
||||
Also certain parameters may need to be passed
|
||||
to the driver via entries in these files or via lilo's "append"
|
||||
command or via grub's "kernel" command. For kernel 2.6 (and 2.4) the
|
||||
(unloaded) modules should be found in
|
||||
<tt>/lib/modules/.../kernel/drivers/char.</tt>
|
||||
|
||||
<sect2> Getting info on multiport boards
|
||||
<p> The board's manufacturer should have info on their website.
|
||||
|
@ -1139,9 +1166,9 @@ The serial ports your multiport board uses depends on what kind of
|
|||
board you have. Some have their own device names like /dev/ttyE27
|
||||
(Stallion) or /dev/ttyD2 (Digiboard), etc. For various other brands,
|
||||
see see devices.txt in the kernel documentation. Some use the
|
||||
standard names like /dev/ttyS14 (/dev/tts/14) and may be found in
|
||||
configuration files that used as arguments to <tt>setserial</tt>.
|
||||
Such files may be included in a setserial or serial package.
|
||||
standard names like /dev/ttyS14 and may be found in configuration
|
||||
files that used as arguments to <tt>setserial</tt>. Such files may be
|
||||
included in a setserial or serial package.
|
||||
|
||||
<sect1> Making Legacy Multiport Devices in the /dev Directory
|
||||
<label id="make_multi">
|
||||
|
@ -1182,15 +1209,15 @@ linux# mknod -m 666 /dev/ttyS17 c 4 81
|
|||
<sect1>Standard PC Serial Cards
|
||||
|
||||
<p> In olden days, PCs came with a serial card installed. Later on,
|
||||
the serial function was put on the hard-drive interface card. Today,
|
||||
one or two serial ports are usually built into the motherboard
|
||||
(on-board). Most of them (as of 2002) use a 16550 but some use 16650
|
||||
(32-byte FIFOs). But one may still buy the individual PC serial cards
|
||||
if they need more serial ports. They can be used to connect external
|
||||
serial devices (modems, serial mice, etc...). Only a tiny percentage
|
||||
of retail computer stores carry such cards. But one can purchase them
|
||||
on the Internet. Before getting one for the PCI bus, make sure Linux
|
||||
supports it.
|
||||
the serial function was put on the hard-drive interface card. In the
|
||||
1990s and early 2000s one or two serial ports were usually built into
|
||||
the motherboard (on-board). Most of them (as of 2002) use a 16550 but
|
||||
some use 16650 (32-byte FIFOs). But one may still buy the individual
|
||||
PC serial cards if they need more serial ports. They can be used to
|
||||
connect external serial devices (modems, serial mice, etc...). Only a
|
||||
tiny percentage of retail computer stores carry such cards. But one
|
||||
can purchase them on the Internet. Before getting one for the PCI
|
||||
bus, make sure Linux supports it.
|
||||
|
||||
Here's a list of a few popular brands:
|
||||
<itemize>
|
||||
|
@ -1201,9 +1228,9 @@ Here's a list of a few popular brands:
|
|||
</itemize>
|
||||
<p>
|
||||
Note: due to address conflicts, you may not be able to use /dev/ttyS3
|
||||
(tts/3) with a IBM8514 video card (and some others) simultaneously.
|
||||
See <ref id="video_8514" name="Avoiding IO Address Conflicts with Certain
|
||||
Video Boards">
|
||||
with a IBM8514 video card (and some others) simultaneously. See <ref
|
||||
id="video_8514" name="Avoiding IO Address Conflicts with Certain Video
|
||||
Boards">
|
||||
|
||||
<sect1>Dumb Multiport Serial Boards (with standard UART chips)
|
||||
<p> They are also called "serial adapters". Each port has its own
|
||||
|
@ -1237,6 +1264,7 @@ configuring<newline>
|
|||
url="http://digital.natinst.com/manuals.nsf/web%2Fbyproductcurrent?OpenView&Start=1&Count=500&Expand=15.1#15.1" name="NI-SERIAL"> by National Instruments
|
||||
<item>NetBus (2 ports)<url url="http://www.netbus.com"> using patch from
|
||||
<url url="http://lists.insecure.org/linux-kernel/2001/Feb/2809.html">
|
||||
Discontinued.
|
||||
<item>PC-COMM (4 ports) <item><url url="http://www.sealevel.com"
|
||||
name="Sealevel Systems">
|
||||
COMM-2 (2 ports), COMM-4 (4 ports) and COMM-8 (8 ports)
|
||||
|
@ -1269,7 +1297,7 @@ COM8=0x268.
|
|||
<p>
|
||||
Make sure that a Linux-compatible driver is available and read the
|
||||
information that comes with it. These boards use special devices (in
|
||||
the /dev directory), and not the standard tts ones. This information
|
||||
the /dev directory), and not the standard ttyS ones. This information
|
||||
varies depending on your hardware. If you have updated info which
|
||||
should be shown here please email it to me.
|
||||
|
||||
|
@ -1282,21 +1310,22 @@ find instructions on this (possibly in the source code tree).
|
|||
|
||||
There are many different brands, each of which often offers many
|
||||
different cards. No attempt is currently being made to list all the
|
||||
cards here (and many listed are obsolete). But all major brands and
|
||||
websites should be shown here so it something is missing let me know.
|
||||
Go to the webpage shown for more information. These websites often
|
||||
also have info (ads) on related hardware such as modem pools, remote
|
||||
access servers (RASs), and terminal servers. Where there is no
|
||||
webpage, the cards are likely obsolete. If you would like to put
|
||||
together a better list, let me know.
|
||||
cards here (and many listed are obsolete and have bad internet links
|
||||
to them which need to be fixed). But all major brands and websites
|
||||
should be shown here so it something is missing let me know. Go to
|
||||
the webpage shown for more information. These websites often also
|
||||
have info (ads) on related hardware such as modem pools, remote access
|
||||
servers (RASs), and terminal servers. Where there is no webpage, the
|
||||
cards are likely obsolete. If you would like to put together a better
|
||||
list, let me know.
|
||||
|
||||
<itemize>
|
||||
<item>Chase Research, now Perle Systems Ltd (UK based, ISA/PCI cards)<newline>
|
||||
webpage: <tt><url url="http://www.perle.com"></tt><newline>
|
||||
driver status: included in kernel 2.4+ for PCI only; otherwise supported by
|
||||
Perle<newline>
|
||||
driver location: <url
|
||||
url="http://www.perle.com/downloads/multi_port.html"> <newline>
|
||||
driver and manual location: <url
|
||||
url="http://www.perle.com/downloads/multi_port.shtml"> <newline>
|
||||
|
||||
<item>Comtrol RocketPort (36MHz ASIC; 4, 8, 16, 32, up to 128 ports)<newline>
|
||||
webpage: <tt><htmlurl url="http://www.comtrol.com"
|
||||
|
@ -1392,8 +1421,8 @@ url="http://www.perle.com/downloads/multi_port.html"> <newline>
|
|||
name="http://www.nyx.net/˜arobinso"></tt>
|
||||
|
||||
<item>Intelligent Serial Interface by Multi-Tech Systems<newline>
|
||||
PCI: 4 or 8 port. ISA 8 port. DTE speed 460.8k<newline>
|
||||
webpage: <url url="http://www.multitech.com/products/">
|
||||
PCI: 4 or 8 port. ISA 8 port. DTE speed 460.8k. Discontinued<newline>
|
||||
webpage: <url url="http://www.multitech.com/en_US/products/">
|
||||
|
||||
<item>Maxpeed SS (Toshiba; 4, 8 and 16 ports)<newline>
|
||||
website: <tt><htmlurl url="http://www.maxpeed.com"
|
||||
|
@ -1449,33 +1478,31 @@ url="http://www.perle.com/downloads/multi_port.html"> <newline>
|
|||
driver location: <tt><htmlurl
|
||||
url="ftp://ftp.stallion.com/drivers/ata5/Linux"
|
||||
name="ftp://ftp.stallion.com/drivers/ata5/Linux"></tt> and
|
||||
included in linux kernel since 1.3.27
|
||||
included in linux kernel since 1.3.27. Moved: it's now at ?.
|
||||
|
||||
moved; it's now at
|
||||
|
||||
<item>System Base
|
||||
<item>System Base
|
||||
website: <url url="http://www.sysbas.com/">
|
||||
</itemize>
|
||||
|
||||
<p>A review of Comtrol, Cyclades, Digi, and Stallion products was
|
||||
printed in the June 1995 issue of the <EM/Linux Journal/. The article
|
||||
is available at <tt><url url="
|
||||
http://www.linuxjournal.com/article.php?sid=1097">
|
||||
|
||||
name="http://www.ssc.com/lj/issue14"></tt>.
|
||||
|
||||
Besides the listing of various brands of multiports found above in
|
||||
this HOWTO there is <url url="http://eupedia.org/serialcards.html"
|
||||
name="Gary's Encyclopedia - Serial Cards">. It's not as complete, but
|
||||
may have some different links.
|
||||
is available at <url url= "http://m.linuxjournal.com/article/1097"
|
||||
name="Review: Intelligent Multiport Serial Boards"> Besides the
|
||||
listing of various brands of multiports found above in this HOWTO
|
||||
there is <url url="http://eupedia.org/serialcards.html" name="Gary's
|
||||
Encyclopedia - Serial Cards">. It's not as complete, but may have
|
||||
some different links.
|
||||
|
||||
<sect1> Unsupported Multiport Boards
|
||||
<p> The following boards don't mention any Linux support as of 1 Jan.
|
||||
2000. Let me know if this changes.
|
||||
<p> The following brands that formerly made boards for with Linux
|
||||
support don't mention any Linux support as of 1 Jan. 2000. Let me
|
||||
know if this changes.
|
||||
<itemize>
|
||||
<item> Aurora (PCI only) <url url="www.auroratech.com">
|
||||
<item> <url url="http://sie-cs.com/en/browse/product/serial-io"
|
||||
name="Aurora (PCI only)">
|
||||
</itemize>
|
||||
|
||||
|
||||
<sect>Servers for Serial Ports
|
||||
<p>A computer that has many serial ports (with many serial cables
|
||||
connected to it) is often called a server. Of course, most servers
|
||||
|
@ -1540,14 +1567,16 @@ the port (such as a modem or printer).
|
|||
|
||||
Resource allocation (locating the hardware or low-level configuring)
|
||||
is assigning each port an IO address, IRQ, and name (such as ttyS2).
|
||||
This IO-IRQ pair must be set in both the hardware and told to the
|
||||
serial. We might just call this "io-irq" configuring for short. The
|
||||
"setserial" program is sometimes used to tell the driver. PnP
|
||||
methods, jumpers, etc, are used to set the IO and IRQ in the hardware.
|
||||
Details will be supplied later. If you need to configure but don't
|
||||
understand certain details it's easy to get into trouble. See <ref
|
||||
id="locate_port" name="Locating the Serial Port: IO address IRQs">
|
||||
<ref id="set_serial" name="What is Setserial">
|
||||
This IO-IRQ pair must be set in both the hardware and
|
||||
become known to the serial driver. We might just call this "io-irq"
|
||||
configuring for short. The "setserial" program is sometimes used to
|
||||
tell the driver io-irq info that an administrator has put in a
|
||||
configuration file or given as parameters to the setserial command.
|
||||
PnP methods, jumpers, etc, are used to set the IO and IRQ in the
|
||||
hardware. Details will be supplied later. If you need to configure
|
||||
but don't understand certain details it's easy to get into trouble.
|
||||
See <ref id="locate_port" name="Locating the Serial Port: IO address
|
||||
IRQs"> <ref id="set_serial" name="What is Setserial">
|
||||
|
||||
The second part (high-level configuring) is assigning it a speed (such
|
||||
as 115.2k bits/sec), selecting flow control, etc. This is often
|
||||
|
@ -1626,7 +1655,7 @@ driver but sometimes you have to do it yourself. What follows repeats
|
|||
what was said above but in more detail.
|
||||
|
||||
The low-level configuring consists of assigning an IO address, IRQ,
|
||||
and names (such as ttyS2 = tts/2). This IO-IRQ pair must be set in
|
||||
and names (such as ttyS2) . This IO-IRQ pair must be set in
|
||||
both the hardware and told to the serial driver. And the driver needs
|
||||
to call this pair a name (such as ttyS2). We could call this "io-irq"
|
||||
configuring for short. The modern way to do this is for the driver to
|
||||
|
@ -1724,7 +1753,6 @@ message (use <tt/dmesg/ to see it). But if you don't have a "file"
|
|||
/dev/ttyS4 then the port will not work. So you will then need to
|
||||
create it, using<newline>
|
||||
<tt>cd /dev; ./MAKEDEV ttyS4</tt><newline>
|
||||
For the device filesystem, the driver should create the device <tt>tts/1</tt>
|
||||
|
||||
<!--
|
||||
<sect2> Requesting that future drivers support your serial port
|
||||
|
@ -2304,8 +2332,8 @@ stty crtscts < /dev/ttyS2
|
|||
the serial port for hardware flow control. Note that RTS+CTS almost
|
||||
spells: <tt/crtscts/ and the initial "c" means "control".
|
||||
|
||||
<sect> Serial Port Devices /dev/tts/2 = /dev/ttyS2, etc. <label id="ttySN_">
|
||||
<!-- dev_names.D begin
|
||||
<sect> Serial Port Devices /dev/ttyS2, etc. <label id="ttySN_">
|
||||
<!-- serial_names.D begin
|
||||
in Modem and Serial HOWTOs
|
||||
Nov. 2003: rewrite
|
||||
May 2003: PCI uses higher numbers
|
||||
|
@ -2313,14 +2341,15 @@ Nov. 2004: All-PCI slot motherboards may not use PCI serial ports
|
|||
Apr. 2006: ttyS2 may be used on PCI cards instead of ttyS4 or ttyS14.
|
||||
Aug. 2006: udev uses old names
|
||||
Dec. 2006: cleaned up on above
|
||||
Feb. 2010: moved devfs info to obsolete section of Serial-Howto
|
||||
<sect> Serial Port Devices /dev/ttyS2, etc. -->
|
||||
|
||||
<sect1>Serial Port Names: ttyS4, etc
|
||||
<p>Once upon a time the names of the serial ports were simple. Except
|
||||
for some multiport serial cards they were named /dev/ttyS0,
|
||||
/dev/ttyS1, etc. Then around the year 2000 came the USB bus with
|
||||
names like /dev/ttyUSB0 and /dev/ttyACM1 (for the ACM modem on the USB
|
||||
bus).
|
||||
<p>Common serial port names are /dev/ttyS0, /dev/ttyS1, etc. Then
|
||||
around the year 2000 came the USB bus with names like /dev/ttyUSB0 and
|
||||
/dev/ttyACM1 (for the ACM modem on the USB bus). Multiport serial
|
||||
card used somewhat differnt names (depending on the brand) such as
|
||||
/dev/ttyE5.
|
||||
|
||||
<sect1>The PCI Bus
|
||||
<p>Since DOS provided for 4 serial ports on the old ISA bus:
|
||||
|
@ -2403,57 +2432,7 @@ discouraged since lock files might not realize that it was really say
|
|||
<tt>/dev/ttyS2</tt>. The newer lock file system doesn't fall into
|
||||
this trap so it's now OK to use such links.
|
||||
|
||||
<sect1>Devfs (The Improved but Obsolete Device File System)
|
||||
|
||||
<p>Kernel 2.4 introduced the now obsolete optional "device file system"
|
||||
(devfs) with a whole new set of names for everything. But in 2003-4,
|
||||
it was claimed that devfs had unsolvable problems and starting with
|
||||
kernel 2.6.12 it was replaced with "udev" (kernels prior to 2.6.12
|
||||
also could use udev but with some problems). Although udev doesn't
|
||||
provide all the functionality of devfs, it does handle hot plugging.
|
||||
Also, the use of udev isn't required to run Linux so some people don't
|
||||
use it. But many distributions install it by default.
|
||||
|
||||
Devfs was a good idea and was claimed to be more efficient than udev.
|
||||
But unfortunately, the author of devfs didn't maintain it for long and
|
||||
it allegedly became not too well maintained. So for better or worse
|
||||
we now have udev instead although the debate of devfs vs. udev still
|
||||
continues. For a detailed description of devfs see: <url
|
||||
url="http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.html"> Also see
|
||||
the kernel documentation tree: filesystems/devfs.
|
||||
|
||||
The names of devices for the devfs can be used in udev, but usually
|
||||
are not and may not be simple to activate. Here's the devfs names for
|
||||
serial devices: ttyS1 becomes tts/1, ttyUSB1 becomes /usb/tts/1, and
|
||||
ttyACM1 is /usb/acm/1. Note that the number 1 above is just an
|
||||
example. It could be replaced by 0, 2, 3, 4, etc. Some more examples
|
||||
of udev names: ttyS2 becomes tts/2 (Serial port), tty3 becomes vc/3
|
||||
(Virtual Console), ptyp1 becomes pty/m1 (PTY master), ttyp2 becomes
|
||||
pty/s2 (PTY slave). "tts" looks like a directory which contains
|
||||
devices "files": 0, 1, 2, etc. All of these new names should still be
|
||||
in the /dev directory although optionally one may put them elsewhere.
|
||||
|
||||
For devfs device names in the /dev directory are created automatically
|
||||
by the corresponding driver. Thus, if serial support comes from a
|
||||
module and that module isn't loaded yet, there will not be any serial
|
||||
devices in the /dev directory. This can be confusing: you physically
|
||||
have serial ports but don't see them in the /dev directory. However,
|
||||
if a device name is told to a communication program and the serial
|
||||
module isn't loaded, the kernel is supposed to try to find a driver
|
||||
for it and create a name for it in the /dev directory.
|
||||
|
||||
This works OK if it finds a driver. But suppose there is no driver
|
||||
found for it. For example, if you try to use "setserial" to configure
|
||||
a port that the driver failed to detect, it claims there is no such
|
||||
port. How does one create a devfs port in this case?
|
||||
|
||||
For multiport devices for example, /dev/ttyF9 becomes /dev/ttf/9, or
|
||||
in a later version /dev/tts/F9. Substitute for F (or f) whatever
|
||||
letter(s) your multiport board uses for this purpose. A multiport
|
||||
driver is supposed to create a devfs name similar to the above and put
|
||||
it into the /dev directory
|
||||
|
||||
<!-- dev_names.D end -->
|
||||
<!-- serial_names.D end -->
|
||||
|
||||
|
||||
<sect1> Which Connector on the Back of my PC is ttyS1, etc? <label
|
||||
|
@ -2585,9 +2564,9 @@ Text-Terminal-HOWTO.
|
|||
control lines and indicate if they are positive (1 or green) or
|
||||
negative (0 or red).
|
||||
<itemize>
|
||||
<item> <url url="http://serlook.sunsite.dk/" name="serlook"> can snoop
|
||||
on serial line traffic (via a wiretap) and also send/receive on a
|
||||
serial line.
|
||||
<item> <url url="http://sourceforge.net/projects/serlook/files/"
|
||||
name="serlook"> can snoop on serial line traffic (via a wiretap) and
|
||||
also send/receive on a serial line.
|
||||
<item> The "file": /proc/tty/driver/serial lists those that are
|
||||
asserted (positive voltage)
|
||||
<item> modemstat (Only works correctly on Linux PC consoles.) Status
|
||||
|
@ -3086,7 +3065,8 @@ you may not need to use it much. It's handy if you're having problems
|
|||
or want to see how the port is set up. Try typing ``stty -a'' at your
|
||||
terminal/console to see how it's now set. Also try typing it without
|
||||
the -a (all) for a short listing which shows how it's set different
|
||||
than normal. Don't try to learn all the setting unless you want to
|
||||
than "normal" which is how it's set using the command <tt>"stty
|
||||
sane"</tt>. Don't try to learn all the setting unless you want to
|
||||
become a serial historian since many of the settings are only for slow
|
||||
antique dumb terminals of the 1970's. Most of the defaults should
|
||||
work OK.
|
||||
|
@ -3094,9 +3074,23 @@ work OK.
|
|||
<tt/stty/ is documented in the man pages with a more detailed account
|
||||
in the info pages. Type <tt>"man stty"</tt> or <tt>"info stty"</tt>.
|
||||
|
||||
Many of the stty options start with an "o" (output) or an "i" (input).
|
||||
For example: <tt/onlcr/. Output is the flow of bytes out of the
|
||||
computer while input is the flow of bytes into the computer. The
|
||||
"point of view" is the computer, not the serial port or the device
|
||||
connected to the serial port. For example, received input data comes
|
||||
in on a cable and goes to the serial port chip. This chip, after
|
||||
converting the bits from the serial to parallel representation, then
|
||||
sends it (via a program read) to the large serial port buffer in main
|
||||
computer memory. Thus the chip has both input and output but since
|
||||
it's input data to the computer, its output is considered to be input.
|
||||
The situation is similar for output flowing thru this chip. The
|
||||
"input" and "output" refer to the direction of flow with respect to the
|
||||
computer and not the serial port hardware (the chip).
|
||||
|
||||
Whereas <tt/setserial/ only deals with actual serial ports, stty is
|
||||
used both for serial ports and for virtual terminals such as the standard
|
||||
Linux text interface at a PC monitor. For the PC monitor, many of the
|
||||
Linux text interface on a PC monitor. For the PC monitor, many of the
|
||||
stty settings are meaningless. Changing the baud rate, etc. doesn't
|
||||
appear to actually do anything.
|
||||
|
||||
|
@ -3554,16 +3548,6 @@ still present in 2005. For dumb terminals, lockfiles are not used
|
|||
since this would not permit someone else to send a message to your
|
||||
terminal using the write or talk program.
|
||||
|
||||
<sect1>Lock-Files if you use devfs
|
||||
<p> The abandoned device-filesystem (devfs) has the /dev directory with
|
||||
subdirectories. As of late 2001, there were problems with lockfiles.
|
||||
For example, the lockfile mechanism considered dev/usb/tts/0 and
|
||||
/dev/tts/0 to be the same device with name "0". Ditto for all other
|
||||
devices that had the same "leaf" name.
|
||||
Also, if some applications use the old name for a device and other
|
||||
applications use the devfs name for the same device, then the
|
||||
lockfiles will have different names. But the serial driver should
|
||||
know they are the same.
|
||||
|
||||
<sect1> Change Owners, Groups, and/or Permissions of Device Files
|
||||
<p> In order to use a device, you (or the program you run if you have
|
||||
|
@ -3659,10 +3643,10 @@ But sometimes you need to configure Linux to load certain modules or
|
|||
gives parameters to the module or to the kernel.
|
||||
|
||||
Such parameters may be supplied to certain modules on the command line
|
||||
for the kernel or in /etc/modules.conf or /etc/modprobe.conf. Since
|
||||
kernel 2.2 you don't edit this file but use the program update-modules
|
||||
to change it. The info that is used to update modules.conf is put in
|
||||
/etc/modutils/.
|
||||
for the kernel or in /etc/modules, /etc/modules.conf or
|
||||
/etc/modprobe.conf. Since kernel 2.2 you don't edit the modprobe.conf
|
||||
file but use the program update-modules to change it. The info that
|
||||
is used to update modules.conf is put in /etc/modutils/.
|
||||
|
||||
The Debian/GNU Linux has a file named /etc/modutils/setserial which
|
||||
runs the serial script in /etc/init.d/ every time the serial module is
|
||||
|
@ -4169,8 +4153,8 @@ is Setserial">
|
|||
<p> This is an overrun of the hardware FIFO buffer and you can't
|
||||
increase its size. Bug note (reported in 2002): Due to a bug in some
|
||||
kernel 2.4 versions, the port number may be missing and you will only
|
||||
see "ttyS" (no port number). But if devfs notation such as "tts/2" is
|
||||
being used, there is no bug. See <ref id="higher_thruput" name="Higher Serial Thruput">.
|
||||
see "ttyS" (no port number). But if devfs notation such as "tts/2"
|
||||
was being used, there was no bug. See <ref id="higher_thruput" name="Higher Serial Thruput">.
|
||||
|
||||
|
||||
|
||||
|
@ -4917,12 +4901,11 @@ the next byte.
|
|||
<p> A number of EIA (or RS) standards have been established for higher
|
||||
speeds and longer distances using twisted-pair (balanced) technology.
|
||||
Balanced transmission make possible higher speeds, and can be a
|
||||
hundred times faster than unbalanced RS-232. For a given speed, the
|
||||
thousand times faster than unbalanced RS-232. For a given speed, the
|
||||
distance (maximum cable length) may be many times longer with twisted
|
||||
pair. But PC's keep being made with the "obsolete" RS-232 since it
|
||||
works OK with modems and mice since the cable length is short. If
|
||||
this appears in the latest version of this HOWTO, please let me know
|
||||
if any of the non-RS-232 listed below are supported by Linux.
|
||||
pair. But PC's, prior to about 2004??, kept being made with the
|
||||
quasi-obsolete RS-232 since it works OK with modems and mice since the
|
||||
cable length is short.
|
||||
|
||||
High speed serial ports (over 460.8 kbps) will often support both
|
||||
RS-232 and EIA-485/EIA-422 (RS-485/RS-422) modes . (Note that for
|
||||
|
@ -5030,7 +5013,7 @@ and look at the file: usb-serial.txt. The modules that support usb
|
|||
serial devices are found in the modules tree:
|
||||
kernel/drivers/usb/serial. It would be nice to have a HOWTO on the
|
||||
USB. See also <url url="http://www.linux-usb.org"> and/or <url
|
||||
url="http://.www.qbik.ch/usb/">.
|
||||
url="http://www.qbik.ch/usb/">.
|
||||
|
||||
<sect1> Firewire
|
||||
<p> Firewire (IEEE 1394) is something like the USB only faster (800
|
||||
|
@ -5159,7 +5142,7 @@ Notes re books:
|
|||
<url url="http://www.ibiblio.org/pub/Linux/system/serial/"
|
||||
name="Serial Software"> for Linux software for the serial ports
|
||||
including getty and port monitors.<newline>
|
||||
<url url="http://www.ibiblio.org/pub/Linux/apps/serialcomm"
|
||||
<url url="http://www.ibiblio.org/pub/Linux/system/serial/"
|
||||
name="Serial Communications"> for communication programs.
|
||||
|
||||
<itemize>
|
||||
|
@ -5176,7 +5159,7 @@ Monitoring/Diagnostics">
|
|||
<p>
|
||||
<itemize>
|
||||
<item>man pages for: <tt>setserial</tt> and <tt/stty/
|
||||
<item> <url url="www.gnu.org/manual/glibc/html_chapter/libc_12.html"
|
||||
<item> <url url="http://www.gnu.org/manual/glibc/html_chapter/libc_12.html"
|
||||
name="Low-Level Terminal Interface"> part of "GNU C Library Reference
|
||||
manual" (in libc (or glibc) docs package). It covers the detailed
|
||||
meaning of "stty" commands, etc.
|
||||
|
@ -5189,16 +5172,6 @@ meaning of "stty" commands, etc.
|
|||
<item>UUCP-HOWTO: for information on setting up UUCP
|
||||
</itemize>
|
||||
|
||||
<sect1> Usenet newsgroups:
|
||||
<p>
|
||||
<itemize>
|
||||
<item> comp.os.linux.answers
|
||||
<item> comp.os.linux.hardware: Hardware compatibility with the Linux
|
||||
operating system.
|
||||
<item> comp.os.linux.networking: Networking and communications under Linux.
|
||||
<item> comp.os.linux.setup: Linux installation and system administration.
|
||||
</itemize>
|
||||
|
||||
<sect1> Serial Mailing List
|
||||
<p>
|
||||
The Linux serial mailing list. To join, send email to <tt><htmlurl
|
||||
|
@ -5212,11 +5185,12 @@ meaning of "stty" commands, etc.
|
|||
<sect1> Internet
|
||||
<p>
|
||||
<itemize>
|
||||
<item> <url url="http://en.wikipedia.org/wiki/Serial_port" name
|
||||
="Serial port - Wikipedia">
|
||||
<item> <url url="http://serial.sourceforge.net/" name="Linux Serial
|
||||
Driver home page"> Includes info about PCI support.
|
||||
<!--
|
||||
<item> <label id="vern_"> Serial Suite by
|
||||
Vern Hoxie was a collection of blurbs about the
|
||||
<item> Serial Suite by Vern Hoxie was a collection of blurbs about the
|
||||
care and feeding of the Linux serial port plus some simple programs.
|
||||
Not available.
|
||||
-->
|
||||
|
@ -5250,12 +5224,12 @@ name="Serial and UART Tutorial (FreeBSD)">
|
|||
modern 16550As (usually called just 16550's) with FIFOs. If you have
|
||||
something really old (pre 1990), the chip may unplug so that you may
|
||||
be able to upgrade by finding a plug-in 16550A chip and replacing your
|
||||
existing 16450 UART. If the functionality has been built into another
|
||||
type of chip, you are out of luck. If the UART is socketed, then
|
||||
upgrading would be easy if you could find a replacement. The new and
|
||||
old are pin-to-pin compatible. It may be more feasible to just buy a
|
||||
new serial card on the Internet (few retail stores stock them today)
|
||||
or find a used one.
|
||||
old existing 16450 UART. If the functionality has been built into
|
||||
another type of chip, you are out of luck. If the UART is socketed,
|
||||
then upgrading would be easy if you could find a replacement. The new
|
||||
and old are pin-to-pin compatible. It may be more feasible to just
|
||||
buy a new serial card on the Internet (few retail stores stock them
|
||||
as of 2000) or find a used one.
|
||||
|
||||
<sect1>Two Ports with the Same IO address
|
||||
<p>Modern kernels should not allow the opening of ports with the same
|
||||
|
@ -5297,4 +5271,70 @@ analogous to the lower cost of an internal modem for a desktop PC as
|
|||
compared to the higher cost (and more cabling) for an external modem.
|
||||
See Modem-HOWTO: Modem Pools, Digital Modems.
|
||||
|
||||
<sect1>Lock-Files if you used the depreciated devfs
|
||||
<p> The abandoned device-filesystem (devfs) has the /dev directory
|
||||
with subdirectories. As of late 2001, there were problems with
|
||||
lockfiles. For example, the lockfile mechanism considered
|
||||
dev/usb/tts/0 and /dev/tts/0 to be the same device with name "0".
|
||||
Ditto for all other devices that had the same "leaf" name. Also, if
|
||||
some applications use the old name for a device and other applications
|
||||
use the devfs name for the same device, then the lockfiles will have
|
||||
different names. But the serial driver should know they are the same.
|
||||
|
||||
<!-- serial_port_names.D
|
||||
in Modem and Serial HOWTOs
|
||||
Feb 2010: moved devfs part of this file to the Obsolete section of
|
||||
Serial-HOWTO -->
|
||||
|
||||
<sect1>Devfs (The deprecated Device File System. History)
|
||||
<p>Kernel 2.4 introduced the now obsolete optional "device file system"
|
||||
(devfs) with a whole new set of names for everything. Some people
|
||||
used it but the majority probably didn't. But in 2003-4, it was
|
||||
claimed that devfs had unsolvable problems and starting with kernel
|
||||
2.6.12 it was replaced with "udev" (kernels prior to 2.6.12 also could
|
||||
use udev but with some problems). Although udev doesn't provide all
|
||||
the functionality of devfs, it does handle hot plugging. Also, the
|
||||
use of udev isn't required to run Linux so some people don't use it.
|
||||
But many distributions install it by default.
|
||||
|
||||
Devfs was a good idea and was claimed to be more efficient than udev.
|
||||
But unfortunately, the author of devfs didn't maintain it for long and
|
||||
it allegedly became not too well maintained. So for better or worse
|
||||
we now have udev instead although the debate of devfs vs. udev still
|
||||
continues. For a detailed description of devfs see: <url
|
||||
url="http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.html"> Also see
|
||||
the kernel documentation tree: filesystems/devfs.
|
||||
|
||||
The names of devices for the devfs can be used in udev, but usually
|
||||
are not and may not be simple to activate. Here's the devfs names for
|
||||
serial devices: ttyS1 becomes tts/1, ttyUSB1 becomes /usb/tts/1, and
|
||||
ttyACM1 is /usb/acm/1. Note that the number 1 above is just an
|
||||
example. It could be replaced by 0, 2, 3, 4, etc. Some more examples
|
||||
of udev names: ttyS2 becomes tts/2 (Serial port), tty3 becomes vc/3
|
||||
(Virtual Console), ptyp1 becomes pty/m1 (PTY master), ttyp2 becomes
|
||||
pty/s2 (PTY slave). "tts" looks like a directory which contains
|
||||
devices "files": 0, 1, 2, etc. All of these new names were put in the
|
||||
/dev directory although optionally one may put them elsewhere.
|
||||
|
||||
For devfs, device names in the /dev directory are created automatically
|
||||
by the corresponding driver. Thus, if serial support comes from a
|
||||
module and that module isn't loaded yet, there will not be any serial
|
||||
devices in the /dev directory. This can be confusing: you physically
|
||||
have serial ports but don't see them in the /dev directory. However,
|
||||
if a device name is requested (attempt to open it) by a communication
|
||||
program and the serial module isn't loaded, the kernel is supposed to
|
||||
try to find a driver for it and create a name for it in the /dev
|
||||
directory.
|
||||
|
||||
This works OK if it finds a driver. But suppose there is no driver
|
||||
found for it. For example, if you try to use "setserial" to configure
|
||||
a port that the driver failed to detect, it claims there is no such
|
||||
port. How does one create a devfs port in this case?
|
||||
|
||||
For multiport devices for example, /dev/ttyF9 becomes /dev/ttf/9, or
|
||||
in a later version /dev/tts/F9. Substitute for F (or f) whatever
|
||||
letter(s) your multiport board uses for this purpose. A multiport
|
||||
driver is supposed to create a devfs name similar to the above and put
|
||||
it into the /dev directory
|
||||
|
||||
<p> END OF Serial-HOWTO </article>
|
||||
|
|
Loading…
Reference in New Issue