这是 Linux Serial HOWTO.包含关於如何在 Linux 下设定数据机以及终端机的所有细节,还有一些使用串列的诀窍,以及故障排除的资料.
这份文件著重在 Intel x86 硬体上执行的 Linux,虽然在其它平台上也许也能运作.
本文版权是属於 Greg Hankins(copyright (C) 1993 - 1997).本文件可以在 LDP 的版权许可下散布:
.
http://sunsite.unc.edu/LDP/COPYRIGHT.html
本文在未经作者许可下不得以修改的形式散布.
原文
Copyright (c) 1993 - 1997 by Greg Hankins. This document may be
distributed under the terms set forth in the LDP license at
.
http://sunsite.unc.edu/LDP/COPYRIGHT.html
This document may not be distibuted in modified form without
consent of the author.
新版的 Serial HOWTO 会放到
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Serial-HOWTO
以及映射节点.有一些其它像是 Postscript 以及 DVI 格式的版本放在 other-formats
目录里.
这一份 Serial HOWTO 也可在
http://sunsite.unc.edu/LDP/HOWTO/Serial-HOWTO.html
取得.它也会每月定期的贴到
.
comp.os.linux.answers
请将任何的问题,评论,建议或补充内容寄送给我.我永远渴望听到你对这份 HOWTO 的想法.
我也总是小心地注意改进! 确实地告诉我你有什麽不懂的地方,或者是有什麽地方可以写得更清楚.
你可以经由这个电子邮件位址
与我连系.
[email protected]
所有的邮件我都会回覆,不过可能要花一个星期或更长的时间,看我多忙而定.
我收到一大堆来自 root
及错误设定的站台.
请以真实身份寄信给我,并且确定你的电子邮件系统是正常运作使得我能够回信给你.
如果两个星期之内你还没收到我的回音,请尝试再寄一次.
也可以藉由下面的地址以迟缓的传统信件联络我:
Greg Hankins
College of Computing
801 Atlantic Drive
Atlanta, GA 30332-0280
以及经由全球资讯网到我的网页
.
http://www.cc.gatech.edu/staff/h/Greg.Hankins/
撰写时请将 Serial HOWTO 文件的版本编号含入,这份是 1.11 版.
你的状况可能很不一样.这里的回答可能无法在所有的系统及各种设定的组合下运作.
以知 Linux 可以与下列的串列硬体配合运作.
注意: 由於位址冲突,你不能同时使用 COM4 及 IBM8514 视讯卡.这是 IBM8514 视讯卡的一个 bug.
即插即用型数据机能够在 Linux 上运作.然而,我不建议使用它们,因为有困难.
你有好多事情要试:
loadlin
载入器来启动.
http://www.redhat.com/linux-info/pnp
取回 PnP 工具.
一般来说, Linux 能够支援所有使用 8250, 16450, 16550, 16550A(或与其相容)UART 晶片的串列卡,
或者是能够摸拟上列 UARTs 之一的内接式数据机.
注意: BB-1004 以及 BB-1008,它们并不支援 DCD 及 RI 线路,因而无法让接受拨接的数据机使用.
它们在其它用途上则表现正常.
[email protected]
or
http://www.comtrol.com
ftp://tsx-11.mit.edu/pub/linux/packages/comtrol
[email protected]
[email protected]
or
http://www.cyclades.com
ftp://ftp.cyclades.com/pub/cyclades
and included in Linux
[email protected]
ftp://ftp.signum.se/pub/pccom8
[email protected]
or
http://www.dgii.com
ftp://ftp.dgii.com/drivers/linux
and
[email protected]
[email protected]
has graciously
[email protected]
or
http://www.equinox.com
ftp://ftp.equinox.com/library/sst
[email protected]
or
http://www.gtek.com
ftp://ftp.gtek.com/pub
[email protected]
or
http://www.nyx.net/~arobinso
http://www.nyx.net/~arobinso
and included in Linux
[email protected]
or
http://www.maxpeed.com
ftp://maxpeed.com/pub/ss
[email protected]
or
http://www.moxa.com.tw
ftp://ftp.moxa.com.tw/drivers/c218-320/linux
[email protected]\">[email protected]
or
http://www.sdlcomm.com
ftp://ftp.sdlcomm.com/pub/drivers
[email protected]
ftp://sunsite.unc.edu/pub/Linux/kernel/patches/serial
[email protected]
or
http://www.stallion.com
ftp://ftp.stallion.com/drivers/ata5/Linux
and
其中 Comtrol, Cyclades, Digi, 及 Stallion 的产品在 1995 年六月份的 Linux Journal 上有篇回顾文章.
这篇文章可在
找到.
http://www.ssc.com/lj/issue14
宣称``Winmodems\\的数据机,例如 USR Sportster Winmodem 及 IBM Aptiva MWAVE,
无法在 Linux 上使用.这些数据机具有专门的设计需要特别的 Windows 驱动程式.
避免使用这样的数据机.除此之外,基於相同理由也别使用需要 Rockwell RPI 驱动程式的数据机.
没有 Linux 所需驱动程式的智慧型串列埠也不能使用.
一个输出/入(I/O)埠是用来将资料送入电脑及从电脑取出的通路.
有许多种类的输出/入埠,例如串列埠,平行埠,磁碟控制器,乙太网路卡等等.
我们要处理的是串列埠,因为数据机及终端机是串列装置.
每一个串列埠必须有一个输出/入位址,以及一个插断号码(IRQ).
有四个串列设备对应到 COM1 - COM4:
ttyS0 (COM1) address 0x3f8 IRQ 4
ttyS1 (COM2) address 0x2f8 IRQ 3
ttyS2 (COM3) address 0x3e8 IRQ 4
ttyS3 (COM4) address 0x2e8 IRQ 3
ttyS0
参照 COM1,ttyS1
参照 COM2,以 ttyS2
参照 COM3 ,而以 ttyS3
参照 COM4.
某些安装方式会建立两个额外的设备,给你数据机使用的 /dev/modem
以及给你滑鼠使用的 /dev/mouse
.
它们都是链结到你在安装时所指定适当 /dev
里的设备的符号链结(除非你用的是汇流排滑鼠(bus mouse) ,那麽 /dev/mouse
将会指到汇流排滑鼠这个设备).
已经有些关於使用 /dev/mouse
以及 /dev/modem
优缺点的讨论.
我强烈地反对使用这些链结,如果你打算用你的数据机接受拨接的话,要是你使用了 /dev/modem
那麽你将会因为锁定档案(lock files)无法正确运作而遭遇到困难.
如果你喜欢它们的话就用吧,但是要确定它们指向正确的设备.
然而,如果你改变或除去这个连结,某些应用程式(例如 minicom
)可能要重新设定.
/dev
里的串列设备及主要和次要号码
/dev/ttyS0 major 4, minor 64 /dev/cua0 major 5, minor 64
/dev/ttyS1 major 4, minor 65 /dev/cua1 major 5, minor 65
/dev/ttyS2 major 4, minor 66 /dev/cua2 major 5, minor 66
/dev/ttyS3 major 4, minor 67 /dev/cua3 major 5, minor 67
linux% ls -l /dev/cua*
linux% ls -l /dev/ttyS*
/dev
中建立设备如果你没有其中的一个设备,你必须自己用 mknod
指令建立它.
例如,假定你需要建立 ttyS0
设备:
linux# mknod -m 666 /dev/cua0 c 5 64
linux# mknod -m 666 /dev/ttyS0 c 4 64
MAKEDEV
这个指令稿,在 /dev
下应该会有.
ttyS0
设备则应该输入:
linux# cd /dev
linux# ./MAKEDEV ttyS0
你的多埠板所使用的设备视你使用那一种多埠板而定.
这些细节详细列在随附於 setserial
程式的 rc.serial
里面.
如果你尝试使用多埠板的话我强烈建议你取得最新版本的 setserial
.
你可能会需要建立这些设备.无论是用 mknod
指令或是 MAKEDEV
指令稿都可以.
多埠板所用设备是以加上 ``64 + 埠号\\ 来建立的.所以,如果你想为 ttyS17
建立设备,你应该输入:
linux# mknod -m 666 /dev/cua17 c 5 81
linux# mknod -m 666 /dev/ttyS17 c 4 81
MAKEDEV
指令稿的话,你应该输入:
linux# cd /dev
linux# ./MAKEDEV ttyS17
注意: SIIG 的 IO1812 手册上列出的 COM5-COM8 是错的.它们应该是 COM5=0x250, COM6=0x258, COM7=0x260, 以及 COM8=0x268.
注意: Digi PC/8 Interrupt Status Register 是 0x140.
注意: 对於 AST Fourport,你必须在 rc.serial
中指定 skip_test
.
阅读随附驱动程式而来的资讯.
这些板使用了特殊的装置,而非标准的.这些资讯视你的硬体而定.
getty
?
getty
是在你签入 Unix 机器的时候处理签入程序的一支程式.
如果你希望你的 Linux 机器能够使用数据机拨入的话你会需要 getty
.
如果你只需要用数据机拨出的话你不需要用 getty
.
有三种经常配合 Linux 使用的版本: getty_ps
, mgetty
以及 agetty
.
这些程式的语法是不同的,所以不论你用什麽 getty
请确定你使用了正确的语法.
getty_ps
大部分 Linux 安装套件都安装了 getty_ps
套件.它包含了两个程式:
getty
是由主控台,以及终端机设备所使用,而 uugetty
则是由数据机所使用的.
因为我本身是使用这个版本的 getty
,所以在这份文件中我将会著重於此套件.
mgetty
mgetty
是一个在数据机上使用的 getty
版本.
除了能够允许签入之外, mgetty
也提供传真(FAX)支援及自动 PPP 侦测.
这套 mgetty
的文件写得相当地好,因而不需要再补充什麽.请参考它的安装说明.
你也可以在
找到
http://www.leo.org/~doering/mgetty/mgetty
的最新资讯.
agetty
agetty
是第三种 getty
变型.
它是 getty
一个简单的,完整的功能实作,适合用在虚拟主控台或终端机而非数据机上.
setserial
?
setserial
是一支可以让你查看并修改串列设备各种属性的程式,包括它们所使用的埠位址,中断,以及其它串列埠选项.
你可以藉由执行不加参数的 setserial
来获取版本讯息.
在你的 Linux 系统启动时,只有 ttyS{0-3}
会以预设的 IRQ 4 以及 3 来进行配置.
所以,如果你有任何由其它界面卡提供的串列埠或是 ttyS{0-3}
使用非标准的硬体中断(IRQ)的话,
你必须用这支程式来配置这些串列埠.要知道所有的选项请参考线上手册.
首先,要确定你拥有正确的连接线.你的数据机需要一条直接的 (straight through) 连接线,没有任何跳线 (no pins crossed).
任何一家电脑商店都有.要确定接头的形式是对的.如果你使用的是 DB25 串列埠,它应该是公的 DB25 接头.
把你的数据机接到其中一个串列埠上.如果你需要关於这个动作的辅助说明请参考你的数据机手册.
对於内接式数据机而言,你不需要连接线.内接式数据机不需要串列埠,它自己有内建一个.
你只要配置一个没有被使用的硬体中断给它,并且配置该埠的输出入位址.如果你卡在某个问题上请参考你的数据机手册.
同样,如果你需要关於选择中断以及位址上的帮助,参阅
我能使用超过两个的串列装置吗? 一节的说明.
在某些主机板上你必须关掉被数据机取代的串列埠以避免冲突.
这可经由跳线或 BIOS 的设定来办到,视你的主机板而定.查阅你的主机板手册.
由於 IBM8514 视讯卡的一个错误,如果你想要将你的内接式数据机设在 ttyS3
的话可能会遭遇一些问题.
如果 Linux 没有侦测到你设在 ttyS3
上的内接式数据机,你可以使用 setserial
程式来设定然後数据机将会正常运作.
设在 ttyS{0-2}
上的内接式数据机在侦测上应该不会有任何问题.
由於此视讯卡的错误 Linux 在 ttyS3
没有任何自动侦测的动作.
在你使用复杂的通讯程式如 SLIP 或 PPP 之前先以 kermit
或其它简单的通讯程式来测试这些设定.
你可以从
以及映射节点上找到最新的
http://www.columbia.edu/kermit/kermit
版本.
例如,要是你的数据机设在 ttyS3
上,而且可以接受 115200 bps 的话,你可以这样做:
linux# kermit
C-Kermit 6.0.192, 6 Sep 96, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help.
C-Kermit>set line /dev/ttyS3
C-Kermit>set carrier-watch off
C-Kermit>set speed 115200
/dev/ttyS3, 115200 bps
C-Kermit>c
Connecting to /dev/ttyS3, speed 115200.
The escape character is Ctrl-\\ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
ATE1Q0V1 ; 这是你键入的并按下 Enter 键
OK ; 数据机应该回应这个
如果你的数据机对 AT
指令群有回应,那麽你可以假定你的数据机在 Linux 这一端能正确运作.
现在试著拨给另一台数据机:
ATDT7654321
回到 kermit
的提示符号下,按住 Ctrl 键,按下 \\ (backslash) 录,然後放开 Ctrl 录,再按下 C 键:
Ctrl-\\-C
(Back at linux)
C-Kermit>quit
linux#
这个不过是用\"手动\"方式的拨号测试.正常的方法是让 kermit
用它内建的数据机资料库自动为你拨号,例如,使用 US Robotics (USR) modem:
linux# kermit
C-Kermit 6.0.192, 6 Sep 1997, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help
C-Kermit>set modem type usr ; 选择数据机型式
C-Kermit>set line /dev/ttyS3 ; 选择通讯装置
C-Kermit>set speed 115200 ; 设定通讯速度
C-Kermit>dial 7654321 ; 拨号
Number: 7654321
Device=/dev/ttyS3, modem=usr, speed=115200
Call completed.<BEEP>
Connecting to /dev/ttyS3, speed 115200
The escape character is Ctrl-\\ (ASCII 28, FS).
Type the escape character followed by C to get back,
or followed by ? to see other options.
Welcome to ...
login:
如果你需要一些指引,查阅有关
通讯软体 一节说明.
当你用你的数据机拨号出去时,将你的数据机设到它所能支援的最高速度.
Linux 的 libc
5.x 版以上已经支援到 115200 bps.
libc
通常放在 /lib
,因此到那里看一下你用什麽版本.
如果 Linux 无法认得 57600 或 115200 bps,那麽你必须用 setserial
程式来将你的串列埠设到更高的速度.
关於要怎麽设定参阅
如何将我的串列埠设定为更高速度? 该节说明.
然後在通讯程式里将速度设到 38400 bps.
只要拨号出去的话,你可以任意以你想要的方式配置你的数据机.
如果你计画用你的数据机来接受拨接,那麽你必须将你的数据机配置成与你想要执行的 getty
在相同速度设定下.
所以,如果你想要在 38400 bps 的速度下执行 getty
的话,在配置你数据机的时候将速度设成 38400 bps.
这样做是为了避免你的电脑与数据机之间的速度无法配合.
一般来说,开启错误校正及硬体流量控制的出厂设定值是最适合拨出用的数据机,这些设定值可查阅你的数据机手册.
如果你的数据机支援硬体流量控制(RTS/CTS)的话, 我强烈地建议你去使用它.
这对於支援资料压缩的数据机将格外重要.首先,你必须在串列埠本身上面启动 RTS/CTS 流量控制功能.
这最好是在启动系统的时候做,像是放在 /etc/rc.d/rc.local
或是 /etc/rc.d/rc.serial
里面.
要确定这些档案会被主要的 rc.sysinit
档案执行!你需要对每一个你想要启动硬体流量控制的串列埠执行下列操作:
stty crtscts < /dev/ttyS3
getty_ps
拨入及拨出?让你的数据机能够正确地拨号出去.如果你还没有读过
我怎麽用数据机拨号出去 一节的话现在去读!
它包含有非常重要的设定资讯.如果你只想用数据机来拨出的话你不需要读此节.
要用来接受拨接以及拨号出去的话,那麽你必须确实地设定你的数据机(再一次对你的数据机使用 AT
指令群):
E1 本地回应指令
Q0 回报结果回应
V1 开启冗长模式
S0=0 不要接听 (uugetty 以 WAITFOR 选项来处理)
INIT
)字串可能会失败,因而停住整个程序.
&C1 DCD 只有在连线以後才开启
&S0 DSR 永远为开启
DTR 开启/关闭 重置数据机(是数据机制造商而定 - RTFM)
如果你的数据机不支援储存设定,你可以透过在你配置档里的起始字串来设定这些东西.
参阅下面所述.有一些数据机是以 DIP 开关来影响暂存器的设定,也要确定这些设定是正确的.
我已经开始著手收集不同种类数据机的设定.
到目前为止,我还只有它们的一小部分,如果你想要寄送给我你目前所用配置,非常欢迎!
你可以从这些取得设些设定:
.
ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs
注意: 为了让我的 USR Courier V.34 数据机在 DTR 讯号掉下去後正常地重置,我必须设定 &D2
及 S13=1
(这是设定暂存器 S13 的 bit 0).这确定能在 USR Sportster V.34 上运作正常.
注意: 某些 Supra 数据机处理 DCD 讯号的方式异於其它的数据机.
如果你在用 Supra 数据机,试著设定为 &C0
而不是 &C1
.
你也必须设定 &D2
使之正常地处理 DTR 讯号.
getty_ps
从
最新的版本.
ftp://sunsite.unc.edu/pub/Linux/system/serial
特别地,如果你想使用高速通讯(57600 或 115200 bps),你必须取得 2.0.7j 或以後的版本.
你也必须有 libc 5.x 或之後的版本.
依照预设值,getty_ps
将会照 Linux 的档案系统标准(FSSTND, File System Standard)来配置,这个意思是二进位码将会放在 /sbin
下,而配置档将会以 /etc/conf.{uu}getty.ttyS
N 来命名.
这点并不能从文件叙述中找到!它也会假定 lock files 将得要放到 /var/lock
目录里.要确定你有 /var/lock
这个目录.
如果你不想依照 FSSTND 的话,二进位码将会放到 /etc
里面,而配置档将会放到 /etc/default/{uu}getty.ttyS
N 里面,而 lock files 则将会放到 /usr/spool/uucp
里面.
如果你有使用 UUCP 的话那麽我建议这样做,因为如果你把 lock files 搬到 UUCP 无法找到的地方去那麽它将会出问题的.
getty_ps
也可使用 syslogd
来记录讯息.如果你目前没有执行它的话,参阅 syslogd(1)
以及 syslog.conf(5)
的线上手册来设定 syslogd
.
讯息会优先以 LOG_AUTH 记录,错误使用 LOG_ERR 记录,而除错使用 LOG_DEBUG.
如果你不想使用 syslogd 的话那麽你可以编辑在 getty_ps
原始档案里的 tune.h
用一个记录档来取代,预设档名为 /var/adm/getty.log
.
决定好是否要依照 FSSTND 以及使用 syslog.你也可以选择两者的组合.
编辑 Makefile
,tune.h
以及 config.h
来反应你所作的决定.
然後,根据套件里的说明编译及安装.
从现在起,所有谈到 getty
的地方都是指