发信人: zinger.bbs@cs3.xmu.edu.cn (小白鼠), 信区: cnlinux
标  题: [CLDP] Serial-HOWTO (转载)
发信站: XMU CS BBS (Thu Nov 20 18:33:26 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!xmucs
出  处: cs3.xmu.edu.cn

【 以下文字转载自 twlinux 讨论区 】
【 原文由 CLDP.bbs@physbbs.iams.sinica.edu.tw 所发表 】










   Linux Serial HOWTO 中译版

 作者: Greg Hankins greg.hankins@cc.gatech.edu

      译者: Asd L. Chen &
      C.W.Huang

      v1.11, 15 November 1997 翻译日期: 18 November 1997



   Abstract

     这份文件叙述如何在 Linux 机器上设定串列通讯设备.



1.  简介

这是 Linux Serial HOWTO.包含关於如何在 Linux
下设定数据机以及终端机的所有细节,还有一些使用串列的诀窍,以及故障排除的资料.
这份文件著重在 Intel x86 硬体上执行的 Linux,虽然在其它平台上也许也能运作.

1.1  版权声明

本文版权是属於 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://sun□
site.unc.edu/LDP/COPYRIGHT.html.  This document may not be distibuted in modi□
fied form without consent of the author.

1.2  这份文件的最新版本

新版的 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.

1.3  回馈

请将任何的问题,评论,建议或补充内容寄送给我.我永远渴望听到你对这份 HOWTO
的想法. 我也总是小心地注意改进!
确实地告诉我你有什麽不懂的地方,或者是有什麽地方可以写得更清楚.
你可以经由这个电子邮件位址 greg.hankins@cc.gatech.edu 与我连系.
所有的邮件我都会回覆,不过可能要花一个星期或更长的时间,看我多忙而定.


Linux Serial HOWTO 中译版       1





Linux Serial HOWTO 中译版       2



我收到一大堆来自 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 版.

1.4  免责声明

你的状况可能很不一样.这里的回答可能无法在所有的系统及各种设定的组合下运作.


2.  已经支援的串列硬体

以知 Linux 可以与下列的串列硬体配合运作.

2.1  标准 PC 串列埠

   □标准 PC 串列埠 (COM1 -
     COM4),能够让外接的串列装置(数据机,串列滑鼠等)连接的

   □标准 PC 内接式数据机 (COM1 - COM4)

   □Quickpath Systems Port-Folio 550e (可用的 IRQ 为 3, 4, 5, 9, 10, 11, 12,
     及 15)

注意: 由於位址冲突,你不能同时使用 COM4 及 IBM8514 视讯卡.这是 IBM8514
视讯卡的一个 bug.

2.2  即插即用型(PnP)数据机

即插即用型数据机能够在 Linux 上运作.然而,我不建议使用它们,因为有困难.
你有好多事情要试:

   □试著关掉你电脑 BIOS 及数据机上的 PnP 功能.

   □启动 Windows 95,设定数据机,然後看看在你启动 Linux
     後这些设定能否保留下来. 如果不行的话,再来:

   □启动 Windows 95,设定数据机,然後使用暖开机启动 Linux
     以便让设定能保留下来. 你可以使用 loadlin 载入器来启动.








Linux Serial HOWTO 中译版       3



   □从 http://www.redhat.com/linux-info/pnp 取回 PnP 工具.

   □然後你就有个可用的数据机.

2.3  一般多埠串列卡(附 8250/16450/16550A UART 晶片)

   □AST FourPort and clones (4 ports)

   □Accent Async-4 (4 ports)

   □Arnet Multiport-8 (8 ports)

   □Bell Technologies HUB6 (6 ports)

   □Boca BB-1004 (4 ports), BB-1008 (8 ports), BB-2016 (16 ports)

   □Boca IOAT66 (6 ports)

   □Boca 2by4 (4 serial ports, 2 parallel ports)

   □Computone ValuePort V4-ISA (AST FourPort compatible)

   □Digi PC/8 (8 ports)

   □GTEK BBS-550 (8 ports)

   □Longshine LCS-8880, Longshine LCS-8880+ (AST FourPort compatible)

   □Moxa C104, Moxa C104+ (AST FourPort compatible)

   □PC-COMM (4 ports)

   □Sealevel Systems COMM-2 (2 ports), COMM-4 (4 ports) and COMM-8 (8 ports)

   □SIIG I/O Expander 2S IO1812 (4 ports)

   □STB-4COM (4 ports)

   □Twincom ACI/550

   □Usenet Serial Board II (4 ports)

一般来说, Linux 能够支援所有使用 8250, 16450, 16550, 16550A(或与其相容)UART
晶片的串列卡, 或者是能够摸拟上列 UARTs 之一的内接式数据机.

注意: BB-1004 以及 BB-1008,它们并不支援 DCD 及 RI
线路,因而无法让接受拨接的数据机使用. 它们在其它用途上则表现正常.

2.4  智慧型多埠串列卡

   □Comtrol RocketPort (36MHz ASIC; 4, 8, 16 or 32 ports)

     contact: info@comtrol.com or http://www.comtrol.com









Linux Serial HOWTO 中译版       4



     driver status: supported by Comtrol

     driver location: ftp://tsx-11.mit.edu/pub/linux/packages/comtrol

   □Computone IntelliPort II (16MHz 80186; 4, 8, or 16 ports),

     IntelliPort II EXpandable (20MHz 80186; 16 - 64 ports)

     contact: Michael H. Warfield, mhw@wittsend.atl.ga.us

     driver status: pre-ALPHA

   □Cyclades Cyclom-Y (Cirrus Logic CD1400 UARTs; 8 - 32 ports),

     Cyclom-Z (25MHz MIPS R3000; 8 - 128 ports)

     contact: sales@cyclades.com or http://www.cyclades.com

     driver status: supported by Cyclades

     driver location: ftp://ftp.cyclades.com/pub/cyclades and included in Linux
     kernel since version 1.1.75

   □Decision PCCOM8 (8 ports)

     contact: pccom8@signum.se

     driver location: ftp://ftp.signum.se/pub/pccom8

   □Digi PC/Xi (12.5MHz 80186; 4, 8, or 16 ports),

     PC/Xe (12.5/16MHz 80186; 2, 4, or 8 ports),

     PC/Xr (16MHz IDT3041; 4 or 8 ports),

     PC/Xem (20MHz IDT3051; 8 - 64 ports)

     contact: sales@dgii.com or http://www.dgii.com

     driver status: supported by Digi

     driver location: ftp://ftp.dgii.com/drivers/linux and included in Linux
     kernel since version 2.0

   □Digi COM/Xi (10MHz 80188; 4 or 8 ports)

     contact: Simon Park, si@wimpol.demon.co.uk

     driver status: ALPHA

     note: Simon is often away from email for months at a time due to his job.
     Mark Hatle, fray@krypton.mankato.msus.edu has graciously volunteered to
     make the driver available if you need it. Mark is not maintaining or sup□
     porting the driver.








Linux Serial HOWTO 中译版       5



   □Equinox SuperSerial Technology (30MHz ASIC; 2 - 128 ports)

     contact: sales@equinox.com or http://www.equinox.com

     driver status: supported by Equinox

     driver location: ftp://ftp.equinox.com/library/sst

   □GTEK Cyclone (16C654 UARTs; 6, 16 and 32 ports),

     SmartCard (24MHz Dallas DS80C320; 8 ports),

     BlackBoard-8A (16C654 UARTs; 8 ports),

     PCSS (15/24MHz 8032; 8 ports)

     contact: spot@gtek.com or http://www.gtek.com

     driver status: supported by GTEK

     driver location: ftp://ftp.gtek.com/pub

   □Hayes ESP (COM-bic; 1 - 8 ports)

     contact: Andrew J. Robinson, arobinso@nyx.net or
     http://www.nyx.net/~arobinso

     driver status: supported by author

     driver location: http://www.nyx.net/~arobinso and included in Linux kernel
     since version 2.1.15

   □Maxpeed SS (Toshiba; 4, 8 and 16 ports)

     contact: info@maxpeed.com or http://www.maxpeed.com

     driver status: supported by Maxpeed

     driver location: ftp://maxpeed.com/pub/ss

   □Moxa C218 (12MHz 80286; 8 ports),

     Moxa C320 (40MHz TMS320; 8 - 32 ports)

     contact: info@moxa.com.tw or http://www.moxa.com.tw

     driver status: supported by Moxa

     driver location: ftp://ftp.moxa.com.tw/drivers/c218-320/linux

   □SDL RISCom/8 (Cirrus Logic CD180; 8 ports)

     contact: sales@sdlcomm.com or http://www.sdlcomm.com









Linux Serial HOWTO 中译版       6



     driver status: supported by SDL

     driver location: ftp://ftp.sdlcomm.com/pub/drivers

   □Specialix SIO (20MHz Zilog Z280; 4 - 32 ports),

     XIO (25MHz Zilog Z280; 4 - 32 ports)

     contact: Simon Allen, simonallen@cix.compulink.co.uk

     driver status: BETA

     driver location: ftp://sunsite.unc.edu/pub/Linux/kernel/patches/serial

   □Stallion EasyIO-4 (4 ports), EasyIO-8 (8 ports), and

     EasyConnection (8 - 32 ports) - each with Cirrus Logic CD1400 UARTs,

     Stallion (8MHz 80186 CPU; 8 or 16 ports),

     Brumby (10/12 MHz 80186 CPU; 4, 8 or 16 ports),

     ONboard (16MHz 80186 CPU; 4, 8, 12, 16 or 32 ports),

     EasyConnection 8/64 (25MHz 80186 CPU; 8 - 64 ports)

     contact: sales@stallion.com or http://www.stallion.com

     driver status: supported by Stallion

     driver location: ftp://ftp.stallion.com/drivers/ata5/Linux and included in
     linux kernel since 1.3.27


其中 Comtrol, Cyclades, Digi, 及 Stallion 的产品在 1995 年六月份的 Linux Jour□
nal 上有篇回顾文章. 这篇文章可在 http://www.ssc.com/lj/issue14 找到.

2.5  不支援的串列硬体

宣称``Winmodems''的数据机,例如 USR Sportster Winmodem 及 IBM Aptiva MWAVE,
无法在 Linux 上使用.这些数据机具有专门的设计需要特别的 Windows 驱动程式.
避免使用这样的数据机.除此之外,基於相同理由也别使用需要 Rockwell RPI
驱动程式的数据机.

没有 Linux 所需驱动程式的智慧型串列埠也不能使用.


3.  串列埠的名称是什麽?

一个输出/入(I/O)埠是用来将资料送入电脑及从电脑取出的通路.
有许多种类的输出/入埠,例如串列埠,平行埠,磁碟控制器,乙太网路卡等等.
我们要处理的是串列埠,因为数据机及终端机是串列装置.
每一个串列埠必须有一个输出/入位址,以及一个插断号码(IRQ). 有四个串列设备对应到
COM1 - COM4:








Linux Serial HOWTO 中译版       7



     ttyS0 (COM1) address 0x3f8 IRQ 4
     ttyS1 (COM2) address 0x2f8 IRQ 3
     ttyS2 (COM3) address 0x3e8 IRQ 4
     ttyS3 (COM4) address 0x2e8 IRQ 3


如果 Linux 启动时没有侦测到任何串列装置,请确定在编译核心时有加入串列支援.
在这份文件中,我是以 ttyS0 参照 COM1,ttyS1 参照 COM2,以 ttyS2 参照 COM3
,而以 ttyS3 参照 COM4. 注意这些装置预设的 IRQ
是重叠的.你无法由这些预设值使用所有的串列埠,你必须重新指定不同的 IRQ. 参见
我能使用超过两个的串列装置吗? (section 8., page 17) 一节说明如何设定 IRQ.

某些安装方式会建立两个额外的设备,给你数据机使用的 /dev/modem
以及给你滑鼠使用的 /dev/mouse. 它们都是链结到你在安装时所指定适当 /dev
里的设备的符号链结(除非你用的是汇流排滑鼠(bus mouse) ,那麽 /dev/mouse
将会指到汇流排滑鼠这个设备).

已经有些关於使用 /dev/mouse 以及 /dev/modem 优缺点的讨论.
我强烈地反对使用这些链结,如果你打算用你的数据机接受拨接的话,要是你使用了
/dev/modem 那麽你将会因为锁定档案(lock files)无法正确运作而遭遇到困难.
如果你喜欢它们的话就用吧,但是要确定它们指向正确的设备.
然而,如果你改变或除去这个连结,某些应用程式(例如 minicom)可能要重新设定.

3.1  在 /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*

3.1.1  在 /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


这将会处理关於连线进来以及连线出去的设备之建立,并设定正确的权限.









Linux Serial HOWTO 中译版       8



3.2  一般多埠板的注意事项

你的多埠板所使用的设备视你使用那一种多埠板而定. 这些细节详细列在随附於 setse□
rial 程式的 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


要注意到 ''64 + 17 = 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.

3.3  智慧型多埠板的注意事项

阅读随附驱动程式而来的资讯.
这些板使用了特殊的装置,而非标准的.这些资讯视你的硬体而定.


4.  你应知道的有趣程式

4.1  什麽是 getty?

getty 是在你签入 Unix 机器的时候处理签入程序的一支程式. 如果你希望你的 Linux
机器能够使用数据机拨入的话你会需要 getty.
如果你只需要用数据机拨出的话你不需要用 getty. 有三种经常配合 Linux 使用的版本:
getty_ps, mgetty 以及 agetty. 这些程式的语法是不同的,所以不论你用什麽 getty
请确定你使用了正确的语法.

4.1.1  关於 getty_ps

      大部分 Linux  安装套件都安装了 getty_ps 套件.它包含了两个程式: getty
是由主控台,以及终端机设备所使用,而 uugetty 则是由数据机所使用的.
因为我本身是使用这个版本的 getty,所以在这份文件中我将会著重於此套件.

4.1.2  关於 mgetty

mgetty 是一个在数据机上使用的 getty 版本. 除了能够允许签入之外, mgetty
也提供传真(FAX)支援及自动 PPP 侦测. 这套 mgetty
的文件写得相当地好,因而不需要再补充什麽.请参考它的安装说明. 你也可以在
http://www.leo.org/~doering/mgetty/ 找到 mgetty 的最新资讯.










Linux Serial HOWTO 中译版       9



4.1.3  关於 agetty

agetty 是第三种 getty 变型. 它是 getty
一个简单的,完整的功能实作,适合用在虚拟主控台或终端机而非数据机上.

4.2  什麽是 setserial?

setserial
是一支可以让你查看并修改串列设备各种属性的程式,包括它们所使用的埠位址,中断,以及其它串列埠选项.
你可以藉由执行不加参数的 setserial 来获取版本讯息.

在你的 Linux 系统启动时,只有 ttyS{0-3} 会以预设的 IRQ 4 以及 3 来进行配置.
所以,如果你有任何由其它界面卡提供的串列埠或是 ttyS{0-3}
使用非标准的硬体中断(IRQ)的话,
你必须用这支程式来配置这些串列埠.要知道所有的选项请参考线上手册.


5.  我怎麽用数据机拨号出去?

5.1  硬体需求

首先,要确定你拥有正确的连接线.你的数据机需要一条直接的 (straight through)
连接线,没有任何跳线 (no pins crossed).
任何一家电脑商店都有.要确定接头的形式是对的.如果你使用的是 DB25
串列埠,它应该是公的 DB25 接头.
把你的数据机接到其中一个串列埠上.如果你需要关於这个动作的辅助说明请参考你的数据机手册.

5.1.1  内接式数据机注意事项

对於内接式数据机而言,你不需要连接线.内接式数据机不需要串列埠,它自己有内建一个.
你只要配置一个没有被使用的硬体中断给它,并且配置该埠的输出入位址.如果你卡在某个问题上请参考你的数据机手册.
同样,如果你需要关於选择中断以及位址上的帮助,参阅
我能使用超过两个的串列装置吗? (section 8., page 17) 一节的说明.

在某些主机板上你必须关掉被数据机取代的串列埠以避免冲突. 这可经由跳线或 BIOS
的设定来办到,视你的主机板而定.查阅你的主机板手册.

由於 IBM8514 视讯卡的一个错误,如果你想要将你的内接式数据机设在 ttyS3
的话可能会遭遇一些问题. 如果 Linux 没有侦测到你设在 ttyS3
上的内接式数据机,你可以使用 setserial 程式来设定然後数据机将会正常运作. 设在
ttyS{0-2} 上的内接式数据机在侦测上应该不会有任何问题. 由於此视讯卡的错误 Linux
在 ttyS3 没有任何自动侦测的动作.

5.2  与你的数据机交谈

在你使用复杂的通讯程式如 SLIP 或 PPP 之前先以 kermit
或其它简单的通讯程式来测试这些设定. 你可以从 http://www.columbia.edu/kermit/
以及映射节点上找到最新的 kermit 版本. 例如,要是你的数据机设在 ttyS3
上,而且可以接受 115200 bps 的话,你可以这样做:













Linux Serial HOWTO 中译版      10



     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


其中 7654321 是一个电话号码.如果你的是脉冲线路(pulse line)的话用 ATDP 而不是
ATDT. 如果可以拨得出去,你的数据机就可正常运作.

回到 kermit 的提示符号下,按住 Ctrl 键,按下 \ (backslash) 录,然後放开 Ctrl
录,再按下 C 键:

     Ctrl-\-C
     (Back at linux)
     C-Kermit>quit
     linux#

这个不过是用"手动"方式的拨号测试.正常的方法是让 kermit
用它内建的数据机资料库自动为你拨号,例如,使用 US Robotics (USR) modem:

























Linux Serial HOWTO 中译版      11



     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:

如果你需要一些指引,查阅有关 通讯软体 (section 10., page 20) 一节说明.

当你用你的数据机拨号出去时,将你的数据机设到它所能支援的最高速度. Linux 的
libc 5.x 版以上已经支援到 115200 bps. libc 通常放在
/lib,因此到那里看一下你用什麽版本. 如果 Linux 无法认得 57600 或 115200
bps,那麽你必须用 setserial 程式来将你的串列埠设到更高的速度.
关於要怎麽设定参阅 如何将我的串列埠设定为更高速度? (section 9., page 19)
该节说明. 然後在通讯程式里将速度设到 38400 bps.

5.3  拨出用的数据机配置

只要拨号出去的话,你可以任意以你想要的方式配置你的数据机.
如果你计画用你的数据机来接受拨接,那麽你必须将你的数据机配置成与你想要执行的
getty 在相同速度设定下. 所以,如果你想要在 38400 bps 的速度下执行 getty
的话,在配置你数据机的时候将速度设成 38400 bps.
这样做是为了避免你的电脑与数据机之间的速度无法配合.
一般来说,开启错误校正及硬体流量控制的出厂设定值是最适合拨出用的数据机,这些设定值可查阅你的数据机手册.

5.4  硬体流量控制

如果你的数据机支援硬体流量控制(RTS/CTS)的话, 我强烈地建议你去使用它.
这对於支援资料压缩的数据机将格外重要.首先,你必须在串列埠本身上面启动 RTS/CTS
流量控制功能. 这最好是在启动系统的时候做,像是放在 /etc/rc.d/rc.local 或是
/etc/rc.d/rc.serial 里面. 要确定这些档案会被主要的 rc.sysinit
档案执行!你需要对每一个你想要启动硬体流量控制的串列埠执行下列操作:

     stty crtscts < /dev/ttyS3


你也必须在你的数据机上启动 RTC/CTS
流量控制.要怎麽做请参考你的数据机手册,因为这在不同的数据机制造商之间是不同的.
如果你的数据机支援设定储存的话则要确定将配置存入你的数据机.








Linux Serial HOWTO 中译版      12



6.  我要怎麽样用数据机以 getty_ps 拨入及拨出?

让你的数据机能够正确地拨号出去.如果你还没有读过 我怎麽用数据机拨号出去 (sec□
tion 5., page 9) 一节的话现在去读!
它包含有非常重要的设定资讯.如果你只想用数据机来拨出的话你不需要读此节.

6.1  拨入及拨出的数据机配置

要用来接受拨接以及拨号出去的话,那麽你必须确实地设定你的数据机(再一次对你的数据机使用
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-con□
figs.

注意: 为了让我的 USR Courier V.34 数据机在 DTR
讯号掉下去後正常地重置,我必须设定 &D2 及 S13=1(这是设定暂存器 S13 的 bit
0).这确定能在 USR Sportster V.34 上运作正常.

注意: 某些 Supra 数据机处理 DCD 讯号的方式异於其它的数据机. 如果你在用 Supra
数据机,试著设定为 &C0 而不是 &C1. 你也必须设定 &D2 使之正常地处理 DTR 讯号.

6.2  安装 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 Stan□
dard)来配置,这个意思是二进位码将会放在 /sbin 下,而配置档将会以
/etc/conf.{uu}getty.ttySN 来命名. 这点并不能从文件叙述中找到!它也会假定 lock
files 将得要放到 /var/lock 目录里.要确定你有 /var/lock 这个目录.









Linux Serial HOWTO 中译版      13



如果你不想依照 FSSTND 的话,二进位码将会放到 /etc 里面,而配置档将会放到
/etc/default/{uu}getty.ttySN 里面,而 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 的地方都是指 getty_ps 而言. 谈到 uugetty 则是指
getty_ps 套件里的 uugetty 而言. 这些指令在 mgetty 或 agetty 上将不能运作.

6.3  设定 uugetty

为了要能从你的数据机拨入及拨出,我们想要用 uugetty.uugetty 执行很重要的 lock
file 检查. 如果没有的话更新 /etc/gettydefs
以便为数据机增加项目(注意到这里的项目互相参考,它们并非固定速度 -
每个项目之间的空白行是必要的):

     # Modem entries
     115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600

     57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400

     38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200

     19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600

     9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400

     2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200

如果你有 9600 bps
或更快且具资料压缩功能的数据机,你可以锁定你的串列埠速度而让数据机去处理传输的其它速度.
然後,不像上面在 /etc/gettydefs 里的一连串列表,只需为数据机加上一行,例如:

     # 115200 fixed speed
     F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #F115200

      如果你将你的数据机设成 RTS/CTS 执行硬体流量控制的话,那麽你可以将 CRTSCTS
加到这些项目里:

     # 115200 fixed speed with hardware flow control
     F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200

如果你要的话,你可以让 uugetty 在签入时的标题上印出些有趣的东西.








Linux Serial HOWTO 中译版      14



在我的例子里,我印出系统名称,串列线路,以及目前的每秒位元传输率.
你可以加入其它的东西:

    @B   目前的每秒位元传输率(bps, 在看到 @B 时估计的).
    @D   现在日期, 格式 MM/DD/YY.
    @L   getty 所连接的串列线路.
    @S   系统名称.
    @T   现在时间,格式 HH:MM:SS (24 小时制).
    @U   目前签入的使用者.这是在 /etc/utmp 档中非空 ut_name 栏位项目的计数值.
    @V   版本值,在预设档中给定的.
    如果要显示 '@' 符号的话,用 '\@' 或 '@@'.

接下来,确定你数据机所接的串列埠有输出及输入的设备. 如果你的数据机设在 ttyS3
的话你将会需要 /dev/cua3,以及 /dev/ttyS3 这两个设备.
如果你没有正确的设备,参阅 在 /dev 中建立设备 (section 3.1.1, page 7)
该节说明如何建立设备,并且建立这些设备. 如果你希望在你的 uugetty
正在监视这个串列埠是否有人签入时还能够用数据机拨出的话,用 /dev/cuaN
设备而不要用 /dev/ttySN.

当你正在编辑 /etc/gettydefs 时,你可以这样来检查它的语法是否正确:

     linux# getty -c /etc/gettydefs

6.4  自订 uugetty

你有许多参数可以用来改变你所拥有的每一个埠.这些是以分别对每一个埠使用不同配置档的方式来实作的.
这个 /etc/conf.uugetty 档案会被所有的 uugetty 行程所使用,而
/etc/conf.uugetty.ttySN 只由那个埠使用. 预设的配置档范例可以在 getty_ps
的原始档案里找到,这在绝大部分的 Linux 发行套件里面都会有.
因为篇幅的考量,没有把它们列在这里. 要注意的是如果你用的是比较旧的 getty
版本(比 2.0.7e 版还旧),或者是你没有依照 FSSTND 的话,那麽预设的档案将会是
/etc/default/uugetty.ttySN. 我的 /etc/conf.uugetty.ttyS3 看起来像这样:

     # sample uugetty configuration file for a Hayes compatible modem to allow
     # incoming modem connections
     #
     # alternate lock file to check... if this lock file exists, then uugetty is
     # restarted so that the modem is re-initialized
     ALTLOCK=cua3
     ALTLINE=cua3
     # line to initialize
     INITLINE=cua3
     # timeout to disconnect if idle...
     TIMEOUT=60
     # modem initialization string...
     # format: <expect> <send> ... (chat sequence)
     INIT="" AT\r OK\r\n
     WAITFOR=RING
     CONNECT="" ATA\r CONNECT\s\A
     # this line sets the time to delay before sending the login banner
     DELAY=1
     #DEBUG=010

将下面那一行加到你的 /etc/inittab 里去,那麽 uugetty








Linux Serial HOWTO 中译版      15



就会在你的串列埠上执行(用你环境的正确资讯来取代 -
配置档的位置,串列埠名,速度,及预设终端机形式):

     S3:456:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100


重新启动 init:

     linux# init q


对於在你 /etc/inittab
里面的速度参数,你会希望使用你数据机所能支援的最高每秒位元传输率.

现在 Linux 将会随时监视你的串列埠是否有连线.从别的地方拨号并签入你的 Linux
机器.

uugetty 还有更多的选项,参阅 getty (lm) 线上手册获得更完整的叙述.
别的不提它还有排程(scheduling)的功能,以及回拨的能力.


7.  我怎麽设定终端机连线到我的 PC 上?

本节的指示能让终端机及其它电脑连上你的 Linux 机器的串列埠.

7.1  硬体需求

要确定你有一条正确的连接线.在电脑商店买的 null modem 连接线就可以胜任.
但是它一定得要是一条 null modem
线!许多的电脑站将这类的连接线说成是串列印表接线. 确定你是使用你的串列埠,公的
DB25 或是 DB9 接头,而不是你的并列埠(母的 DB25 或 centronics).

      对 DB-25 接头而言,至少你得要有:


  PC male DB25 Terminal DB25
  TxD Transmit Data       2 --> 3   RxD Receive Data
  RxD Receive Data       3 <-- 2   TxD Transmit Data
  SG Signal Ground       7 --- 7   SG Signal Ground

如果你想要拥有流量控制以及硬体连线协商(handshaking)的话,你必须要有一条完整的
null modem 接线:

  PC male DB25 Terminal DB25
  TxD Transmit Data       2 --> 3   RxD Receive Data
  RxD Receive Data       3 <-- 2   TxD Transmit Data
  RTS Request To Send       4 --> 5   CTS Clear To Send
  CTS Clear To Send       5 <-- 4   RTS Request To Send
  DSR Data Set Ready       6
      |
  DCD Carrier Detect       8 <-- 20   DTR Data Terminal Ready
  SG Signal Ground       7 --- 7   SG Signal Ground
    6   DSR Data Set Ready
    |








Linux Serial HOWTO 中译版      16



  DTR Data Terminal Ready  20 --> 8   DCD Carrier Detect

如果你的串列埠上有一个 DB9 的接头,试试看下面这个:

  PC DB9    Terminal DB25
  RxD Receive Data       2 <-- 2   TxD Transmit Data
  TxD Transmit Data       3 --> 3   RxD Receive Data
  SG Signal Ground       5 --- 7   SG Signal Ground

或者,一条完整的 DB9 对 DB25 null modem 连接线:

  PC DB9 Terminal DB25
  RxD Receive Data       2 <-- 2   TxD Transmit Data
  TxD Transmit Data       3 --> 3   RxD Receive Data
    6   DSR Data Set Ready
    |
  DTR Data Terminal Ready   4 --> 8   DCD Carrier Detect
  GND Signal Ground       5 --- 7   GND Signal Ground
  DCD Carrier Detect       1
      |
  DSR Data Set Ready       6 <-- 20   DTR Data Terminal Ready
  RTS Request To Send       7 --> 5   CTS Clear To Send
  CTS Clear To Send       8 <-- 4   RTS Request To Send
  (RI Ring Indicator       9 not needed)


(没错! 第二支及第三支脚在 DB9 连接头上确实和 DB25 接头意义相反!)

如果使用的并不是完整的 null modem  连接线的话,你可能得要做下面这个欺骗的技巧:
在你电脑这边的接头上,把 RTS 跟 CTS 接在一起,而且也把 DSR, DCD 以及 DTR
接在一起.
用这个方法,当电脑要求一个正确的硬体连线协商信号时,它就可以得到(从它自己发出的).

现在你已经有正确的连接线,把你的终端机连接到你的电脑上.
如果你可以的话,告诉你的终端机忽略数据机控制信号. 试试看用 9600 bps, 8 data
bits, 1 stop bit, no parity bits 来设定终端机.

7.2  设定 getty

在 /etc/gettydefs 里面增加一个给 getty
用来连接你终端机项目,如果还没有这项的话:

     # 38400 bps Dumb Terminal entry
     DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400

     # 19200 bps Dumb Terminal entry
     DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200

     # 9600 bps Dumb Terminal entry
     DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600

如果你要的话,你可以让 getty 在签入的标题上印出一些有趣的东西.
在我的例子里,我印出系统名称以及串列线路.你可以加入其它的东西:









Linux Serial HOWTO 中译版      17



     @B    目前的每秒位元传输率(bps, 在看到 @B 时估计的).
     @D    现在日期, 格式 MM/DD/YY.
     @L    getty 所连接的串列线路.
     @S    系统名称.
     @T    现在时间,格式 HH:MM:SS (24 小时制).
     @U    目前签入的使用者.这是在 /etc/utmp 档中非空 ut_name 栏位项目的计数值.
     @V    版本值,在预设档中给定的.
     如果要显示 '@' 符号的话,用 '\@' 或 '@@'.

当你正在编辑 /etc/gettydefs 时,你可以这样来检查它的语法是否正确:

     linux# getty -c /etc/gettydefs

确定没有 getty 或 uugetty 的设定档(/etc/default/{uu}getty.ttySN 或
/etc/conf.{uu}getty.ttySN)在你的终端机连接的串列埠上,
因为这也许会干扰到在终端机上执行的 getty.如果有的话请移除它.

编辑你的 /etc/inittab 让 getty 在你的串列埠上执行(用你环境的正确资讯来取代 -
配置档的位置,串列埠名,速度,及预设终端机形式):

     S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100


重新起始 init:

     linux# init q

现在你应该会在你的终端机上看到签入提示.也许你得按返回键(return)几次让终端机注意到.

7.3  将 PC 设定成终端机的注意事项

许多人将其它 PC 设定成终端机连接到 Linux 机器上.例如,旧的 8088 或是 286 PC
非常适合这个用途. 你需要的只是一张包含适合让你的终端机-个人电脑 (Terminal-PC)
使用的 DOS 磁片,以及让你的终端机-个人电脑执行的通讯程式. kermit
在这个用途上表现得非常好. 你可以在这台机器 http://www.columbia.edu/kermit/
上找到几乎可以让任何现存的作业系统使用的已编译的 kermit 版本. 其它流行的 DOS
通讯程式像是 telix 以及 procomm 也将会有一样好的表现.
要确定输入正确的串列埠资讯到你终端机-个人电脑的通讯设定里去.


8.  我能使用超过两个的串列装置吗?

你不需要阅读这一节,除非你想要使用三个或更多的串列设备...(假定你没有多埠卡的话).

假如你有另一个多馀的串列埠,是的,你可以.
你可以使用的串列埠数目受限於我们必须使用的硬体中断要求以及埠输出入位址的数目.
这并不是 Linux 的限制,而是 PC
汇流排的限制.必须指定中断跟位址给每一个串列设备.
串列设备可以是串列埠,内接式数据机或是多埠卡.

多埠卡是为了拥有许多个串列埠来分享卡上所有串列埠所使用的相同 IRQ 而特别设计的.
Linux 对卡上的每一个埠使用不同的输出入位址以便从它们获取资料.










Linux Serial HOWTO 中译版      18



8.1  选择串列设备的中断位址

你的 PC 一般会将 ttyS0 以及 ttyS2 设在 IRQ 4 而将 ttyS1 以及 ttyS3 设在 IRQ 3.
经由检视 /proc/interrupts 你可以知道那些 IRQs 正被使用.
要使用两个以上的串列设备的话,你必须重新指定一个中断.
一个好选择是从你的并列埠那边重新指定一个中断.你的 PC 一般会设定 IRQ5 或是 IRQ7
当你的并列埠,但是很少人会使用两个并列埠.
你可以重新指定其中一个中断给串列设备,并而仍然能顺利地使用一个并列埠.
你将会需要用到 setserial
程式来做这件事.此外,你必须调整你板子上的跳接设定(Jumpers),查看你主机板的说明文件.
跳接你想要给每个埠使用的 IRQ.

你将得要做些设定让每个串列设备都有一个,并且是唯一的一个中断. 这里是我在
/etc/rc.d/rc.local 里所用的设定 - 你应该在启动系统时的某个地方做这件事.

  /sbin/setserial /dev/ttyS0 irq 3   # my serial mouse
  /sbin/setserial /dev/ttyS1 irq 4   # my Wyse dumb terminal
  /sbin/setserial /dev/ttyS2 irq 5   # my Zoom modem
  /sbin/setserial /dev/ttyS3 irq 9   # my USR modem

标准的 IRQ 指定:

   IRQ 0    Timer channel 0
   IRQ 1    Keyboard
   IRQ 2    Cascade for controller 2
   IRQ 3    Serial port 2
   IRQ 4    Serial port 1
   IRQ 5    Parallel port 2
   IRQ 6    Floppy diskette
   IRQ 7    Parallel port 1
   IRQ 8    Real-time clock
   IRQ 9    Redirected to IRQ2
   IRQ 10    not assigned
   IRQ 11    not assigned
   IRQ 12    not assigned
   IRQ 13    Math coprocessor
   IRQ 14    Hard disk controller 1
   IRQ 15    Hard disk controller 2

在选择中断时真的没有什麽正确的.只要确定它不是已经被主机板,或是其它界面卡所使用.
2, 3, 4, 5 或是 7 是好选择.``not
assigned''的意思是目前并没有什麽东西在标准情况下会固定使用这些硬体中断要求.
也要注意到 IRQ 2 跟 IRQ 9 是一样的.你可以称它为 2 或
9,串列驱动程式非常了解这一点. 如果你有一块 16-bit
汇流排连接头的串列卡,你也可以使用 IRQ 10, 11, 12 或 15.

只要确定你使用的并非是 IRQ 0, 1, 6, 8, 13 或是 14! 它们是由你的主机板所使用的.
如果你拿走她的 IRQs 的话,会使得她很不高兴. 完成之後,再次检查 /proc/inter□
rupts 以确定没有冲突发生.

8.2  设定串列设备的位址

接下来,你必须设埠位址.查看你主机板手册的跳接设定.就像中断,每个位址只能有一个串列设备.
你的埠通常会配置成像下面这样:








Linux Serial HOWTO 中译版      19



  ttyS0 address 0x3f8
  ttyS1 address 0x2f8
  ttyS2 address 0x3e8
  ttyS3 address 0x2e8

选择你想要给每一个串列设备使用的位址并且依此来设定跳接. 我将我的数据机设在
ttyS3 ,我的滑鼠在 ttyS0,而我的终端机在 ttyS2.

当你重新启动时, Linux 应该会在你所设定的位址看到你的串列埠. Linux 所看到的
IRQ 可能不会跟你跳接设定的相符. 不必担心这一点. Linux
在它启动的时候并没有做任何的 IRQ 侦测, 因为 IRQ
侦测是危险并且有可能被欺骗的.使用 setserial 来告诉 Linux 那个埠使用那个 IRQ.
你也可以检查 /proc/ioports 来看看在 Linux 启动後那些输出输入埠位址被使用.


9.  我怎样将我的串列埠设到较高的速度? 我的数据机又应该使用什麽样的速度?

这一节应该可以帮你找出当你透过通讯程式,或是 getty
程式使用你的数据机时应该使用什麽速度.

   □如果你所有的是比 9600 bps (V.32)
     数据机还要慢的东西,将你的速度设到你的数据机所能支援的最高速度. 例如 300
     (V.21/Bell 103), 1200 (V.22/Bell 212A), 或 2400 bps (V.22bis).

   □如果你有 9600 bps (V.32) 的数据机,并且支援 V.42bis 资料压缩,使用 38400
     来当作你的速度. V.42bis 压缩具有 4:1 的理论值,也就是``4 * 9600 =
     38400''.

   □如果你有 14400 bps (V.32bis) 的数据机,并且支援 V.42bis
     资料压缩功能的话,使用 setserial 程式,加上 spd_hi
     旗标将你的串列埠配置成使用 57600 bps (4 * 14400 = 57600) 的速度.

     如果你有 28800 或 33600 bps (V.FC 或是 V.34) 的数据机则使用 spd_vhi 旗标
     (4 * 28800 = 115200).

     然後,在你的通讯程式,或是 /etc/inittab 里使用 38400 当作速度设定.
     这是现在你能设的最高速度.要确定你有 16550A 通用非同步接收转换器(UART).

     如果你的 libc 版本至少是 5.x,那麽会有叫做 57600 及 115200 的速度. libc
     放在 /lib,所以在那里看一下你用的版本是什麽.
     如果你的应用程式已经编译以取用此优点,你可以直接使用它们(不必用 setse□
     rial), 许多的套件都已经有了,因此如果你有最近版本的 Linux
     套件,最好的方法就是尝试使用这些更高的速度.

先在命令列下用 setserial
指令测试,然後在你确定它们可以运作後,将你所作的修改放进 /etc/rc.d/rc.serial 或
/etc/rc.d/rc.local 以便在系统启动执行它们. 在我的 /etc/rc.d/rc.local
里,我是这样设定我的 ttyS3 到 115200 bps 的:

     /sbin/setserial /dev/ttyS3 spd_vhi

确定你以合法的路径使用 setserial,以及合法的装置名称.
你可以下法检查一个串列埠的设定:









Linux Serial HOWTO 中译版      20



     setserial -a /dev/ttyS3


10.  通讯程式及工具

这里有一个通讯程式的列表,如果你所使用的发行套件里头并没有的话,这些都可以在一般的
FTP 站找到.

   □ecu - 一套通讯程式

   □C-Kermit1 - 可携的,可程序化的串列及 TCP/IP
     通讯程式,包含传档及字完转换功能

   □minicom - 类似 telix 的通讯程式

   □procomm - 包含 zmodem,类似 procomm 的通讯程式

   □seyon - 以 X 为基础环境的通讯程式

   □xc - xcomm 通讯套件

   □其它有用的程式是 term 及 SLiRP.它们提供使用 shell 帐号的 TCP/IP 功能.

   □screen 是另一个多区段作业(multi-ses□
     sion)的程式.这个程式就像的动作就像虚拟控制台.

   □callback 这支程式会使你的数据机回拨给你.

   □mgetty+fax 处理传真事务,并且提供一个不同的 getty.

   □ZyXEL 是 ZyXEL U-1496
     数据机的控制程式.它处理接受拨接,拨号,回拨保密,传真,以及语音信箱功能.

   □SLIP 及 PPP 的软体可在 ftp://sunsite.unc.edu/pub/Linux/system/net□
     work/serial 找到.

   □其它东西可以在 ftp://sunsite.unc.edu/pub/Linux/system/serial 以及
     ftp://sunsite.unc.edu/pub/Linux/apps/serialcomm
     或许多的映射节点之一找到.这些是保留所有串列程式的目录.


11.  串列使用秘诀


这里有一些你可能发现很有用的串列秘诀...

11.1  kermit 以及 zmodem

要在 kermit 下使用 zmodem 的话,将下列内容加到你的 .kermrc 里去:

     define rz !rz < /dev/ttyS3 > /dev/ttyS3

____________________

1. <URL:http://www.columbia.edu/kermit/>







Linux Serial HOWTO 中译版      21



     define sz !sz \%0 > /dev/ttyS3 < /dev/ttyS3


要确定正确地放入你数据所在的串列埠.然後,要使用的话,只要在 kermit
的提示符号下键入 rz 或 sz <档名> 即可.

11.2  自动设定终端机型式

要在当你签入的时候自动设定你的终端机形式的话,把终端机的形式加到 /etc/inittab
的项目里去. 如果我有一台 vt100 终端机在 ttyS1 上 ,我要对 getty 指令加上
``vt100'':

     S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100

你也可以使用
tset,可以在你签入的时候建立终端机的特性,而且不需要依赖任何的预设值.

11.3  在串列连线下的彩色 ls

      如果 ls 因为彩色特性而扰乱了你的终端机模拟,把它关掉. ls --color 以及 ls
--colour 都使用彩色特性.有些安装方式使得 ls 预设为使用彩色. 检查 /etc/profile
以及 /etc/csh.cshrc 里的 ls 别名. 如果你不想修改系统预设值的话,你也可以设给
ls 别名 ls --no-color.

11.4  从终端机所连接的印表机进行列印

      有一个叫做 vtprint 的程式可以做得到,在 ftp://ftp.sdsu.edu/pub/vtprint 及
http://www.sdsu.edu/~garrett 可取得.

另外一支叫 xprt 的程式也能做到.它可在 ftp://sunsite.unc.edu/pub/Linux/sys□
tem/printing 找到.

11.5  Linux 能不能够自动地配置串列设备?

可以.要让 Linux 在启动的时候自动地侦测并且设定串列设备的话,把这一行:

     /sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig


加到你的 /etc/rc.d/rc.local 或是 /etc/rc.d/rc.serial 档案里面.
对每一个你希望自动配置的串列埠都要做.要确定所给的是一个真正存在於你电脑上的设备名称.

11.5.1 多埠卡的注意事项

对於卡的位址,以及 IRQs 查阅 setserial 程式随附的 rc.serial.
它有很多关於多埠卡的细节,包括输出入位址以及设备名称.

11.6  使用串列控制台

在第三十六期的 Linux Journal 在 http://www.ssc.com/lj/issue36/index.html
有篇文章解释如何使用串列控制台(serial console).
不幸的是,寄电子邮件给作者都被退回.我希望这篇文章会很快地上述 URL 的 Linux
Journal 网站中.









Linux Serial HOWTO 中译版      22



11.7  更高的串列流量

如果在一部使用 (E)IDE 磁碟机的系统上你发现流量很慢而且串列埠常溢满,你可以取得
hdparm. 这是一个可以修改 (E)IDE 参数,包含让一磁碟 IRQ 动作期间其它 IRQs
仍可工作.
这会改善反应速度并帮助消除溢满.确定小心地读过了线上手册,因为某些磁碟/控制卡组合不喜欢它并且可能损毁档案系统.

也可以看一下一个叫 irqtune 的工具,可以改变一个装置 IRQ
的优先顺序,例如你数据机所在的串列埠.这也可能改善你系统的串列流量. irqtune
的常见问题解答(FAQ)可在 http://www.best.com/~cae/irqtune 找到.


12.  更进一步...

这一节并不需要阅读,但是可能带给你一些对於 Unix
以及电子通讯世界更进一步的了解.

12.1  什麽是锁定档案(lock files)?

Lock files 只是单纯的一个档案用来表示某个特定的设备正在使用中. 它们保存在
/usr/spool/uucp 或是 /var/lock 里面. Linux 的 lock files 名字都是
LCK..name,其中的 name 不是设备名称就是一个 UUCP 节点名称. 有些程序建立这些
locks 以便让它们自己可以独占该设备的存取权.
例如如果你从你的数据机拨号出去,将会出现一个 lock
告诉其它程序现在已经有人正在使用数据机. Lock files
里面主要是包含锁住该设备的程序的行程号码(PID). 大部份的程式会查阅
lock,然後检查行程表(process table)中锁定该设备的行程来试著决定这个 lock
是否仍然有效. 如果发现这个 lock 是有效的话,这个程式(应该)要结束.
如果不是,某些程式会删除过时的
lock,然後使用该设备,并在行程执行时建立他们自己的 lock.
其它的程式就只好结束并告诉你该设备正在使用中.

12.2  ``baud'' 对 ``bps''

``baud'' 跟 ``bps'' 可能是电脑/电子通讯这个领域里最常被错用的术语之一.
当它们事实上并不相同的时候,很多人仍交替使用这些术语.

      鲍率(baud)
    鲍率是每秒钟数据机(调变解调器,modulator-demodula□
    tor)送出多少次讯号改变的度量. 例如,鲍率为 1200 的含意是信号每隔
    833 微秒(microsecond)即改变一次. 普遍的鲍率有 50, 75, 110, 300,
    600, 1200 以及 2400.大部份的高速数据机所使用的鲍率为 2400.
    因为语音级(voice-grade)电话线路的频宽限制,超过 2400
    的鲍率很难达的到,而只能在非常纯净的电话线品质下才能运作.
    ``baud''一词在 Emile Baudot 之後才有,他是非同步电报印表机(asyn□
    chronous telegraph printer)的发明者.

      每秒传输位元(bps)
    每秒位元传输率是每秒钟传输多少位元的度量.普遍每秒位元传输率有 50,
    75, 110, 300, 1200, 2400, 4800, 9600, ... 115200. 在使用 V.42bis
    压缩(压缩最大率 4:1)的数据机下,理论上每秒位元传输率可以高达
    115200. 这是许多人在错用 ``baud'' 这个字时所指的意思.










Linux Serial HOWTO 中译版      23



所以,如果高速数据机以 2400 baud 运作,它们如何能够传送 14400 bps?
数据机对每个 baud 编码来表示某一数量的位元而使得 bps 能大於 baud.
这样一来,当二个或更多位元编码成一个 baud 的时候,bps 就会超越 baud.
如果你的数据机是以 14400 bps 连线的话,它将会以 2400 baud 的速度每个 baud
传送六个位元.

      这个混淆是怎麽样开始的?
嗯,回到今天的低速数据机还是昨天的高速数据机那个时代,每秒位元传输率跟信号改变率实际上是完全相等的.
每个 bit 编码成一个 baud.人们交替使用 bps 以及 baud 是因为它们的数字相同.
例如一台 300 bps 的数据机其信号改变率也是 300.
当高速数据机普及後一切都改变了,而且每秒位元传输率超过了信号改变率.

12.3  什麽是 UARTs? 它们如何影响效能?

UARTs (通用非同步接收转换器,Universal Asyncronous Receiver Transmitter)是你 PC
串列卡上的晶片.
它们的功用是把资料转成位元,将这些位元送上串列线路,然後在另一端重新建立资料.
UARTs 是以位元组为单位处理资料,很方便地也是美国标准交换码(ASCII)的字元大小.

假定是你有一台连接到你 PC
的终端机.当你键入一个字元时,终端机把它交给它的转换器(也是 UART 的一种).
该转换器以指定的速率把这个位元组送到串列线路上,每次一个位元. 在 PC
这一端,接收位元的 UART 拿走所有的位元,然後重新组成位元组并且放到缓冲区里去.

有两种不同的 UARTs 类型.你可能有听过愚蠢的(dumb)UARTs - 8250 还有
16450,以及先进先出式 UARTs - 16550A. 要了解它们的不同,首先让我们来检验当
UART 送出或接收一个位元组时所发生的事.

这 UART 本身并不能对资料做什麽处理,它只是送出以及接收它.
每次送出或接收一个位元组时,CPU 都会从串列设备接到一个中断. 然後 CPU
就把接收到的位元组从 UARTs 的缓冲区搬到记忆体的某处,或是提供另一个位元组给
UART 传送. 8250 以及 16450 UARTs
只有一个位元组的缓冲区.这个意思是,每送出或接收一个位元组就会中断 CPU 一次.
在低速的情况下这样没有问题.但是在高速的传输率下,CPU 会忙於处理 UART
而没有时间照料其它工作. 在某些情况下,CPU
没有足够的馀裕及时处理中断服务,该位元组将因资料如此快速地传入而被覆写.

这就是 16550A UARTs 有用的地方.这些晶片具有 16 个位元组的先进先出伫列.
这个意思是它在必须中断 CPU 之前可以接收或转换达 16 个位元组.
它不仅是能等,而且 CPU 现在也可以同时传送全部 16 个位元组的资料.
虽然中断界限(threshold)很少有设到 16 的,这对於其它只有一个位元组缓冲区的 UARTs
而言仍然是一个重要的优点. CPU
收到较少的中断,因此可以自由地做其它事情.资料不会漏失,每个人都很高兴. (也有
16550 这个 UART,但是它跟 16450 一样因为它有问题.)

一般来说, 8250 以及 16450 UARTs 应该能够胜任高达 38400 bps 的工作速率. 在高於
38400 bps  的速率下,你可能开始见到资料漏失. 其它的 PC
作业系统(这里的定义很宽松),像 DOS 并非是多工的,所以它们有可能可以用 8250 或
16450s 却应付的更好. 这就是为什麽有些人并没有看到资料漏失,直到他们改用 Linux
才发生.

无-UART(Non-
UART)以及智慧型多埠卡使用数位处理机(DSP)晶片来处理额外的缓冲以及控制,如此更能减轻
CPU 的负担. 例如,Cyclades Cyclom 及 Stallion EasyIO 这些卡使用 Cirrus Logic








Linux Serial HOWTO 中译版      24



CD-1400 RISC 晶片,还有许多卡使用 80186 CPU 或更特别的 RISC CPU
来处理串列输出入.

心里要记得,这些愚蠢型的 UART 并非是坏的,只是它们不适合做高速传输.
当你将终端机或滑鼠连接到这些 UARTs 时应该不会遭遇困难.
但是对高速数据机而言,16550A 可以说是必须的.

你可以花多一点点的钱购买有 16550A UARTs
的串列卡,只要询问电脑商该卡所使用的是什麽型号的 UARTs 即可.
或者你想升级你现在的卡,你可以只要简单地购买 16550A 晶片并且置换你现在的 16450
UARTs 晶片. 它们的脚位相容(pin-to-pin compatible).有些卡有 UARTs
插槽来作这个用途使用.
如果不是的话你可以焊接.注意,如果你有钱,买一张新卡将可能会省掉你许多麻烦,它们在
$50 元美金以下.


13.  故障排除

13.1  我不断地收到 ``line NNN of inittab invalid''

要确定你对你的 init 版本使用正确的文法.这里所没有的一些 init 会在 /etc/inittab
档案里使用不同的文法. 要确定你对你的 getty 版本使用正确的文法.

13.2  当我试著拨号时,它说 ``/dev/cuaN: Device or resource busy''

这个问题可能发生在 DCD 或 DTR 没有设定正确的时候. DCD
应该只在真的有连线时(像是有人拨接进来)才被设定,而不是在 getty
持续监看该埠的时候. 检查并确定你的数据机正确地配置成只在真正连线时才设定 DCD.
DTR 应该在任何东西使用或监看线路时设定,像是 getty, kermit, 或其它通讯程式.

另一个引起 ``device busy''
错误的普遍原因是你设定你的串列埠使用一个已经被某种其它东西使用的中断.
在每一个设备初始化的时後,它会要求 Linux 允许它使用它的硬体中断. Linux
持续追踪那个中断被指定给谁,而如果你的中断已经被占用,你的设备将不能适当地初始化.
该设备真的并没有什麽办法告诉你发生的这件事,除了当你尝试去使用它的时候,它会回应
``device-busy'' 错误讯息. 检查你所有的卡(串列,乙太网路,SCSI
界面等等).找寻硬体中断冲突的地方.

13.3  我持续接到 ``Id SN respawning too fast: disabled for 5 minutes''

确定你的数据机有正确的配置.查看暂存器 E 和 Q. 这可能发生在你的数据机跟 getty
沟通的时候.

确定你正确地从 /etc/inittab 呼叫 getty.
使用错误的文法或设备名称将会引起严重的问题.

以下法检查你的 /etc/gettydefs 文法是否正确:

     linux# getty -c /etc/gettydefs

这也可能发生在 uugetty 初使化失败时.参阅 getty 或 uugetty 仍然无法运作 (sec□
tion 13.11, page 26) 一节.










Linux Serial HOWTO 中译版      25



13.4  串列设备很慢或是串列设备只能单向传送

      你的硬体中断可能有冲突.确定没有硬体中断是被分享的.
检查你所有的卡(串列卡, 乙太网路卡, SCSI 等等)确定你串列设备配的跳接设定以及
setserial 参数是正确的. 同时检查 /proc/ioports 及 /proc/interrups
以确定是否有冲突发生.

13.5  我的数据机在某人断线後瘫痪或是 uugetty 并没有重新执行

      这在 DTR 讯号掉下而你的数据机没有重置时会发生.
这个问题在我身上发生的时候我看到我的 RD 跟 SD LEDs
疯狂地闪烁.你需要让你的数据机重置. 大部份的 Hayes 相容数据机使用 &D3
来做这件事,但是在我的 USR Courier 上,我得要设 &D2 以及
S13=1.查阅你的数据机手册.

13.6  我将我的终端机连到我的 PC  上,但是在我输入签入名称之後,它就锁住不动

   □如果你使用 getty: 在你的 /etc/gettydefs 项目里可能没有设 CLOCAL
     给终端机,而且可能你用的并不是完整的 null modem 连接线. 你需要 CLOCAL
     来告诉 Linux 忽略数据机控制信号.它看起来像这里这样:

  # 38400 bps Dumb Terminal entry
  DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400

  # 19200 bps Dumb Terminal entry
  DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200

  # 9600 bps Dumb Terminal entry
  DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600


     接下来,用 kill 砍掉该 getty 行程这样新行程会以新的项目产生.

   □如果你使用 agetty: 加上 -L 旗标到你的 /etc/initab 中的 agetty 那行.
     这会使得它忽略数据机控制信号.然後键入 init q 以重新执行 init.
     这个项目看起来像这样:

  s1:345:respawn:/sbin/agetty -L 9600 ttyS1 vt100

13.7  在高速下,我的数据机漏失资料

如果你尝试在大於 38400 bps 的速率下使用你的数据机,而你并没有 16550A UARTs
的话,你应该要将它们升级. 有关 UARTs 的说明参阅 什麽是 UARTs? (section 12.3,
page 23) 一节.

13.8  在系统启动时,Linux 没有依照我的配置回报串列设备.

这是事实.Linux 在系统启动时并没有做任何的 IRQ 侦测,它只做串列设备侦测.
所以,不要理会它所显示有关硬体中断的部份,因为它只是假定使用标准的硬体中断.
这是因为硬体中断侦测不可靠,而且可能被瞒骗而这样做的.

所以即使我的 ttyS2 设在 IRQ5,我仍然看到

     Jan 23 22:25:28 misfits vmunix: tty02 at 0x03e8 (irq = 4) is a 16550A








Linux Serial HOWTO 中译版      26



在 Linux 启动时,你必须使用 setserial 来告诉 Linux 你所使用的硬体中断. Linux
启动後,你可以查看 /proc/interrupts 档以了解真正被配置的 IRQ 是什麽.

13.9  当我使用我的数据机叫用 Linux 机器时 rz 以及/或是 sz 不动

如果 Linux 在你尝试传送档案时会寻找 /dev/modem 的话,查看 /etc/profile 以及
/etc/csh.cshrc. 某些发行套件会在这些地方定义一些别名,最著名的是 Slackware.
这些别名扰乱了 zmodem 程式.把它们拿掉或是更正它们.

13.10  我的萤幕印出看起来很好玩的字元

这在当你把二进位资料送往萤幕的时候会发生在虚拟控制台上,或者有时候会发生在串列连线上.
修复这个问题的方法是输入 echo ^v^[c.因为控制字元之故,它是:

     linux% echo <ctrl>v<esc>c

13.11  getty 或 uugetty 仍然无法运作

getty_ps 上有个 DEBUG 选项.编辑你的 /etc/conf.{uu}getty.ttySN 配置档并加上
DEBUG=NNN. 其中 NNN 是下列的数字组合之一,根据你想要侦测什麽错误而定:

     D_OPT   001     option settings
     D_DEF   002     defaults file processing
     D_UTMP  004     utmp/wtmp processing
     D_INIT  010     line initialization (INIT)
     D_GTAB  020     gettytab file processing
     D_RUN   040     other runtime diagnostics
     D_RB    100     ringback debugging
     D_LOCK  200     uugetty lockfile processing
     D_SCH   400     schedule processing
     D_ALL   777     everything


设定 DEBUG=010 是个开始的好地方.

如果你正在执行 syslogd 的话,侦错资讯将会出现在你的记录档里. 如果你没有执行
syslogd 那麽 getty 的资讯将会出现在 /tmp/getty:ttySN 里而 uugetty
的资讯则会出现在 /tmp/uugetty:ttySN 里,而且它们也会被放到 /var/adm/getty.log
里去.
查看侦错资讯看看发生了什麽.最可能的是,你将得要调整一些你配置档里的参数,并且重新配置你的数据机.

你应该也去试试 mgetty.有些人在使用它时更为幸运.


14.  其它的资讯来源

   □下列指令的线上手册(man pages): agetty(8), getty(1m), gettydefs(5),
     init(1), login(1), mgetty(8), setserial(8)

   □你的数据机手册

   □NET-3 HOWTO: 所有关於网路的东西,包括了 SLIP, CSLIP, 以及 PPP










Linux Serial HOWTO 中译版      27



   □PPP HOWTO: 有助於使用 PPP

   □Printing HOWTO: 如何设定串列印表机

   □Term HOWTO: 所有你想知道关於 term 程式的事情

   □UPS HOWTO: 设定连上你的串列埠的 UPS

   □UUCP HOWTO: 建立 UUCP 的资讯

   □Usenet 新闻群组:

  comp.os.linux.answers
       关於 Linux 的 FAQs, How-To's, READMEs 等等.
  comp.os.linux.hardware
      Linux 作业系统的硬体相容性.
  comp.os.linux.networking
       Linux 的网路及通讯.
  comp.os.linux.setup
       Linux 的安装及系统管理.



   □Linux 串列电子邮件列表(mailing list).要加入的话,寄电子邮件到 major□
     domo@vger.rutgers.edu,文章内容写 ``subscribe linux-serial''.
     如果你在内容上写 ``help'',你会得到一份辅助说明.
     这个伺服器还提供许多其它的 Linux 列表.送出 ``lists''
     指令可以得到所有电子邮件列表的列表.

   □讨论串列通讯及多埠串列卡的白皮书可自 Cyclades 的 http://www.cyclades.com
     取得.

   □Modem FAQs:

     Navas 28800 Modem FAQ2

     Curt's High Speed Modem Page3

   □串列程式写作: Advanced Programming in the UNIX Environment4 , by W.
     Richard Stevens (ISBN 0-201-56317-7; Addison-Wesley)

     POSIX Programmer's Guide5 , by Donald Lewine (ISBN 0-937175-73-0;
     O'Reilly)



____________________

2. <URL:http://web.aimnet.com/~jnavas/modem/faq.html>

3. <URL:http://www.teleport.com/~curt/modems.html>

4. <URL:http://heg-school.aw.com/cseng/authors/stevens/advanced/advanced.nclk>

5. <URL:http://www.ora.com/catalog/posix/>







Linux Serial HOWTO 中译版      28



15.  铭谢

      独立撰写这份 HOWTO 是不可能的事. 虽然这份 HOWTO
的内容大部份都是我写的,我经常重写这些感谢来维持许多在写作方式以及内容上有贡献的人.
感谢每个曾经贡献经验或建议的人,这些人的列表已经长得无法列出(超过一百人).
特别感谢 Ted T'so 对於有关串列驱动程式问题的回答,还有负责维护 getty_ps 的 Kris
Gleason,以及负责维护 mgetty 的 Gert D□ing.

SERIAL HOWTO 结束





















































Linux Serial HOWTO 中译版      29





































































   CONTENTS



1.  简介 .................................................................... 1
    1.1   版权声明 .......................................................... 1
    1.2   这份文件的最新版本 ................................................ 1
    1.3   回馈 .............................................................. 1
    1.4   免责声明 .......................................................... 2

2.  已经支援的串列硬体 ...................................................... 2
    2.1   标准 PC 串列埠 .................................................... 2
    2.2   即插即用型(PnP)数据机 ............................................. 2
    2.3   一般多埠串列卡(附 8250/16450/16550A UART 晶片) .................... 3
    2.4   智慧型多埠串列卡 .................................................. 3
    2.5   不支援的串列硬体 .................................................. 6

3.  串列埠的名称是什麽? ..................................................... 6
    3.1   在 /dev 里的串列设备及主要和次要号码 .............................. 7
    3.2   一般多埠板的注意事项 .............................................. 8
    3.3   智慧型多埠板的注意事项 ............................................ 8

4.  你应知道的有趣程式 ...................................................... 8
    4.1   什麽是 getty? ..................................................... 8
    4.2   什麽是 setserial? ................................................. 9

5.  我怎麽用数据机拨号出去? ................................................. 9
    5.1   硬体需求 .......................................................... 9
    5.2   与你的数据机交谈 .................................................. 9
    5.3   拨出用的数据机配置 ............................................... 11
    5.4   硬体流量控制 ..................................................... 11

6.  我要怎麽样用数据机以 getty_ps 拨入及拨出? .............................. 12
    6.1   拨入及拨出的数据机配置 ........................................... 12
    6.2   安装 getty_ps .................................................... 12
    6.3   设定 uugetty ..................................................... 13
    6.4   自订 uugetty ..................................................... 14

7.  我怎麽设定终端机连线到我的 PC 上? ...................................... 15
    7.1   硬体需求 ......................................................... 15
    7.2   设定 getty ....................................................... 16
    7.3   将 PC 设定成终端机的注意事项 ..................................... 17

8.  我能使用超过两个的串列装置吗? .......................................... 17
    8.1   选择串列设备的中断位址 ........................................... 18
    8.2   设定串列设备的位址 ............................................... 18

9.  我怎样将我的串列埠设到较高的速度? 我的数据机又应该使用什麽样的速度? .... 19

10. 通讯程式及工具 ......................................................... 20

11. 串列使用秘诀 ........................................................... 20
    11.1  kermit 以及 zmodem ............................................... 20
    11.2


       i









  自动设定终端机型式 ............................................... 21
    11.3  在串列连线下的彩色 ls ............................................ 21
    11.4  从终端机所连接的印表机进行列印 ................................... 21
    11.5  Linux 能不能够自动地配置串列设备? ................................ 21
    11.6  使用串列控制台 ................................................... 21
    11.7  更高的串列流量 ................................................... 22

12. 更进一步... ............................................................ 22
    12.1  什麽是锁定档案(lock files)? ...................................... 22
    12.2  ``baud'' 对 ``bps'' .............................................. 22
    12.3  什麽是 UARTs? 它们如何影响效能? .................................. 23

13. 故障排除 ............................................................... 24
    13.1  我不断地收到 ``line NNN of inittab invalid'' ..................... 24
    13.2  当我试著拨号时,它说 ``/dev/cuaN: Device or resource busy'' ...... 24
    13.3  我持续接到 ``Id SN respawning too fast: disabled for 5 minutes'' . 24
    13.4  串列设备很慢或是串列设备只能单向传送 ............................. 25
    13.5  我的数据机在某人断线後瘫痪或是 uugetty 并没有重新执行 ............ 25
    13.6  我将我的终端机连到我的 PC
  上,但是在我输入签入名称之後,它就锁住不动 ....................... 25
    13.7  在高速下,我的数据机漏失资料 ..................................... 25
    13.8  在系统启动时,Linux 没有依照我的配置回报串列设备. ............... 25
    13.9  当我使用我的数据机叫用 Linux 机器时 rz 以及/或是 sz 不动 ......... 26
    13.10 我的萤幕印出看起来很好玩的字元 ................................... 26
    13.11 getty 或 uugetty 仍然无法运作 .................................... 26

14. 其它的资讯来源 ......................................................... 26

15. 铭谢 ................................................................... 28



























       ii


--
CLDP homepgae: http://www.linux.org.tw/CLDP/
               http://www.phys.ntu.edu.tw/~cwhuang/pub/os/linux/CLDP/
CLDP mailing list: ldp-trans@linux.org.tw

[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:412.872毫秒