分类: LINUX
2012-04-17 15:52:10
功能说明:设置或显示串口的相关信息。
语 法:serial [-abgGqvVz][设备][串口参数]
补充说明:可用来设置串口或显示目前的设置。
参 数:
-a 显示详细信息。
-b 显示摘要信息。
-g 显示串口的相关信息。
-G 以指令列表的格式来显示信息。
-q 执行时显示较少的信息。
-v 执行时显示较多的信息。
-V 显示版本信息。
-z 设置前,先将所有的标记归零。
注意这不是一个内部,是独立发型的,需要下载源码然后编译。
linux下串口设定
NAMEsetserial - 取得/设置 Linux 串行口的信息
总览setserial [ -abqvVWZ] 设备 [ 命令参数一 [ 设备变元参数 ] ] ... setserial -g [-abGv ] 设备一 ...
描述setserial 是一个用来设置和取得与一个串行口有关的信息与设置的程序。这些信息包括某个串行口正在使用的I/o地址与中断号,以及break键是否被当做引起安全注意的键,等等。
在通常的引导的过程中,只有端口 COM1至COM4被初始化,并使用默认的 I/O地址和中断号,正如以下所列。为了初始化其它的串行口,或者是把 COM1至COM4中的设置改为一个非标准的设置。就必须使用 setserial 程序。一般这个程序会在 rc.serial 脚本中使用,此脚本通常会在 /etc/rc.local.
中被执行
设备
由变元参数定义的需要设置的串行设备。它们通常具有以下形式: /dev/cua[0-3].
如果没有设定命令参数, setserial
将打印出此端口的类型(如,8250,16450 ,14330,16550A,等等),
硬件I/O地址,各硬件中也断号,波特数,和一些可操作或更改的标识。
如果选择 -g 选项,命令将列出所给出的设备参数的一些基本信息。
如果没有指定参数 命令所指定的第一个设备变元将被当作修改或者是显示内容的目标设备,而其它的设备变元参数将被当作命令参数赋于目标设备。
对于大多数情况,需要有系统管理员的权限才能设置串行口。当然有一些串行口的参数,也可由普通用户设置,这些参数在本手册中会有另有说明。
选项Setserial 可接受下列参数:
-a 当输出串行口设备的设置时,显示出所有有效信息. -b 当输出串行口设备的设置时,输出主要的设备设置信息,此项适合于在引导过程时,在/etc/rc 脚本中输出设备信息. -G 以特定形式输出串行口的设置信息,此形式可以设置信息以命令行参数的形式返馈回串行口设备. -q 静默. SetSerial 命令将以更简洁的形式输出. -V 输出详细信息. Setserial 可以输出附加的状态的信息. -V 显示版本信息然后退出. -W 强制初始化中,断然后退出.些选项在核心版本2.1后的Linux中不在提供. -z 在开始设置标记前清除原有的设置的串行标记.此项与使用-G 标记自动保存串行口的设置标记有关. 命令参数 以下命令参数可以赋于一个串行口.所有的参数值都被假定为一个八进制数,除非值前标有"0x".
一些内猫标注着"16650A UART带有1K缓冲",这是骗人的.它们没有真正兼容 16550A的UART;相反的它们只有 一个16450兼容的带1K接收缓冲 UART,以防止接 收时溢出.这是非常重要的,因为它们没有一个没有一个可传导的FIFO.因此,他们与16650A UART 并不兼容,自动配置过程将正确的识别它们为16450 类型。如果你想强行使用,需要 uart 参数,这样你在传输文件时会发现有字符遗失.这些 UART 通常还有其它一些问题. skip test 参数也经常被使用. autoconfig 当使用这个参数时, Setserial 将向核心请求自动设置串行口.I/O地址一要正确设置;核心将会试图检测UART类型,如果 auto_irq 参数选用,Linux将试图自动分配中断号IRQ. autoconfig 参数应在 port,auto_irq,and skip_test 等参数使用后也被指定.
auto_irq 在自动配置的过程中,会自动分配中断号IRQ. 此功能不能保证一定有一个正确的结果;一些硬件的配置可能会迷惑Linux的核心.一般来说不使用参数 auto_irq
指定时间的长度,单位是百分之一秒,在接受端被禁用后,在关闭端口时核心会等待从串行口传来的数据.而用 closing_wait
命令,"none" 和 "infinite" 两参数都将被指定,此项的默认值是 3000,也就是30 秒延时。 closing_wait 和
closing_wait2的默认值对大多数的设备都会适用。如果选择的延时太长,当串行口断开后,它会挂起太长时间,致使数据挂起而被消除。如果设太
短,将会有可能致使一些传输的数据溢出。
如果设备非常慢,像一个绘图仪,那么,两项值可能要增大一些。
如果设备使用 XON/XOFF 信号交换,那么默认值将会反过来。然而这可能会致使在linux 与回波猫之间有一个"回波冲突"。
session_lockout
对不同的任务,锁定联出设备的端口(/dev/cuaXX),也就是说,一但有一个进程打开端口,就不允许其它不同号的任务打开此端口,直到前一个进程放开此端口。
对以上两者相同对待.此值为默认选项。
callout_nohup
如果这个特殊串行口被当成一个联出设备打开,那么当载波检测消失时,不挂起通讯端口。
^callout_nohup
当串行口当作联出设备打开时,不忽略挂起通讯端口。当然,如果挂起的话HUPCL终端标识将会被启用。
^low_latey
以更高的CPU占用率来使得接受滞延达到最小。(通常传输中的5-10ms的滞延以使系统开销最小.) 此项默认值为关闭,但某些实时程序可能会用到此参数。
CONISIDERATIONS OF CONFIGURING SERIAL PORTS
明白setserial 命令只是告诉linux核心它想找到某个特定的端口的 I/O地址各中断号IRQ是很重要的。它并不操作硬件,串行设备实际使用的一个特定的I/O地址。为了达到更改实际的硬件参数,你需要手动设置硬件,通常是设置跳线,或更改DIP开关。
以下一节将针对设置你的串行端口给于一些帮助。
以下是"标准MS-dos"的端口设置:
/dev/ttys0(COM1), port 0x3f8, irq 4
/dev/ttys1(COM2), port 0x2f8, irq 3
/dev/ttys2(COM3), port 0x3e8, irq 4
/dev/ttys3(COM4), port 0x2e8, irq 3
根据AT/ISA总线结构的限定,通常中断号IRQ不能被两个以上的串行口共享。如果你试图这这样做,那么当你同时启用两个端口时,它们中的一个或全部将
会不可靠。这和限制可由一多端口的串行口板来克服,它用来让多个串行口共享一个中断号IRQ。此种板对linux的支持已加入到AST
FourPort, Accent A 板,Usenet Serial II 板,Bocabord BB-1004, BB-1008,和 BB-2016 板,以及HUB-6 serial 板之中。
修改一个设备的中断号IRQ是比较困难的,因为大多数中断号已经被使用了,以下是"标准MS-DOS"设定的有效的中断号列表:
IRQ 3: COM2
IRQ 4: COM1
IRQ 5: LPT2
IRQ 7: LPT1
许多人都发现中断号IRQ 5 是一个好的选择,假设电脑中只有一个并行口是正在使用的。那么中断号IRQ 2 也是一个好的选择(也可能是9);
虽然这个中断号IRQ有时也被网卡使用,也有极个别的的显卡可能要使用中断号IRQ
2作为一个垂直回扫的中断。如果你的显卡是这样设置的;那你可能要禁用此项功能,以便能给其它的设备释放一个中断。当然这对于linux或是其它操作系统
不一定是必须的。
另外其它可用的中断号有 3 ,4,和 7,这些中断可能也被另一些串行或是并行口所用。(如果你的串行卡有一个16位的电子数据收集器的接线口,并且支持更高的中断号,那么中断号IRQ 10 ,11, 12,和 15 也是可用的。)
在一些AT类的机器上,中断号IRQ 2 被当作中断号IRQ 9,所以linux 会如此认为。
其它中断号除了2(9),3, 4, 5, 7, 10, 11, 12 和15 不 能被使用,因为他们被安排给了其它的硬件,而且一般上不能更改。以下是一些“标准”的设置:
IRQ 0 时钟发生器 0
IRQ 1 键盘
IRQ 2 可编程的中断控制器 2
IRQ 3 串行口 2
IRQ 4 串行口 1
IRQ 5 并行口 2(保留给PS/2)
IRQ 6 软盘驱动器
IRQ 7 并行口 1
IRQ 8 系统实时名钟
IRQ 9 重定向给中断号IRQ 2
IRQ 10 保留
IRQ 11 保留
IRQ 12 保留(ps/2兼容的设备)
IRQ 13 数学协处理器
IRQ 14 硬盘控制器
IRQ 15 保留
MULTIPORT CONFIGURATION
一些多端口的串行板可以让多的端中共享一个中断号,使用一个或是多个端口以显示是否有端口需要服务。如果你的多端口吕行板支持这些端口,你须保证如果中断丢失时,能避免潜在的死锁。
为了详细设置这些端口,使用 set_multiport 为参数,紧接其后的是多端口的参数。这个多端中的参数须指定为以下形式 port
这需要检测一下,参数 mask 可以显示在已注册的位中那个是重要的,最后参数 math
用来指定在已注册的位中,当没有进一步工作要做时,那一位必须匹配。
当有四个这种 /port/mask/match时,就要指定联合。第一个这种联合应该使用如下参数 port1, mask1, 和
match1. 第二个这种联合需要用如下参数指定 port2, mask2, 和 match2, 等等。为了禁用这个多端口检测,设置 port1
为零。
如果想查看当前多端口的设置,指定命令行参数 get_multiport
以下是一些通常的串行板的设置:
AST FourPort port1 0x1BF match1 0xf mask1 0xf
Boca BB-1004/8 port1 0x107 match1 0xff match1 0
Boca BB-2016 port1 0x107 match1 0xff match1 0
port2 0x147 match2 0xff match2 0
Hayes ESP 的设置
Setserial 也可以用来在贺氏的ESP串行板上设置端口。
以下参数在设置时使用:
rx_igger
这是一个接收的FIFO的触发水平(以字节为单位),较大的值可减少中断时间提高性能;然而值太大会引起数据丢失。有效值在1 到 1023 之间.
tx_trigger
这是一个传送的FIFO的触发水平(安节为单位),较在的值可减少中断时间提高性能,但值太大会引起传输效率下降。有效值在1 到 1023之间.
flow_off
这是通知ESP端口断开远端的传输(如,告诉它停止发送数据).有效值在1 到 1023之间,这个值要比接收的触发等级和联接的水平值高.
flow_on
这是ESP端口通知联接的等级(单位字节),(如,通知重新开始发送数据)在挂断之后,有效值在1 到 1023之间.这个值应在断开(flow off)等级值之下但要比接收的触发等级高.
rx_out
这是ESP端口在接收完最后一个字符,且在中断信号之前将要等待的时间。有效值是0到255.值太大会增加延时,太小会引起不必要的中断。
警告
警告:设置一个串行端口时使用一个不正确的I/O地址可能会造成死机.
文件
/etc/rc.local /etc/rc.serial
另见,
tty(4), ttys(4), kernel/chr_drv/serial.c