8. 我能使用超过两个的串列装置吗?
你不需要阅读这一节,除非你想要使用三个或更多的串列设备...(假定你没有多埠卡的话).
假如你有另一个多馀的串列埠,是的,你可以.你可以使用的串列埠数目受限於我们必须使用的硬体中断要求以及埠输出入位址的数目.这并不是 Linux
的限制,而是 PC 汇流排的限制.必须指定中断跟位址给每一个串列设备.串列设备可以是串列埠,内接式数据机或是多埠卡.
多埠卡是为了拥有许多个串列埠来分享卡上所有串列埠所使用的相同 IRQ 而特别设计的. Linux
对卡上的每一个埠使用不同的输出入位址以便从它们获取资料.
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/interrupts 以确定没有冲突发生.
8.2. 设定串列设备的位址
接下来,你必须设埠位址.查看你主机板手册的跳接设定.就像中断,每个位址只能有一个串列设备.你的埠通常会配置成像下面这样:
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,所以在那里看一下你用的版本是什麽.如果你的应用程式已经编译以取用此优点,你可以直接使用它们(不必用
setserial),许多的套件都已经有了,因此如果你有最近版本的 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,以及合法的装置名称.你可以下法检查一个串列埠的设定:
setserial -a /dev/ttyS3
10. 通讯程式及工具
这里有一个通讯程式的列表,如果你所使用的发行套件里头并没有的话,这些都可以在一般的 FTP 站找到.
ecu - 一套通讯程式
C-Kermit - 可携的,可程序化的串列及 TCP/IP 通讯程式,包含传档及字完转换功能
minicom - 类似 telix 的通讯程式
procomm - 包含 zmodem,类似 procomm 的通讯程式
seyon - 以 X 为基础环境的通讯程式
xc - xcomm 通讯套件
其它有用的程式是 term 及 SLiRP.它们提供使用 shell 帐号的 TCP/IP 功能.
screen 是另一个多区段作业(multi-session)的程式.这个程式就像的动作就像虚拟控制台.
callback 这支程式会使你的数据机回拨给你.
mgetty+fax 处理传真事务,并且提供一个不同的 getty.
ZyXEL 是 ZyXEL U-1496 数据机的控制程式.它处理接受拨接,拨号,回拨保密,传真,以及语音信箱功能.
SLIP 及 PPP 的软体可在 ftp://sunsite.unc.edu/pub/Linux/system/network/serial 找到.
其它东西可以在 ftp://sunsite.unc.edu/pub/Linux/system/serial 以及
ftp://sunsite.unc.edu/pub/Linux/apps/serialcomm 或许多的映射节点之一找到.这些是保留所有串列程式的目录. |