This commit is contained in:
gferg 2003-03-10 14:22:55 +00:00
parent d723481f09
commit a26a935279
8 changed files with 863 additions and 635 deletions

View File

@ -1834,7 +1834,7 @@ and their solutions, availability and more. </Para>
Modem-HOWTO</ULink>, Modem-HOWTO</ULink>,
<CiteTitle>Modem HOWTO</CiteTitle> <CiteTitle>Modem HOWTO</CiteTitle>
</Para><Para> </Para><Para>
<CiteTitle>Updated: September 2002</CiteTitle>. <CiteTitle>Updated: March 2003</CiteTitle>.
Help with selecting, connecting, configuring, trouble-shooting, and Help with selecting, connecting, configuring, trouble-shooting, and
understanding modems for a PC. </Para> understanding modems for a PC. </Para>
</ListItem> </ListItem>
@ -2524,7 +2524,7 @@ SCSI-Generic-HOWTO</ULink> for more current information.</emphasis> </Para>
Secure-Programs-HOWTO</ULink>, Secure-Programs-HOWTO</ULink>,
<CiteTitle>Secure Programming for Linux and Unix HOWTO</CiteTitle> <CiteTitle>Secure Programming for Linux and Unix HOWTO</CiteTitle>
</Para><Para> </Para><Para>
<CiteTitle>Updated: February 2003</CiteTitle>. <CiteTitle>Updated: March 2003</CiteTitle>.
Provides a set of design and implementation guidelines for writing Provides a set of design and implementation guidelines for writing
secure programs for Linux and Unix systems. </Para> secure programs for Linux and Unix systems. </Para>
</ListItem> </ListItem>
@ -2591,7 +2591,7 @@ Addresses Linux localization issues specific to Serbian users
Serial-HOWTO</ULink>, Serial-HOWTO</ULink>,
<CiteTitle>Serial HOWTO</CiteTitle> <CiteTitle>Serial HOWTO</CiteTitle>
</Para><Para> </Para><Para>
<CiteTitle>Updated: March 2002</CiteTitle>. <CiteTitle>Updated: February 2003</CiteTitle>.
Describes serial port features other than those which should be Describes serial port features other than those which should be
covered by other HOWTOs. Lists information on multiport serial cards covered by other HOWTOs. Lists information on multiport serial cards
and contains detailed technical information about the serial port and contains detailed technical information about the serial port

View File

@ -1011,7 +1011,7 @@ attached to this system with other systems over a TCP/IP network. </Para>
Modem-HOWTO</ULink>, Modem-HOWTO</ULink>,
<CiteTitle>Modem HOWTO</CiteTitle> <CiteTitle>Modem HOWTO</CiteTitle>
</Para><Para> </Para><Para>
<CiteTitle>Updated: September 2002</CiteTitle>. <CiteTitle>Updated: March 2003</CiteTitle>.
Help with selecting, connecting, configuring, trouble-shooting, and Help with selecting, connecting, configuring, trouble-shooting, and
understanding modems for a PC. </Para> understanding modems for a PC. </Para>
</ListItem> </ListItem>
@ -1131,7 +1131,7 @@ SCSI-Generic-HOWTO</ULink> for more current information.</emphasis> </Para>
Serial-HOWTO</ULink>, Serial-HOWTO</ULink>,
<CiteTitle>Serial HOWTO</CiteTitle> <CiteTitle>Serial HOWTO</CiteTitle>
</Para><Para> </Para><Para>
<CiteTitle>Updated: March 2002</CiteTitle>. <CiteTitle>Updated: February 2003</CiteTitle>.
Describes serial port features other than those which should be Describes serial port features other than those which should be
covered by other HOWTOs. Lists information on multiport serial cards covered by other HOWTOs. Lists information on multiport serial cards
and contains detailed technical information about the serial port and contains detailed technical information about the serial port

View File

@ -207,7 +207,7 @@ Configuring your modem and pppd to use a 2 wire twisted pair leased line. </Para
Modem-HOWTO</ULink>, Modem-HOWTO</ULink>,
<CiteTitle>Modem HOWTO</CiteTitle> <CiteTitle>Modem HOWTO</CiteTitle>
</Para><Para> </Para><Para>
<CiteTitle>Updated: September 2002</CiteTitle>. <CiteTitle>Updated: March 2003</CiteTitle>.
Help with selecting, connecting, configuring, trouble-shooting, and Help with selecting, connecting, configuring, trouble-shooting, and
understanding modems for a PC. </Para> understanding modems for a PC. </Para>
</ListItem> </ListItem>

View File

@ -489,7 +489,7 @@ operating systems with XML-RPC support. </Para>
Secure-Programs-HOWTO</ULink>, Secure-Programs-HOWTO</ULink>,
<CiteTitle>Secure Programming for Linux and Unix HOWTO</CiteTitle> <CiteTitle>Secure Programming for Linux and Unix HOWTO</CiteTitle>
</Para><Para> </Para><Para>
<CiteTitle>Updated: February 2003</CiteTitle>. <CiteTitle>Updated: March 2003</CiteTitle>.
Provides a set of design and implementation guidelines for writing Provides a set of design and implementation guidelines for writing
secure programs for Linux and Unix systems. </Para> secure programs for Linux and Unix systems. </Para>
</ListItem> </ListItem>

View File

@ -1,3 +1,13 @@
2002-02-18 David A. Wheeler <dwheeler@dwheeler.com>
* Clarified more about GUI applications.
* Updated my picture, now it actually looks more like me.
* Changed URL for libsafe.
* Renamed LCLint to splint.
* Mentioned dreamland.
2002-02-16 David A. Wheeler <dwheeler@dwheeler.com>
* Released version 3.007.
2002-02-02 David A. Wheeler <dwheeler@dwheeler.com> 2002-02-02 David A. Wheeler <dwheeler@dwheeler.com>
* Noted Shamir and Tromir's paper on Factoring Large Numbers with * Noted Shamir and Tromir's paper on Factoring Large Numbers with
the TWIRL device (a draft paper at this time) - the paper basically the TWIRL device (a draft paper at this time) - the paper basically

View File

@ -134,8 +134,8 @@ http://www.gocsi.com/press/20020407.html
<firstname>David</firstname> <othername role="mi">A.</othername><surname>Wheeler</surname> <firstname>David</firstname> <othername role="mi">A.</othername><surname>Wheeler</surname>
</author> </author>
<address><email>dwheeler@dwheeler.com</email></address> <address><email>dwheeler@dwheeler.com</email></address>
<pubdate>v3.007, 16 February 2003</pubdate> <pubdate>v3.010, 3 March 2003</pubdate>
<edition>v3.007</edition> <edition>v3.010</edition>
<!-- FYI: The LDP claims they don't use the "edition" tag. --> <!-- FYI: The LDP claims they don't use the "edition" tag. -->
<copyright> <copyright>
<year>1999</year> <year>1999</year>
@ -2261,9 +2261,9 @@ Information Assurance Glossary</ulink> defines hacker as
``A person who delights in having an intimate understanding of the ``A person who delights in having an intimate understanding of the
internal workings of computers and computer networks. internal workings of computers and computer networks.
The term is misused in a negative context where `cracker' should be used.'' The term is misused in a negative context where `cracker' should be used.''
<ulink url="http://www.tuxedo.org/~esr/jargon">The <ulink url="http://www.catb.org/~esr/jargon">The
Jargon File</ulink> has a Jargon File</ulink> has a
<ulink url="http://www.tuxedo.org/~esr/jargon/html/entry/hacker.html"> <ulink url="http://www.catb.org/~esr/jargon/html/entry/hacker.html">
long and complicate definition for hacker</ulink>, starting with long and complicate definition for hacker</ulink>, starting with
``A person who enjoys exploring the details of programmable systems ``A person who enjoys exploring the details of programmable systems
and how to stretch their capabilities, and how to stretch their capabilities,
@ -2285,7 +2285,7 @@ While this may cause a minor loss of typographical beauty, the traditional
American system causes extraneous characters to be placed inside the quotes. American system causes extraneous characters to be placed inside the quotes.
These extraneous characters have These extraneous characters have
no effect on prose but can be disastrous in code or computer commands. no effect on prose but can be disastrous in code or computer commands.
<!-- See http://www.tuxedo.org/~esr/jargon/html/Hacker-Writing-Style.html --> <!-- See http://www.catb.org/~esr/jargon/html/Hacker-Writing-Style.html -->
<!-- I distinguish between the terms privilege and permission in this book; <!-- I distinguish between the terms privilege and permission in this book;
a process (subject) may acquire privileges, while an object has permissions. --> a process (subject) may acquire privileges, while an object has permissions. -->
I use standard American (not British) spelling; I've yet to meet an I use standard American (not British) spelling; I've yet to meet an
@ -3463,6 +3463,12 @@ and then call a program, these variables will have full effect.
Other Unix-like systems handle the situation differently but for the Other Unix-like systems handle the situation differently but for the
same reason: a setuid/setgid program should not be unduly affected same reason: a setuid/setgid program should not be unduly affected
by the environment variables set. by the environment variables set.
Note that graphical user interface toolkits generally do permit
user control over dynamically linked libraries, because
executables that directly invoke graphical user inteface toolkits
should never, ever, be setuid (or have other special privileges) at all.
For more about how to develop secure GUI applications, see
<xref linkend="minimize-privileged-modules">.
</para> </para>
<para> <para>
@ -7241,11 +7247,12 @@ that any buffer overflows are contained within the current stack frame.
Their initial performance analysis suggests that this Their initial performance analysis suggests that this
library's overhead is very small. library's overhead is very small.
Libsafe papers and source code are available at Libsafe papers and source code are available at
<ulink url="http://www.bell-labs.com/org/11356/libsafe.html">http://www.bell-labs.com/org/11356/libsafe.html</ulink>. <ulink url="http://www.research.avayalabs.com/project/libsafe">
http://www.research.avayalabs.com/project/libsafe</ulink>.
<!-- <ulink url="http://www.bell-labs.com/org/11356/libsafe.html">http://www.bell-labs.com/org/11356/libsafe.html</ulink>.
-->
The Libsafe source code is available under the completely The Libsafe source code is available under the completely
open source LGPL license, open source LGPL license.
and there are indications that many Linux distributors are interested
in using it.
</para> </para>
<para> <para>
@ -7847,9 +7854,10 @@ versions of the linux kernel.
</para> </para>
<para> <para>
One Linux-unique tool you can use to simplify minimizing granted privileges One tool you can use to simplify minimizing granted privileges
is the ``compartment'' tool developed by SuSE. is the ``compartment'' tool developed by SuSE.
This tool sets the filesystem root, uid, gid, and/or the This tool, which only works on Linux,
sets the filesystem root, uid, gid, and/or the
capability set, then runs the given program. capability set, then runs the given program.
This is particularly handy for running some other program without This is particularly handy for running some other program without
modifying it. modifying it.
@ -7886,8 +7894,12 @@ typical Linux distributions, but this may quickly change.
You can download the program via You can download the program via
<ulink <ulink
url="http://www.suse.de/~marc">http://www.suse.de/~marc</ulink>. url="http://www.suse.de/~marc">http://www.suse.de/~marc</ulink>.
A similar tool is dreamland; you can that at
<ulink url="http://www.7ka.mipt.ru/~szh/dreamland">
http://www.7ka.mipt.ru/~szh/dreamland</ulink>.
</para> </para>
<para> <para>
Note that <emphasis remap="it">not</emphasis> all Unix-like systems, Note that <emphasis remap="it">not</emphasis> all Unix-like systems,
implement POSIX capabilities, and PR_SET_KEEPCAPS is currently implement POSIX capabilities, and PR_SET_KEEPCAPS is currently
@ -8048,24 +8060,45 @@ Another approach is to have separate commands in separate
executables; one command might be a complex executables; one command might be a complex
tool that can do a vast number of tasks for a privileged user (e.g., root), tool that can do a vast number of tasks for a privileged user (e.g., root),
while the other tool is setuid but is a small, simple tool that while the other tool is setuid but is a small, simple tool that
only permits a small command subset. only permits a small command subset (and does not trust its invoker).
The small, simple tool checks to see if the input meets various criteria for The small, simple tool checks to see if the input meets various criteria for
acceptability, and then if it determines the input is acceptable, it acceptability, and then if it determines the input is acceptable, it
passes the data on to the complex tool. passes the data on to the complex tool.
Note that the small, simple tool must do a thorough job checking its inputs Note that the small, simple tool must do a thorough job checking its inputs
and limiting what it will pass along to the complex tool, or this can and limiting what it will pass along to the complex tool, or this can
be a vulnerability. be a vulnerability.
The communication could be via shell invocation, or any IPC mechanism.
These approaches can even be layered several ways, for example, These approaches can even be layered several ways, for example,
a complex user tool could call a simple setuid a complex user tool could call a simple setuid
``wrapping'' program (that checks its inputs for secure values) ``wrapping'' program (that checks its inputs for secure values)
that then passes on information to another complex trusted tool. that then passes on information to another complex trusted tool.
This approach is especially helpful for GUI-based systems; have the GUI portion
run as a normal user, and then pass security-relevant
requests on to another program
that has the special privileges for actual execution.
</para> </para>
<para>
This approach is the normal approach for developing GUI-based applications
which requre privilege, but must be run by unprivileged users.
The GUI portion is run as a normal unprivileged user process;
that process then passes security-relevant requests on to another process
that has the special privileges (and does not trust the first process, but
instead limits the requests to whatever the user is allowed to do).
Never develop a program that is
privileged (e.g., using setuid) and also directly invokes a graphical toolkit:
Graphical toolkits aren't designed to be used this way, and it would be
extremely difficult to audit graphical toolkits
in a way to make this possible.
Fundamentally, graphical toolkits must be large, and it's extremely
unwise to place so much faith in the perfection of that much code, so
there is no point in trying to make them do what should never be done.
Feel free to create a small setuid program that invokes two separate programs:
one without privileges (but with the graphical interface), and one with
privileges (and without an external interface).
Or, create a small setuid program that can be invoked by the unprivileged
GUI application.
But never combine the two into a single process.
For more about this, see the statement by
<ulink url="http://www.gtk.org/setuid.html">Owen Taylor about GTK
and setuid, discussing why GTK_MODULES is not a security hole</ulink>.
</para>
<para> <para>
Some applications can be best developed by dividing the problem Some applications can be best developed by dividing the problem
@ -11793,7 +11826,7 @@ When MALLOC_CHECK_ is set, a special (less efficient) implementation
is used which is designed to be tolerant against simple errors, is used which is designed to be tolerant against simple errors,
such as double calls of free() with the same argument, such as double calls of free() with the same argument,
or overruns of a single byte (off-by-one bugs). or overruns of a single byte (off-by-one bugs).
Not all such errors can be proteced against, however, and memory leaks Not all such errors can be protected against, however, and memory leaks
can result. can result.
If MALLOC_CHECK_ is set to 0, any detected heap corruption If MALLOC_CHECK_ is set to 0, any detected heap corruption
is silently ignored; is silently ignored;
@ -14680,13 +14713,15 @@ ITS4 is available at
<ulink url="http://www.rstcorp.com/its4">http://www.rstcorp.com/its4</ulink>. <ulink url="http://www.rstcorp.com/its4">http://www.rstcorp.com/its4</ulink>.
</para></listitem> </para></listitem>
<listitem><para> <listitem><para>
LCLint is a tool for statically checking C programs. Splint (formerly named LCLint) is a tool for statically checking C programs.
With minimal effort, LCLint can be used as a better lint. With minimal effort, splint can be used as a better lint.
If additional effort is invested adding annotations to programs, If additional effort is invested adding annotations to programs,
LCLint can perform stronger checking than can be done by any standard lint. splint can perform stronger checking than can be done by any standard lint.
For example, it can be used to statically detect likely buffer overflows. For example, it can be used to statically detect likely buffer overflows.
The software is licensed under the GPL and is available from The software is licensed under the GPL and is available at
<ulink url="http://lclint.cs.virginia.edu">http://lclint.cs.virginia.edu</ulink>. <ulink url="http://www.splint.org">http://www.splint.org</ulink>.
<!-- <ulink url="http://lclint.cs.virginia.edu">http://lclint.cs.virginia.edu</ulink>.
-->
</para></listitem> </para></listitem>
<listitem><para> <listitem><para>
cqual is a type-based analysis tool for finding bugs in C programs. cqual cqual is a type-based analysis tool for finding bugs in C programs. cqual
@ -14755,6 +14790,9 @@ detect certain memory management errors.
(public domain) and (public domain) and
<ulink url="http://odin.ac.hmc.edu/~neldredge/yamd/">YAMD</ulink> (GPL) <ulink url="http://odin.ac.hmc.edu/~neldredge/yamd/">YAMD</ulink> (GPL)
can detect memory allocation problems for C and C++. can detect memory allocation problems for C and C++.
You can even use the built-in capabilities of the
GNU C library's malloc library, which has the
MALLOC_CHECK_ environment variable (see its manual page for more information).
There are many others. There are many others.
</para> </para>
@ -15126,7 +15164,7 @@ Free Software Project Management HOWTO</ulink> and
<ulink url="http://www.tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html"> <ulink url="http://www.tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html">
Software Release Practice HOWTO</ulink>; Software Release Practice HOWTO</ulink>;
you should also read you should also read
<ulink url="http://www.tuxedo.org/~esr/writings/cathedral-bazaar"> <ulink url="http://www.catb.org/~esr/writings/cathedral-bazaar">
The Cathedral and the Bazaar</ulink>. The Cathedral and the Bazaar</ulink>.
</para> </para>
@ -16068,7 +16106,7 @@ Raymond, Eric.
1997. 1997.
<emphasis remap="it">The Cathedral and the Bazaar</emphasis>. <emphasis remap="it">The Cathedral and the Bazaar</emphasis>.
<ulink <ulink
url="http://www.tuxedo.org/~esr/writings/cathedral-bazaar">http://www.tuxedo.org/~esr/writings/cathedral-bazaar</ulink> url="http://www.catb.org/~esr/writings/cathedral-bazaar">http://www.catb.org/~esr/writings/cathedral-bazaar</ulink>
</para> </para>
<para> <para>
@ -16077,7 +16115,7 @@ Raymond, Eric.
April 1998. April 1998.
<emphasis remap="it">Homesteading the Noosphere</emphasis>. <emphasis remap="it">Homesteading the Noosphere</emphasis>.
<ulink <ulink
url="http://www.tuxedo.org/~esr/writings/homesteading/homesteading.html">http://www.tuxedo.org/~esr/writings/homesteading/homesteading.html</ulink> url="http://www.catb.org/~esr/writings/homesteading/homesteading.html">http://www.catb.org/~esr/writings/homesteading/homesteading.html</ulink>
</para> </para>
<para> <para>
@ -17461,7 +17499,7 @@ per the license agreement included above.
<mediaobject> <mediaobject>
<imageobject> <imageobject>
<imagedata fileref="dwheel1.jpg" format="jpg"> <imagedata fileref="dwheeler2003b.jpg" format="jpg">
</imageobject> </imageobject>
<caption> <caption>
<para>David A. Wheeler</para> <para>David A. Wheeler</para>

View File

@ -3,11 +3,12 @@
<title> Modem-HOWTO <title> Modem-HOWTO
<author>David S.Lawyer <author>David S.Lawyer
<tt><url url="mailto:dave@lafn.org"></tt> <tt><url url="mailto:dave@lafn.org"></tt>
<date> v0.25, September 2002 <date> v0.26, March 2003
<!-- <!--
Change log: + => added more info ++ => added new topic Change log: + => added more info ++ => added new topic
v0.26 March 2003: USB clarity improved, v.92 modem "on hold" supported?,
3Com AT codes
v0.25 September 2002: Must restart minicom after configuring it unless v0.25 September 2002: Must restart minicom after configuring it unless
you used the -s option. HCF is not an all-software modem as was you used the -s option. HCF is not an all-software modem as was
incorrectly claimed. Better clarity for "Quick Install" and 56k incorrectly claimed. Better clarity for "Quick Install" and 56k
@ -111,8 +112,8 @@ should be found in /usr/doc/ppp, /usr/share/doc/ppp or the like.
<sect1> Copyright, Disclaimer, Trademarks, & Credits <sect1> Copyright, Disclaimer, Trademarks, & Credits
<sect2> Copyright <sect2> Copyright
<p> Copyright (c) 1998-2001 by David S. Lawyer <url url="mailto:dave@lafn.org"> <p> Copyright (c) 1998-2003 by David S. Lawyer <url url="mailto:dave@lafn.org">
<!-- license.H begin --> <!-- license.D begin -->
Please freely copy and distribute (sell or give away) this document Please freely copy and distribute (sell or give away) this document
in any format. Send any corrections and comments to the document in any format. Send any corrections and comments to the document
@ -123,7 +124,7 @@ provided that you:
<item> If it's not a translation: Email a copy of your derivative work <item> If it's not a translation: Email a copy of your derivative work
(in a format LDP accepts) to the author(s) and maintainer (could be (in a format LDP accepts) to the author(s) and maintainer (could be
the same person). If you don't get a response then email the LDP the same person). If you don't get a response then email the LDP
(Linux Documentation Project): submit@linuxdoc.org. (Linux Documentation Project): submit@en.tldp.org.
<item>License the derivative work in the spirit of this license or use <item>License the derivative work in the spirit of this license or use
GPL. Include a copyright notice and at least a pointer to the GPL. Include a copyright notice and at least a pointer to the
license used. license used.
@ -141,9 +142,9 @@ them. Since this is free documentation, it should be obvious that I
cannot be held legally responsible for any errors. cannot be held legally responsible for any errors.
<sect2>Trademarks. <sect2>Trademarks.
<p> Any brand names (starts with a capital letter) should be assumed to <p> Any brand names (starts with a capital letter such as MS Windows)
be a trademark). Such trademarks belong to their respective owners. should be assumed to be a trademark). Such trademarks belong to their
<!-- copyright.H end --> respective owners. <!-- license.D end -->
"Hayes" is a trademark of Microcomputer Products Inc. I use "Hayes" is a trademark of Microcomputer Products Inc. I use
@ -175,31 +176,27 @@ or two old, check to see that you have the latest version. Please
send me any other info that you think belongs in this document. send me any other info that you think belongs in this document.
<sect1> New Versions of this HOWTO <label id="new_vers"> <sect1> New Versions of this HOWTO <label id="new_vers">
<p> New versions of this Modem-HOWTO come out every few months. The <p> New versions of this Modem-HOWTO should come out every few months.
modem situation is rapidly changing (and I'm still learning). Your Your problem might be solved in the latest version. It will be
problem might be solved in the latest version. It will be available available to browse and/or download at LDP mirror sites. For a list
to browse and/or download at LDP mirror sites. For a list of such of such sites see: <url url="http://www.tldp.org/mirrors.html"> If you
sites see: <url url="http://www.tldp.org/mirrors.html"> If you only want to quickly compare the date of this the version v0.26, March 2003 with
only want to quickly compare the date of this the version v0.25, September 2002 with
the date of the latest version go to: <url the date of the latest version go to: <url
url="http://www.tldp.org/HOWTO/Modem-HOWTO.html"> url="http://www.tldp.org/HOWTO/Modem-HOWTO.html">
<sect1> New in Recent Versions <sect1> New in Recent Versions
<p> For a full revision history going back to v0.00 see the source file <p> For a full revision history going back to the first version see
(in linuxdoc format) at the source file (in linuxdoc format) at <url
<url
url="http://www.ibiblio.org/pub/linux/docs/HOWTO/other-formats/sgml/Modem-HOWTO.sgml.gz">. url="http://www.ibiblio.org/pub/linux/docs/HOWTO/other-formats/sgml/Modem-HOWTO.sgml.gz">.
v0.26 March 2003: USB clarity improved, v.92 modem "on hold" supported?,
3Com AT codes
v0.25 September 2002: Must restart minicom after configuring it unless v0.25 September 2002: Must restart minicom after configuring it unless
you used the -s option. HCF is not an all-software modem as was you used the -s option. HCF is not an all-software modem as was
incorrectly claimed. Better clarity for "Quick Install" and 56k incorrectly claimed. Better clarity for "Quick Install" and 56k
modems. Does my PC have a modem?<newline> modems. Does my PC have a modem?<newline>
v0.24 June 2002: new callback link, "You are already online" error, v0.24 June 2002: new callback link, "You are already online" error,
fixed several typos reported by Francesco Ronconi<newline> fixed several typos reported by Francesco Ronconi<newline>
v0.23 January 2002: dropped connection w/V.90, X3 to force dialing if
NO DIALTONE, more on USB, wvdial added to "Trying Out Your Modem",
major revision to "Antique Modems", several broken links fixed,
better clarity re RAS, digital modems.
<sect1> What is a Modem ? <label id="what_is_modem"> <sect1> What is a Modem ? <label id="what_is_modem">
<p> A modem is a device that lets one send digital signals over an <p> A modem is a device that lets one send digital signals over an
@ -215,10 +212,11 @@ may phone in to them and use their computer. This is called
There are four basic types of modems for a PC: external, USB, internal There are four basic types of modems for a PC: external, USB, internal
and built-in. The external and USB set on your desk outside the PC and built-in. The external and USB set on your desk outside the PC
while the other two types are not visible since they're inside the PC. while the other two types are not visible since they're inside the PC.
The external modem plugs into a connector on the back of the PC known Sometimes the USB type is called "USB external". The external serial
as a "serial port". The USB modem plugs into the USB bus cable. See modem plugs into a connector on the back of the PC known as a "serial
<ref id="usb_" name="USB Modems">. The internal modem is a card that port". The USB modem plugs into the USB bus cable. See <ref
is inserted inside the computer. The built-in modem is part of the id="usb_" name="USB Modems">. The internal modem is a card that is
inserted inside the computer. The built-in modem is part of the
motherboard and is thus built into the computer. It's is just like an motherboard and is thus built into the computer. It's is just like an
internal modem except it can't be removed or replaced. As of 2001, internal modem except it can't be removed or replaced. As of 2001,
built-in modems are primarily for laptops. What is said in this HOWTO built-in modems are primarily for laptops. What is said in this HOWTO
@ -226,21 +224,30 @@ regarding internal modems will generally apply also to built-in
modems. modems.
For a more detailed comparison see <ref id="int_vs_ext" name="External For a more detailed comparison see <ref id="int_vs_ext" name="External
vs. Internal">. When you get an internal, built-in, or USB modem, vs. Internal">. When you get an internal or, built-in, modem,
you also get a dedicated serial port (which can only be used with the you also get a dedicated serial port (which can only be used with the
modem and not with anything else such as another modem or a printer). modem and not with anything else such as another modem or a printer).
In Linux, the serial ports are named ttyS0, ttyS1, etc. (usually In Linux, the serial ports are named ttyS0, ttyS1, etc. (usually
corresponding respectively to COM1, COM2, etc. in Dos/Windows). For corresponding respectively to COM1, COM2, etc. in Dos/Windows). For
the new devfs they are all in the /dev/ttys/ directory and named 0, 1, the new devfs they are all in the /dev/ttys/ directory and named 0, 1,
etc. See <ref id="basics_" name="Modem & Serial Port Basics"> for etc. See <ref id="basics_" name="Modem & Serial Port Basics"> for
more details on modems and serial ports. more details on modems and serial ports. With a USB modem, the driver
simulates a serial port at say /dev/usb/asm/0.
Modems usually include the ability to send Faxes (Fax Modems). See Modems usually include the ability to send Faxes (Fax Modems). See
<ref id="fax_" name="Fax"> for a list of fax software. "Voice" modems <ref id="fax_" name="Fax"> for a list of fax software. "Voice" modems
can work like an automatic answering machine and handle voicemail. can work like an automatic answering machine and handle voicemail.
See <ref id="voice_" name="Voicemail">. See <ref id="voice_" name="Voicemail Software">.
<sect1> Does My Computer Contain a Modem ? The v.92 protocol can put the modem "on hold" when someone makes an
ordinary voice call to your telephone, provided that you have "call
waiting" from your telephone company. Thus you can get a phone call
while online. As of Jan. 2003 Linux doesn't seem to support it. If
this is the latest version of this HOWTO, let me know about any
Linux support for it. Some linmodem drivers may support it (but what
if you have a hardware modem ?).
<sect1> Does My Computer Contain an Internal Modem ?
<p> Internal modems usually have a pair of modular telephone jacks on <p> Internal modems usually have a pair of modular telephone jacks on
the back of the computer. They should be right next to each other and the back of the computer. They should be right next to each other and
look like a jack on the wall of a house where a telephone plugs in. look like a jack on the wall of a house where a telephone plugs in.
@ -403,13 +410,13 @@ external modem and plug it in. But if you get the right internal
modem it may be just as easy. modem it may be just as easy.
<sect1> Is a Driver Needed ? <sect1> Is a Driver Needed ?
<p> Hardware modems (including all external modems) don't really need <p> Hardware modems (including all serial external modems) don't
any modem driver. But any software modem (winmodem, linmodem) must really need any modem driver. But any software modem (winmodem,
have a modem driver (if it exists for Linux). The serial port the linmodem) must have a modem driver (if it exists for Linux). The
modem resides on does need a driver and it's supplied either as a serial port the modem resides on does need a driver and it's supplied
Linux serial module or compiled into the kernel. Any serial driver either as a Linux serial module or compiled into the kernel. Any
for a PCI Modem should install automatically since they are detected serial driver for a PCI Modem should install automatically since they
by system software. are detected by system software.
Software modems require software to run them and obviously do need a Software modems require software to run them and obviously do need a
driver. The drivers for MS Windows are *.exe programs which will not driver. The drivers for MS Windows are *.exe programs which will not
@ -469,7 +476,7 @@ program and configure the modem itself.
the PC and inserting the modem card into a vacant slot on the the PC and inserting the modem card into a vacant slot on the
motherboard. There are modems for PCI slots, other modems for the motherboard. There are modems for PCI slots, other modems for the
older ISA slots, and ARM software "modems" for the new small AMR slot. older ISA slots, and ARM software "modems" for the new small AMR slot.
Some new PC don't have any ISA slots. Only some newer PCs will have Some new PCs don't have any ISA slots. Only some newer PCs will have
ARM slots. While external modems plug into the serial port (via a ARM slots. While external modems plug into the serial port (via a
short cable) the internal modems have the serial port built into the short cable) the internal modems have the serial port built into the
modem. In other words, the modem card is both a serial port and a modem. In other words, the modem card is both a serial port and a
@ -696,11 +703,14 @@ one of them.
<p>USB = Universal Serial Bus. Some USB modems work with Linux and <p>USB = Universal Serial Bus. Some USB modems work with Linux and
some don't. Linux has support for modems that conform to the USB some don't. Linux has support for modems that conform to the USB
Communication Device Class Abstract Control Model (= USB CDC ACM). Communication Device Class Abstract Control Model (= USB CDC ACM).
There's a module for ACM named acm.o. See the /usb/acm... document in There's a module for ACM named acm.o. See the /usb/acm.txt document in
the kernel documentation directory (/usr/share/doc/kernel-doc-2.4.x in the kernel documentation directory (/usr/share/doc/kernel-doc-2.4.x in
Debian, perhaps /usr/doc/kernel... in some distributions). The ACM Debian, perhaps /usr/doc/kernel... in some distributions). The ACM
serial port for the first (0th) such modem is (with devfs) is: "serial port" for the first (0th) such modem is: /dev/usb/acm/0 or
/dev/usb/acm/0. Otherwise it might be /dev/usb/ttyACM0. possibly /dev/usb/ttyACM0. This should be the case regardless of
whether or not you use the new "device file system". It's not really
a serial port, but the driver makes it look like a serial port to
software which uses the modem.
<sect1> Which Internal Modems might not work with Linux <label id="m_to_avoid"> <sect1> Which Internal Modems might not work with Linux <label id="m_to_avoid">
<p> <p>
@ -901,6 +911,7 @@ Sept. '00: data flow diagram
Dec. '00 flow control + Dec. '00 flow control +
July '01 done -> down July '01 done -> down
Feb. '02 4k buffer -> 8k Feb. '02 4k buffer -> 8k
Feb '03: UARTs with auto flow control. Rewrite of Flow Control.
--> -->
<!-- ifdef MODEM_ --> <!-- ifdef MODEM_ -->
<p> You don't have to understand the basics to use and install a <p> You don't have to understand the basics to use and install a
@ -940,7 +951,7 @@ name="Modulation Details">.
<sect1> What is a Serial Port ? <sect1> What is a Serial Port ?
<sect2> Intro to Serial <sect2> Intro to Serial
<p> The serial port is an I/O (Input/Output) device. <p> The UART serial port (or just "serial port for short" is an I/O (Input/Output) device.
<!-- ifdef MODEM_ --> <!-- ifdef MODEM_ -->
Since modems have a serial port between them and the computer, Since modems have a serial port between them and the computer,
it's necessary to understand the serial port as well as the modem. it's necessary to understand the serial port as well as the modem.
@ -1051,7 +1062,7 @@ which ttyS. This mapping of names (such as ttyS1) to I/O addresses
(and IRQ's) may be both set and viewed by the "setserial" command. (and IRQ's) may be both set and viewed by the "setserial" command.
See <ref id="set_serial" name="What is Setserial">. This does See <ref id="set_serial" name="What is Setserial">. This does
<tt/not/ set the I/O address and IRQ in the hardware itself (which is <tt/not/ set the I/O address and IRQ in the hardware itself (which is
set by jumpers or by plug-and-play software). Thus what physical port set by jumpers or by plug-and-play software). Thus which physical port
corresponds to say ttyS1 depends both on what the serial driver thinks corresponds to say ttyS1 depends both on what the serial driver thinks
(per setserial) and what is set in the hardware. If a mistake has (per setserial) and what is set in the hardware. If a mistake has
been made, the physical port may not correspond to any name (such as been made, the physical port may not correspond to any name (such as
@ -1068,18 +1079,18 @@ their way to their destination inside your computer.
When the serial port receives a number of bytes (may be set to 1, 4, When the serial port receives a number of bytes (may be set to 1, 4,
8, or 14) into its FIFO buffer, it signals the CPU to fetch them by 8, or 14) into its FIFO buffer, it signals the CPU to fetch them by
sending an electrical signal known as an interrupt on a certain wire sending an electrical signal known as an interrupt on a certain wire
normally used only by that port. Thus the FIFO waits for a number of normally used only by that port. Thus the FIFO waits until it has
bytes and then issues an interrupt. received a number of bytes and then issues an interrupt.
However, this interrupt will also be sent if there is an unexpected However, this interrupt will also be sent if there is an unexpected
delay while waiting for the next byte to arrive (known as a timeout). delay while waiting for the next byte to arrive (known as a timeout).
Thus if the bytes are being received slowly (such as someone typing on Thus if the bytes are being received slowly (such as from someone
a terminal keyboard) there may be an interrupt issued for every byte typing on a terminal keyboard) there may be an interrupt issued for
received. For some UART chips the rule is like this: If 4 bytes in a every byte received. For some UART chips the rule is like this: If 4
row could have been received, but none of these 4 show up, then the bytes in a row could have been received in an interval of time, but
port gives up waiting for more bytes and issues an interrupt to fetch none of these 4 show up, then the port gives up waiting for more bytes
the bytes currently in the FIFO. Of course, if the FIFO is empty, and issues an interrupt to fetch the bytes currently in the FIFO. Of
no interrupt will be issued. course, if the FIFO is empty, no interrupt will be issued.
Each interrupt conductor (inside the computer) has a number (IRQ) and Each interrupt conductor (inside the computer) has a number (IRQ) and
the serial port must know which conductor to use to signal on. For the serial port must know which conductor to use to signal on. For
@ -1088,13 +1099,13 @@ list of them and more will be found in "man setserial" (search for
"Configuring Serial Ports"). Interrupts are issued whenever the "Configuring Serial Ports"). Interrupts are issued whenever the
serial port needs to get the CPU's attention. It's important to do serial port needs to get the CPU's attention. It's important to do
this in a timely manner since the buffer inside the serial port can this in a timely manner since the buffer inside the serial port can
hold only 16 (1 in old serial ports) incoming bytes. If the CPU fails hold only 16 incoming bytes. If the CPU fails to remove such received
to remove such received bytes promptly, then there will not be any bytes promptly, then there will not be any space left for any more
space left for any more incoming bytes and the small buffer may incoming bytes and the small buffer may overflow (overrun) resulting
overflow (overrun) resulting in a loss of data bytes. in a loss of data bytes.
<!-- ifdef MODEM_ -->
For an external modem, there is no way (such as flow control) to stop <!-- ifdef MODEM_ -->
For an external modem, there may be no way (such as flow control) to stop
the flow rapidly enough to prevent this. For an internal modem the the flow rapidly enough to prevent this. For an internal modem the
16-byte FIFO buffer is on the same card and a good modem will not 16-byte FIFO buffer is on the same card and a good modem will not
write to it if it's full. Thus a good internal modem will not overrun write to it if it's full. Thus a good internal modem will not overrun
@ -1104,11 +1115,11 @@ being overrun. This is one advantage of an internal modem over an
external. <!-- ifdef MODEM end --> external. <!-- ifdef MODEM end -->
Interrupts are also issued when the serial port has just sent out all Interrupts are also issued when the serial port has just sent out all
16 of its bytes from its small transmit buffer out the external cable. of its bytes from its small transmit buffer out the external cable.
It then has space for 16 more outgoing bytes. The interrupt is to It then has space for 16 more outgoing bytes. The interrupt is to
notify the CPU of that fact so that it may put more bytes in the small notify the CPU of that fact so that it may put more bytes in the small
transmit buffer to be transmitted. Also, when a modem control line transmit buffer to be transmitted. Also, when a modem control line
changes state an interrupt is issued. changes state, an interrupt is issued.
The buffers mentioned above are all hardware buffers. The serial port The buffers mentioned above are all hardware buffers. The serial port
also has large buffers in main memory. This will be explained later also has large buffers in main memory. This will be explained later
@ -1201,8 +1212,9 @@ report the modem-to-modem speed as (for example): CARRIER 28800.
If you have an internal modem you would not expect that there would be If you have an internal modem you would not expect that there would be
any speed limit on the DTE speed from your modem to your computer any speed limit on the DTE speed from your modem to your computer
since you modem is inside your computer and is almost part of your since you modem is inside your computer and is almost part of your
computer. But there is since the modem contains a dedicated serial computer. But there usually is since the modem contains a dedicated
port within it. serial port within it. On some software modems there is no such speed
limit.
It's important to understand that the average speed is often less than It's important to understand that the average speed is often less than
the specified speed, especially on the short DTE computer-to-modem the specified speed, especially on the short DTE computer-to-modem
@ -1224,7 +1236,7 @@ id="speed_" name="What Speed Should I Use">.
<p> Flow control means the ability to slow down the flow of bytes in a <p> Flow control means the ability to slow down the flow of bytes in a
wire. For serial ports this means the ability to stop and then wire. For serial ports this means the ability to stop and then
restart the flow without any loss of bytes. Flow control is needed restart the flow without any loss of bytes. Flow control is needed
for modems to allow a jump in instantaneous flow rates. for modems and other hardware to allow a jump in instantaneous flow rates.
<sect2> Example of Flow Control <sect2> Example of Flow Control
<p> For example, consider the case where you connect a 33.6k external <p> For example, consider the case where you connect a 33.6k external
@ -1259,18 +1271,19 @@ which is already compressed and can't be compressed further. Now
let's consider the opposite extreme where the modem is compressing the let's consider the opposite extreme where the modem is compressing the
data with a high compression ratio. In such a case the modem might data with a high compression ratio. In such a case the modem might
need an input flow rate of say 115.2k bps to provide an output (to the need an input flow rate of say 115.2k bps to provide an output (to the
phone line) of 33.6k bps (compressed data). The compression ratio is phone line) of 33.6k bps (compressed data). This compression ratio is
3.43 (115.2/33.6) which is much higher than average. In this case the 3.43 (115.2/33.6). In this case the modem is able to compress and
modem is able to compress and the 115.2 bps PC-to-modem flow and send the 115.2 bps PC-to-modem flow and send the same data (in compressed
the same data out on the phone line at 33.6bps. There's no need for form) out the phone line at 33.6bps. There's no need for flow control
flow control here. But such a high compression ratio rarely happens here so long as the compression ratio remains higher that 3.43. But
so that most of the time flow control is needed to slow down the flow the compression ratio varies from second to second and is likely to
on the 115.2 bps PC-to-modem cable. The flow is stopped and started drops below 3.43. Thus, some of the time flow control is needed to
so that the average flow is usually well under the "on" flow of 115.2 slow down the average flow on the 115.2 bps PC-to-modem cable. The
bps. flow is stopped and started so that the average flow is usually lower
than the "on" flow of 115.2 bps.
In the above example the modem was an external modem. But the same In the above example the modem was an external modem. But the same
situation exists (as of late 2000) for most internal modems. There is situation exists (as of early 2003) for most internal modems. There is
still a speed limit on the PC-to-modem speed even though this flow still a speed limit on the PC-to-modem speed even though this flow
doesn't take place over an external cable. This makes the internal doesn't take place over an external cable. This makes the internal
modems compatible with the external modems. modems compatible with the external modems.
@ -1280,23 +1293,25 @@ a modem. But there is also flow control which is used for the
opposite direction of flow: from a modem (or other device) to a opposite direction of flow: from a modem (or other device) to a
computer. Each direction of flow involve 3 buffers: 1. in the modem computer. Each direction of flow involve 3 buffers: 1. in the modem
2. in the UART chip (called FIFOs) 3. in main memory managed by the 2. in the UART chip (called FIFOs) 3. in main memory managed by the
serial driver. Flow control protects certain buffers from serial driver. Flow control protects all buffers (except the FIFOs)
overflowing. The small UART FIFO buffers are not protected in this from overflowing.
way but rely instead on a fast response to the interrupts they issue.
FIFO stand for "First In, First Out" which is the way it handles Under Linux, the small UART FIFO buffers are not protected in this way
bytes. All the 3 buffers use the FIFO rule but only one of them also but rely instead on a fast response to the interrupts they issue.
uses it as a name. This is the essence of flow control but there are Some UART chips can be set to do hardware flow control to protect
still some more details. their FIFOs but Linux (as of early 2003) doesn't seem to support it.
FIFO stand for "First In, First Out" which is the way it handles bytes
in a queue. All the 3 buffers use the FIFO rule but only one of them
is named "FIFO". This is the essence of flow control but there
are still some more details.
<!-- ifdef MODEM_ --> <!-- ifdef MODEM_ -->
You don't often need flow control in the direction from the modem to a If you have set the highest PC-to-modem speed, you may not need flow
PC. For complex example of a case where it's needed see "Complex Flow control in the direction from the modem to a PC. For complex example
Control Example" in the Serial-HOWTO. But if you don't have a high of a case where it's needed see "Complex Flow Control Example" in the
enough speed set between the modem and the computer (serial port Serial-HOWTO. To slow down this incoming flow, your modem must tell
speed) then you do need to slow down the flow coming into the modem the other modem to stop sending. See <ref id="M-M_flow_c"
from the telephone line. To do this your modem must tell the other name="Modem-to-Modem Flow Control">.
modem to stop sending. See <ref id="M-M_flow_c" name="Modem-to-Modem
Flow Control">.
<!-- ifdef MODEM end --> <!-- ifdef MODEM end -->
@ -1304,11 +1319,24 @@ Flow Control">.
<sect2> Hardware vs. Software Flow Control <sect2> Hardware vs. Software Flow Control
<p> If feasible it's best to use "hardware" flow control that uses two <p> If feasible it's best to use "hardware" flow control that uses two
dedicated "modem control" wires to send the "stop" and "start" dedicated "modem control" wires to send the "stop" and "start"
signals. signals. Hardware flow control at the serial port works like this:
<!-- ifdef MODEM_ --> The two pins, RTS (Request to send) and CTS (Clear to send) are used.
Modern modems almost always use hardware flow control between the When the computer is ready to receive date it asserts RTS by putting a
modem and the serial port. positive voltage on the RTS pin (meaning "request to send to me").
<!-- ifdef MODEM end --> When the computer is not able to receive any more bytes, it negates
RTS by putting a negative voltage on the pin saying: "stop sending to
me". The RTS pin is connected by the serial cable to another pin on
the modem, printer, terminal, etc. This other pin's only function is
to receive the signal.
For the case of a modem this "other" pin will be the modem's RTS pin
(same pin label as the PC). But for a printer or terminal, it will be
a CTS pin and requires "crossover" or "null modem" cable so as to
connect the CTS pin at one end with the RTS pin at the other end. For
a modem, a straight-thru cable is used. For the opposite direction of
flow a similar scheme is used. For a modem, the CTS pin is used to
send the flow control signal and the RTS pin a receive it. For a
non-modem, the roles of the RTS and CTS pins are interchanged.
Software flow control uses the main receive and transmit wires to send Software flow control uses the main receive and transmit wires to send
the start and stop signals. It uses the ASCII control characters DC1 the start and stop signals. It uses the ASCII control characters DC1
@ -1326,19 +1354,19 @@ modem (hardware) and software support
<sect2> Symptoms of No Flow Control <sect2> Symptoms of No Flow Control
<p> Understanding flow-control theory can be of practical use. For <p> Understanding flow-control theory can be of practical use. For
example I used my modem to access the Internet and it seemed to work example I used my modem to access the Internet and it seemed to work
fine. But after a few months I tried to send long files from my PC to fine. But after a few months I tried to send out long files from my PC
an ISP and a huge amount of retries and errors resulted (but and a huge amount of retries and errors resulted but it finally
eventually Kermit could send a long file after many retries). succeeded. Receiving in the other direction (from my ISP to me) worked
Receiving in the other direction (from my ISP to me) worked fine. The fine. The problem turned out to be a modem with flow control disabled.
problem turned out to be a modem with broken flow control. My modem's My modem's buffer was overflowing (overrunning) on long outgoing files
buffer was overflowing (overrunning) on long outgoing files since no since no "stop" signal was ever sent to my computer to halt sending to
"stop" signal was ever sent to my computer to halt sending to the the modem. There was no problem in the direction from the modem to my
modem. There was no problem in the direction from the modem to my computer since the capacity (say 115.2 kbps) was always higher than
computer since the capacity (say 115.2 kbps) was always higher than the the flow from the telephone line. But it was a problem in the other
flow over the telephone line. But it was a problem in the other direction where the PC would send at 115.2 kbps and the modem couldn't
direction where the PC could send at 115.2 kbps until it overran the handle this high flow resulting in overruns of the modem's buffer.
modem). The fix was to enable flow control by putting into the init The fix was to enable flow control by putting into the modem's init
string an enable-flow-control command for the modem. string an enable-flow-control command.
<sect2> Modem-to-Modem Flow Control <label id="M-M_flow_c"> <sect2> Modem-to-Modem Flow Control <label id="M-M_flow_c">
<p> This is the flow control of the data sent over the telephone lines <p> This is the flow control of the data sent over the telephone lines
@ -1350,48 +1378,53 @@ used.
<!-- ifdef MODEM end --> <!-- ifdef MODEM end -->
<sect1> Data Flow Path; Buffers <sect1> Data Flow Path; Buffers
<p> Much has been explained about this including flow control, a pair <p>It's been mention that there are 3 buffers for each direction of
of 16-byte FIFO buffers (in the UART), and a pair of larger buffers flow (3 pairs altogether): 16-byte FIFO buffers (in the UART), a pair
inside a device connected to the serial port (such as a modem). But of larger buffers inside a device connected to the serial port (such
there is still another pair of buffers. These are large buffers as a modem), and a pair of buffers (say 8k) in main memory.
(perhaps 4k) in main memory also known as serial port buffers. When When an application program sends bytes to the serial port they first
an application program sends bytes to the serial port get stashed in the transmit serial port buffer in main memory. The
(and modem)they first get stashed in the transmit serial port buffer in main pair consists of both the transmit buffer and a receive buffer for
memory. The pair consists of both this transmit buffer and a receive the opposite direction of byte-flow. Here's an example diagram for
buffer for the opposite direction of byte-flow. Here's an example the case of browsing the Internet with a browser. Transmit data flow
diagram for the case of browsing the Internet with a browser. is left to right while receive flow is right to left. There is a
Transmit data flow is left to right while receive flow is right to separate buffer for each direction of flow.
left.
<verb> <verb>
application 4k-byte 16-byte 1k-byte tele- application 8k-byte 16-byte 1k-byte tele-
BROWSER ------- MEMORY -------- UART --------- MODEM -------- phone BROWSER ------- MEMORY -------- FIFO --------- MODEM -------- phone
program buffer buffer buffer line program buffer buffer buffer line
</verb> </verb>
The serial device driver takes out say 16 bytes from this transmit buffer, For the transmit case, the serial device driver takes out say 16 bytes
one byte at a time and puts them into the 16-byte transmit buffer in the from this transmit buffer (in main memory), one byte at a time and
serial UART for transmission. Once in that transmit buffer, there puts them into the 16-byte transmit buffer in the serial UART for
is no way to stop them from being transmitted. They are then transmission. Once in that transmit buffer, there is no way to stop
transmitted to the modem them from being transmitted. They are then transmitted to the
which also has a fair sized (say 1k) buffer. When the device driver modem or (other device connected to the serial port) which also has a
(on orders from flow control) stops the flow of outgoing bytes from fair sized (say 1k) buffer. When the device driver (on orders from
the computer, what it actually stops is the flow of outgoing bytes flow control) stops the flow of outgoing bytes from the computer, what
from the large transmit buffer in main memory. Even after this has it actually stops is the flow of outgoing bytes from the large
happened and the flow to the modem has stopped, an application program transmit buffer in main memory. Even after this has happened and the
may keep sending bytes to the 4k transmit buffer until it becomes flow to the modem has stopped, an application program may keep sending
fill. bytes to the 8k transmit buffer until it becomes fill. At the same
time, the bytes stored in the FIFO and MODEM continue to be sent out
until these buffers empty.
When it gets fill, the application program can't send any more bytes When the memory buffer gets fill, the application program can't send
to it (a "write" statement in a C_program blocks) and the application any more bytes to it (a "write" statement in a C_program blocks) and
program temporarily stops running and waits until some buffer space the application program temporarily stops running and waits until some
becomes available. Thus a flow control "stop" is ultimately able to buffer space becomes available. Thus a flow control "stop" is
stop the program that is sending the bytes. Even though this program ultimately able to stop the program that is sending the bytes. Even
stops, the computer does not necessarily stop computing. It may though this program stops, the computer does not necessarily stop
switch to running other processes while it's waiting at a flow control computing since it may switch to running other processes while it's
stop. The above was a little oversimplified since there is another waiting at a flow control stop.
alternative of having the application program itself do something else
while it is waiting to "write". The above was a little oversimplified in two ways. First, some UARTs
can do automatic hardware flow control which can stop the transmission
out of the FIFO buffers if needed (not yet supported by Linux).
Second, while an application process is waiting to write to the
transmit buffer, it could possibly perform other tasks.
<!-- ifdef MODEM_ --> <!-- ifdef MODEM_ -->
<sect1> Modem Commands <sect1> Modem Commands
@ -1432,7 +1465,7 @@ id="modem_conf" name="Modem Configuration">
<sect1> Serial Driver Module <sect1> Serial Driver Module
<p> The device driver for the serial port is the software that <p> The device driver for the serial port is the software that
operates the serial port. It is now provided as a serial module. operates the serial port. It is now provided as a serial module.
>From kernel 2.2 on, this module will normally get loaded automatically From kernel 2.2 on, this module will normally get loaded automatically
if it's needed. In earlier kernels, you had to have <tt/kerneld/ if it's needed. In earlier kernels, you had to have <tt/kerneld/
running in order to do auto-load modules on demand. Otherwise the running in order to do auto-load modules on demand. Otherwise the
serial module needed to be explicitly listed in /etc/modules. Before serial module needed to be explicitly listed in /etc/modules. Before
@ -1500,6 +1533,7 @@ Aug. 2001: removed mention of patch to convert Linux to a PnP OS;
better explanation of PCI better explanation of PCI
July 2001: Improve PCI part. Remove "card" since serial ports are July 2001: Improve PCI part. Remove "card" since serial ports are
often built into the motherboard. often built into the motherboard.
Feb. 2003: Removed request to send info to Ted Tso.
--> -->
<sect1> IO & IRQ Overview <sect1> IO & IRQ Overview
@ -1614,7 +1648,7 @@ got them working anyway). The 2.4 serial driver will read the id
number digitally stored in the serial hardware to determine how to number digitally stored in the serial hardware to determine how to
support it (if it knows how). It should assign an I/O address to it, support it (if it knows how). It should assign an I/O address to it,
determine it's IRQ, etc. So you don't need to use "setserial" for it. determine it's IRQ, etc. So you don't need to use "setserial" for it.
<!--
<sect2> Requesting that future drivers support your serial port <sect2> Requesting that future drivers support your serial port
<p>If you have a <p>If you have a
PCI internal modem which you are convinced is not a winmodem PCI internal modem which you are convinced is not a winmodem
@ -1637,7 +1671,7 @@ kernel. Then you will test the driver to see if it works OK for you
and report the results to Ted Ts'o. If you are willing to do all the and report the results to Ted Ts'o. If you are willing to do all the
above (and this is the latest version of this HOWTO) then email the above (and this is the latest version of this HOWTO) then email the
needed info to him at: <url url="mailto:tytso@mit.edu">. needed info to him at: <url url="mailto:tytso@mit.edu">.
-->
<sect2>More info on PCI <sect2>More info on PCI
<p>PCI ports are not well standardized. Some use main memory for <p>PCI ports are not well standardized. Some use main memory for
communication with the PC. Some require special enabling of the IRQ. communication with the PC. Some require special enabling of the IRQ.
@ -2174,11 +2208,12 @@ stty -F /dev/ttyS2 crtscts
</verb></tscreen> </verb></tscreen>
If you want to see if flow control is enabled do the following: In If you want to see if flow control is enabled do the following: In
minicom (or the like) type AT&amp;V to see how the modem is configured minicom (or the like) type AT&amp;V (or ATI4 on 3Com modems) to see
and look for &amp;K3 which means hardware flow control. Then without how the modem is configured and look for &amp;K3 (or &amp;H1 on 3Com
exiting the communications program (such as minicom) see if the device modems) which means hardware flow control. Then without exiting the
driver knows about it by typing: stty -F /dev/ttyS2 -a. Look for communications program (such as minicom) see if the device driver
"crtscts" (without a disabling minus sign). knows about it by typing: stty -F /dev/ttyS2 -a. Look for "crtscts"
(without a disabling minus sign).
<sect1> Speed Settings <sect1> Speed Settings
<p> Besides flow control there is speed. See <ref id="speed_" <p> Besides flow control there is speed. See <ref id="speed_"
@ -2426,9 +2461,10 @@ these AT commands:
best not to have any other process running on the modem port when you best not to have any other process running on the modem port when you
do this. If you have set up minicom for your modem, then you may type do this. If you have set up minicom for your modem, then you may type
on the command line: <tt>minicom -o</tt> to start minicom without on the command line: <tt>minicom -o</tt> to start minicom without
restoring the saved modem profile. Then type <tt>at&amp;v</tt> to restoring the saved modem profile. Then type <tt>at&amp;v</tt> (or
display the profile. To exit minicom without disturbing this profile, atI4 on 3Com modems) to display the profile. To exit minicom without
use the q (quit) command for exiting without resetting. disturbing this profile, use the q (quit) command for exiting without
resetting.
The above may not work for various reasons. If the modem has been set The above may not work for various reasons. If the modem has been set
not to echo result codes it may not even display any profile. If there not to echo result codes it may not even display any profile. If there
@ -2497,6 +2533,7 @@ interface and makes it easy to deal with a huge number of devices.
The device names have all changed as well. But there's an option to The device names have all changed as well. But there's an option to
continue using the old names. For a detailed description of it see: continue using the old names. For a detailed description of it see:
<url url="http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.html"> <url url="http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.html">
Also see the kernel documentation tree: filesystems/devfs.
The name changes (if used) are: ttyS2 becomes tts/2 (Serial port), The name changes (if used) are: ttyS2 becomes tts/2 (Serial port),
tty3 becomes vc/3 (Virtual Console), ptyp1 becomes pty/m1 (PTY tty3 becomes vc/3 (Virtual Console), ptyp1 becomes pty/m1 (PTY
@ -2513,10 +2550,10 @@ in the /dev directory.
There formerly was a "cua" name for each serial port and it behaved There formerly was a "cua" name for each serial port and it behaved
just a little differently. For example, ttyS2 would correspond to just a little differently. For example, ttyS2 would correspond to
cua2. The cua major number was 5 and minor numbers started at 64. cua2. It was mainly used for modems. The cua major number was 5 and
You may still have the cua devices in your /dev directory but they are minor numbers started at 64. You may still have the cua devices in
now deprecated. Their drivers behave slightly different than for the your /dev directory but they are now deprecated. For details see
ttyS ones. name="cua Device Obsolete">."') Modem-HOWTO, section: cua Device Obsolete.
Dos/Windows use the COM name while the <tt/setserial/ program uses Dos/Windows use the COM name while the <tt/setserial/ program uses
tty00, tty01, etc. Don't confuse these with dev/tty0, dev/tty1, etc. tty00, tty01, etc. Don't confuse these with dev/tty0, dev/tty1, etc.
@ -2590,6 +2627,7 @@ May 2000: <sect2> IRQs near end ttyS0 -> ttyS1 + clarity
Nov. 2000: auto_irq may work on the 2nd try Nov. 2000: auto_irq may work on the 2nd try
Dec. 2000: saving state of serial module Dec. 2000: saving state of serial module
June 2001 OK to use setserial with Laptops June 2001 OK to use setserial with Laptops
Nov. 2002 Debian's /var/lib/serial.conf
--> -->
<p> This part is in 3 HOWTOs: Modem, Serial, and Text-Terminal. There <p> This part is in 3 HOWTOs: Modem, Serial, and Text-Terminal. There
are some minor differences, depending on which HOWTO it appears in. are some minor differences, depending on which HOWTO it appears in.
@ -2724,14 +2762,15 @@ IRQ's but this doesn't always work right either. In one case it first
gave the wrong irq but when the command was repeated it found the gave the wrong irq but when the command was repeated it found the
correct irq. In versions of setserial >= 2.15, the results of your correct irq. In versions of setserial >= 2.15, the results of your
last probe test could be automatically saved and put into the last probe test could be automatically saved and put into the
configuration file <tt>/etc/serial.conf</tt> which will be used next configuration file <tt>/etc/serial.conf</tt> or
time you start Linux. At boot-time when the serial module loads (or <tt>/var/lib/serial.conf</tt> which will be used next time you start
the like), a probe for UARTs is made automatically and reported on the Linux. At boot-time when the serial module loads (or the like), a
screen. But the IRQs shown may be wrong. The second report of the probe for UARTs is made automatically and reported on the screen. But
same is the result of a script which usually does no probing and thus the IRQs shown may be wrong. The second report of the same is the
provides no reliable information as to how the hardware is actually result of a script which usually does no probing and thus provides no
set. It only shows configuration data someone wrote into the script reliable information as to how the hardware is actually set. It only
or data that got saved in /etc/serial.conf. shows configuration data someone wrote into the script or data that
got saved in /etc/serial.conf.
It may be that two serial ports both have the same IO address set in It may be that two serial ports both have the same IO address set in
the hardware. Of course this is not permitted but it sometimes the hardware. Of course this is not permitted but it sometimes
@ -3340,8 +3379,8 @@ waiting for an incoming phone call. There is a supplemental program
called <tt/vgetty/ which handles voicemail for some modems. called <tt/vgetty/ which handles voicemail for some modems.
<tt/mgetty/ documentation is fair (except for voice mail), and is not <tt/mgetty/ documentation is fair (except for voice mail), and is not
supplemented in this HOWTO. To automatically start PPP one must edit supplemented in this HOWTO. To automatically start PPP one must edit
/etc/mgetty/login.conf to enable "AutoPPP" You can find the latest /etc/mgetty/login.conf to use "AutoPPP" (has example). You can find
information on <tt/mgetty/ at <htmlurl the latest information on <tt/mgetty/ at <htmlurl
url="http://www.leo.org/&tilde;doering/mgetty/" url="http://www.leo.org/&tilde;doering/mgetty/"
name="http://www.leo.org/&tilde;doering/mgetty/"> and <url name="http://www.leo.org/&tilde;doering/mgetty/"> and <url
url="http://alpha.greenie.net/mgetty/"> url="http://alpha.greenie.net/mgetty/">
@ -3909,7 +3948,7 @@ your computer (PC-to-modem speed). This is sometimes called "DTE
speed" where "DTE" stands for Data Terminal Equipment (Your computer speed" where "DTE" stands for Data Terminal Equipment (Your computer
is a DTE.) You need to set this speed high enough so this part of the is a DTE.) You need to set this speed high enough so this part of the
signal path will not be a bottleneck. The setting for the DTE speed signal path will not be a bottleneck. The setting for the DTE speed
is the maximum speed of this link. Most of the time it should is the maximum speed of this link. Most of the time it will likely
actually operate at lower speeds. actually operate at lower speeds.
For an external modem, DTE speed is the speed (in bits/sec) of the For an external modem, DTE speed is the speed (in bits/sec) of the
@ -3917,9 +3956,10 @@ flow over the cable between you modem and PC. For an internal modem,
it's the same idea since the modem also emulates a serial port. It it's the same idea since the modem also emulates a serial port. It
may seem ridiculous having a speed limit on communication between a may seem ridiculous having a speed limit on communication between a
computer and a modem card that is directly connected inside the computer and a modem card that is directly connected inside the
computer to a much higher speed bus. But it's that way since the computer to a much higher speed bus. But it's usually that way since
modem card probably includes a dedicated serial port which does have the modem card probably includes a dedicated serial port which does
speed limits (and settable speeds). have speed limits (and settable speeds). However, some software
modems have no such speed limits.
<sect1> Speed and Data Compression <sect1> Speed and Data Compression
<p> What speed do you choose? If it were not for "data compression" <p> What speed do you choose? If it were not for "data compression"
@ -3929,9 +3969,9 @@ computer and encodes them into a fewer number of bytes. For example,
if the flow (speed) from the PC to the modem was 20,000 bytes/sec if the flow (speed) from the PC to the modem was 20,000 bytes/sec
(bps) and the compression ratio was 2 to 1, then only 10,000 bytes/sec (bps) and the compression ratio was 2 to 1, then only 10,000 bytes/sec
would flow over the telephone line. Thus for a 2:1 compression ratio would flow over the telephone line. Thus for a 2:1 compression ratio
you need to set the DTE speed to double the maximum modem speed on the you would need to set the DTE speed to double the maximum modem speed
phone line. If the compression ratio were 3 to 1 you need to set it 3 on the phone line. If the compression ratio were 3 to 1 you would
times faster, etc. need to set it 3 times faster, etc.
<sect1> Where do I Set Speed ? <sect1> Where do I Set Speed ?
<p> This DTE (PC-to-modem) speed is normally set by a menu in your <p> This DTE (PC-to-modem) speed is normally set by a menu in your
@ -3946,6 +3986,7 @@ different speeds, then they couldn't communicate with each other.
<sect1> Can't Set a High Enough Speed <label id="high_speed"> <sect1> Can't Set a High Enough Speed <label id="high_speed">
<!-- high_speed.H begin In Serial and Modem HOWTOs but some of the speed <!-- high_speed.H begin In Serial and Modem HOWTOs but some of the speed
section is unique to each HOWTO. section is unique to each HOWTO.
Feb. 2003,
--> -->
<sect2> Speeds over 115.2k <sect2> Speeds over 115.2k
<p> The top speed of 115.2k has been standard since the mid 1990's. <p> The top speed of 115.2k has been standard since the mid 1990's.
@ -3965,17 +4006,19 @@ setserial (unless the serial driver does this for you). The software
will then use a divisor of 1 to set the highest speed. All this will will then use a divisor of 1 to set the highest speed. All this will
hopefully be supported by the Linux kernel sometime in 2002. hopefully be supported by the Linux kernel sometime in 2002.
A non-standard way to do this is to use a very large number for the A non-standard way that some manufacturers have implemented high speed
divisor which isn't really a divisor at all. It's just a code number is to use a very large number for the divisor to get the high speed.
to tell the serial driver what speed to use. In such cases you need This number isn't really a divisor at all since it doesn't divide
to compile the kernel with special patches. anything. It's just serves as a code number to tell the hardware what
speed to use. In such cases you need to compile the kernel with
special patches.
One patch to support this second type of high-speed is called shsmod One patch to support this second type of high-speed hardware is called
(Super High Speed Mode). There are both Windows and Linux versions of shsmod (Super High Speed Mode). There are both Windows and Linux
this patch. See <url url="http://www.devdrv.com/shsmod/">. There is versions of this patch. See <url
also a module for the VIA VT82C686 chip <url url="http://www.devdrv.com/shsmod/">. There is also a module for the
url="http://www.kati.fi/viahss/">. Using it may result in buffer VIA VT82C686 chip <url url="http://www.kati.fi/viahss/">. Using it
overflow. may result in buffer overflow.
For internal modems, only a minority of them advertise that they For internal modems, only a minority of them advertise that they
support speeds of over 115.2k for their built-in serial ports. support speeds of over 115.2k for their built-in serial ports.
@ -4341,11 +4384,14 @@ response could be due to the modem being in "online data" mode where
it can't accept any AT commands. You may have been using the modem it can't accept any AT commands. You may have been using the modem
and then abruptly disconnected (such as killing the process with and then abruptly disconnected (such as killing the process with
signal 9). In that case your modem did not get reset to "command signal 9). In that case your modem did not get reset to "command
mode" where it can interact to AT commands. Thus the message from mode" where it can interact to AT commands. "Minicom" may display
minicom "You are already online. Hangup first." Well, you are sort "You are already online. Hangup first." (For another meaning of this
of online but you are may not be connected to anything over the phone minicom message see
line. Wvdial will report "modem not responding" for the same <ref id="already_online" name= "You are already online! Hang up
situation. first.">)
Well, you are sort of online but you are may not be connected to
anything over the phone line. Wvdial will report "modem not
responding" for the same situation.
To fix this as a last resort you could reboot the computer. Another To fix this as a last resort you could reboot the computer. Another
way to try to fix this is to send +++ to the modem to tell it to way to try to fix this is to send +++ to the modem to tell it to
@ -4375,8 +4421,8 @@ error" one may get when trying to use "stty -F /dev/ttySx"). To get a
few of these stty parameters, the true address of the port must be few of these stty parameters, the true address of the port must be
known to the driver. So the driver may have the wrong address. The known to the driver. So the driver may have the wrong address. The
setserial" command will display what the driver thinks but it's likely setserial" command will display what the driver thinks but it's likely
wrong in this case. So what the "modem busy" really means is that the wrong in this case. So what the "modem busy" often means is that the
serial port (and the modem) can't be found. serial port (and thus the modem) can't be found.
If you have a pci modem, then use one of these commands: lspci, or cat If you have a pci modem, then use one of these commands: lspci, or cat
/proc/pci, or dmesg to find the correct address and irq of the /proc/pci, or dmesg to find the correct address and irq of the
@ -4388,12 +4434,13 @@ the kernel to understand the lspci data correctly. You might notice
this in a boot-time message. this in a boot-time message.
<sect1> "You are already online! Hang up first." (from minicom) <sect1> "You are already online! Hang up first." (from minicom)
<label id="already_online">
<p> The modem has its CD signal on. Either you are actually online <p> The modem has its CD signal on. Either you are actually online
(a remote modem is sending you a carrier) or your modem has been setup (a remote modem is sending you a carrier) or your modem has been setup
to always send the CD signal. In minicom, type at&amp;v to see if to always send the CD signal. In minicom, type at&amp;v to see if
&amp;C or &amp;C0 is set. If so, CD will be on even if you are &amp;C or &amp;C0 is set. If so, CD will be on even if you are
offline and you'll get this error message. The fix is to set &amp;C1 offline and you'll erroneously get this error message. The fix is to
in the init string or save it in the modem. set &amp;C1 in the init string or save it in the modem.
<sect1> I can't get near 56k on my 56k modem <sect1> I can't get near 56k on my 56k modem
<p> There must be very low noise on the line for it to work at even <p> There must be very low noise on the line for it to work at even
@ -4541,6 +4588,9 @@ Nov. '00: which connector is ttyS1, etc. Input/output error, overrun
Dec. '00: /proc/tty/driver/serial shows info, I/O error+, pid 161 in Dec. '00: /proc/tty/driver/serial shows info, I/O error+, pid 161 in
example n.g. example n.g.
July '02: typo: is doesn't => it doesn't, clarity re port not found July '02: typo: is doesn't => it doesn't, clarity re port not found
Dec. '02: IO error may mean IRQ conflict or IO address conflict.
Jan. '03: LSR safety check error
Feb. '03: Interrupts may be shared on PCI Bus
--> -->
<sect1>(The following subsections are in both the Serial and Modem HOWTOs) <sect1>(The following subsections are in both the Serial and Modem HOWTOs)
@ -4551,20 +4601,22 @@ often because it's disabled and has no address (PnP hasn't enabled it)
or that it is enabled but is not at the I/O address that setserial or that it is enabled but is not at the I/O address that setserial
thinks it's at. Thus it can't be found. thinks it's at. Thus it can't be found.
Check the BIOS menus and BIOS messages at boot-time. For the PCI bus First check BIOS messages at boot-time (and possible the BIOS menu for
use lspci or scanpci. If it's an ISA bus PnP serial port, try the serial port). For the PCI bus use lspci or scanpci. If it's an
"pnpdump --dumpregs" and/or see Plug-and-Play-HOWTO. If the port ISA bus PnP serial port, try "pnpdump --dumpregs" and/or see
happens to be enabled then the following two paragraphs may help find Plug-and-Play-HOWTO. If the port happens to be enabled then the
it: following two paragraphs may help find it:
Using "scanport" (Debian only ??) will scan all ISA bus ports and may For a non-PnP ISA legacy port, using "scanport" (Debian only ??) will
discover an unknown port that could be a serial port (but it doesn't scan all bus ports and may discover an unknown port that could be a
probe the port). It could hang your PC. You may try probing with serial port (but it doesn't probe the port). It could hang your PC.
setserial. See <ref id="probing_ss" name="Probing">. If nothing You may try probing with setserial. See <ref id="probing_ss"
seems to get thru the port it may be accessible but have a bad name="Probing">.
interrupt. See <ref id="slow_" name="Extremely Slow: Text appears on
the screen slowly after long delays">. Use <tt>setserial -g</tt> to If nothing seems to get thru the port it may be accessible but have a
see what the serial driver thinks and check for IRQ and I0 address bad interrupt. See <ref id="slow_" name="Extremely Slow: Text appears
on the screen slowly after long delays">. Use <tt>setserial -g</tt>
to see what the serial driver thinks and check for IRQ and I0 address
conflicts. Even if you see no conflicts the driver may have incorrect conflicts. Even if you see no conflicts the driver may have incorrect
information (view it by "setserial") and conflicts may still exist. information (view it by "setserial") and conflicts may still exist.
@ -4717,25 +4769,27 @@ have been automatically removed if it contained a stale process id
<sect1> "/dev/tty? Device or resource busy" <label id="busy_err"> <sect1> "/dev/tty? Device or resource busy" <label id="busy_err">
<p> This means that the device you are trying to access (or use) is <p> This means that the device you are trying to access (or use) is
supposedly busy (in use) or that a resource it needs (such as an IRQ) supposedly busy (in use) or that a resource it needs (such as an IRQ)
is supposedly being used by another device (the resource is "busy"). is supposedly being used by another device and can't be shared.
This message is easy to understand if it only means that the device is This message is easy to understand if it only means that the device is
busy (in use). But it often means that a resource is in use. What busy (in use). But it often means that a needed resource is already
makes it even more confusing is that in some cases neither the device in use (busy). What makes it even more confusing is that in some cases
nor the resources that it needs are actually "busy". neither the device nor the resources that it needs are actually
"busy".
The ``resource busy'' part often means (example for <tt/ttyS2/) ``You The following example is where interrupts can't be shared (at least
can't use <tt/ttyS2/ since another device is using ttyS2's one of the interrupts is on the ISA bus). The ``resource busy'' part
interrupt.'' The potential interrupt conflict is inferred from what often means (example for <tt/ttyS2/) ``You can't use <tt/ttyS2/ since
"setserial" thinks. A more accurate error message would be ``Can't another device is using ttyS2's interrupt.'' The potential interrupt
use <tt/ttyS2/ since the setserial data (and kernel data) indicates conflict is inferred from what "setserial" thinks. A more accurate
that another device is using <tt/ttyS2/'s interrupt''. If two devices error message would be ``Can't use <tt/ttyS2/ since the setserial data
use the same IRQ and you start up only one of the devices, everything (and kernel data) indicates that another device is using <tt/ttyS2/'s
is OK because there is no conflict yet. But when you next try to interrupt''. If two devices use the same IRQ and you start up only
start the second device (without quitting the first device) you get a one of the devices, everything is OK because there is no conflict yet.
"... busy" error message. This is because the kernel only keeps track But when you next try to start the second device (without quitting the
of what IRQs are actually in use and actual conflicts don't happen first device) you get a "... busy" error message. This is because the
unless the devices are in use (open). The situation for I/O address kernel only keeps track of what IRQs are actually in use and actual
(such as 0x3f8) conflict is similar. conflicts don't happen unless the devices are in use (open). The
situation for I/O address (such as 0x3f8) conflict is similar.
This error is sometimes due to having two serial drivers: one a module This error is sometimes due to having two serial drivers: one a module
and the other compiled into the kernel. Both drivers try to grab the and the other compiled into the kernel. Both drivers try to grab the
@ -4749,9 +4803,8 @@ There are two possible cases when you see this message:
</enum> </enum>
What you need to do is to find the interrupt setserial thinks What you need to do is to find the interrupt setserial thinks
<tt/ttyS2/ is using. Look at /proc/tty/driver/serial (if you have <tt/ttyS2/ is using. Look at /proc/tty/driver/serial. You should
it). You should also be able to see it with the "setserial" command also be able to find it with the "setserial" command for <tt/ttyS2/.
for <tt/ttyS2/.
Bug in old versions: Prior to 2001 there was a bug which wouldn't let Bug in old versions: Prior to 2001 there was a bug which wouldn't let
you see it with "setserial". Trying to see it would give the same you see it with "setserial". Trying to see it would give the same
@ -4773,15 +4826,21 @@ not it's a potential interrupt conflict is to set the IRQ to 0
was likely a potential interrupt conflict. It's not a good idea to was likely a potential interrupt conflict. It's not a good idea to
leave it permanently set at 0 since it will put more load on the CPU. leave it permanently set at 0 since it will put more load on the CPU.
<sect1> "Input/output error" from setserial or stty <sect1>"Input/output error" from setserial, stty, pppd, etc.
<p> You may have typed "ttys" instead of "ttyS". You will see this <p> This means that communication with the serial port isn't working
error message if you try to use the setserial command for any device right. It could mean that there isn't any serial port at the IO
that is not a serial port. It also may mean that the serial port is address that setserial thinks your port is at. It could also be an
in use (busy or opened) and thus the attempt to get/set parameters by interrupt conflict (or an IO address conflict). It also may mean that
setserial or stty failed. It could also mean that there isn't any the serial port is in use (busy or opened) and thus the attempt to
serial port at the IO address that setserial thinks your port is at. get/set parameters by setserial or stty failed. It will also happen
if you make a typo in the serial port name such as typing "ttys"
instead of "ttyS".
<sect1> Overrun errors on serial port <sect1>"LSR safety check engaged"
<p>LSR is the name of a hardware register. It's claimed that this
means there is no serial port at the specified address.
<sect1>Overrun errors on serial port
<p> This is an overrun of the hardware FIFO buffer and you can't <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 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 kernel 2.4 versions, the port number may be missing and you will only
@ -5505,7 +5564,7 @@ system). Such slow (and expensive modems) were later mainly used
for transmitting data between mainframe computers or for connecting a for transmitting data between mainframe computers or for connecting a
dumb terminal to a mainframe computer over phone lines. Many dumb dumb terminal to a mainframe computer over phone lines. Many dumb
terminals didn't even have a screen display, but printed on paper terminals didn't even have a screen display, but printed on paper
instead. what you typed at the keyboard along with responses from the computer.
<sect2> PCs and BBSs <sect2> PCs and BBSs
<p>With the advent of the personal computer (PCs) in the early 1980s, <p>With the advent of the personal computer (PCs) in the early 1980s,
@ -5513,12 +5572,15 @@ the PC was used like a dumb terminal for connecting to mainframes.
But now files could be transferred and one PC could connect to But now files could be transferred and one PC could connect to
another. another.
The 1980s saw the rise of the Bulletin Board System (BBS). The public The 1980s saw the rise of the Bulletin Board System (BBS). This was
just a computer with a modem listening for incoming calls. The public
could dial up a BBS with a modem and then downloadable free software, could dial up a BBS with a modem and then downloadable free software,
participate in discussions on various topics, play on-line games, etc. participate in discussions on various topics, play on-line games, etc.
It was something like visiting a large Internet site. Many BBSs would Dialing in to a BBS was something like an Internet site. Except that
have a monthly charge but some were run by volunteers and were free. to go to another BBS site, you would need to dial another number (and
Many companies established BBSs for customers that contained support possible pay long distance telephone charges). Many BBSs would have a
monthly charge but some were run by volunteers and were free. Many
companies established BBSs for customers that contained support
information, catalogs, etc. In the early 1990s, BBSs were booming. information, catalogs, etc. In the early 1990s, BBSs were booming.
By the mid 1990s some even offered Internet connections. For some By the mid 1990s some even offered Internet connections. For some
history of BBSs see <url history of BBSs see <url

File diff suppressed because it is too large Load Diff