Scroll to navigation

SETSERIAL(8) System Manager's Manual SETSERIAL(8)

NAME

setserial - 取得/設置 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 選項,命令將列出所給出的設備參數的一些基本信息。

如果沒有指定參數 -g 命令所指定的第一個設備變元將被當作修改或者是顯示內容的目標設備, 而其它的設備變元參數將被當作命令參數賦於目標設備。

對於大多數情況,需要有系統管理員的權限才能設置串行口。當然有一 些串行口的參數,也可由普通用戶設置,這些參數在本手冊中會有另有 說明。

選項

Setserial 可接受下列參數:

-a
當輸出串行口設備的設置時,顯示出所有有效信息.

-b
當輸出串行口設備的設置時,輸出主要的設備設置信息,此項適合於 在引導過程時,在/etc/rc 腳本中輸出設備信息.

-G
以特定形式輸出串行口的設置信息,此形式可以設置信息以命令行 參數的形式返饋回串行口設備.
-q
靜默.
SetSerial
命令將以更簡潔的形式輸出.
-V
輸出詳細信息. Setserial 可以輸出附加的狀態的信息.
-V
顯示版本信息然後退出.
-W
強制初始化中,斷然後退出.些選項在覈心版本2.1後的Linux中不在提供. -z 在開始設置標記前清除原有的設置的串行標記.此項與 使用-G 標記自動保存串行口的設置標記有關.

命令參數

以下命令參數可以賦於一個串行口.

所有的參數值都被假定爲一個八進制數,除非值前標有"0x".

port 端口號
port 此選項設置I/O地址如上.
irq中斷號
irq 此選項設置硬件的中斷號IRQ如上.
uart異步通訊(UART)類型
此選項用來設置異步通訊(UART)的類型.允許的類型有 none, 8250,16450, 16550,16550A,16550,16650V2,and 16750. 並且8250 類型 和 16450 沒有FIFO's ,起初的16550 有一些錯誤致 使FIFO's不可用,FIFO 只可用來16550A類型的異步通訊機。設置異步 通訊(UART)類型爲 8250,16450,或16550 將啓用不使用 FIFO的串 行口.使用異步通訊類型爲 none 將禁用端口.

一些內貓標註着"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 的功能更安全一些,寧可明確地定IRQ中斷號. irq 參數指定中斷號.
^auto_irq
在自動配置的過程中.並 試圖分配中斷號IRQ.
skip_test
在自動配置的過程中,忽略UART檢測.一些內貓沒有國際半導體公司 兼容的UART設備類型,只有一些便宜的仿製品.有一些甚至不完全支持 loopback檢測模式,此模式是核心在試圖配置之前用來確定在特定的 地址上是不真有UART設備.因此對於某些內貓你可能需要指定這個參數 以便Linux能正確的初始化UART.
^skip_tet
在自動配置過程中, 忽略UART的檢測.
baud_base波特基率
此選項設端口的波特率,此值爲時鐘頻率除以16. 一般情況此項值爲 115200, 這也是UART能支持的最快波特率.
spd_hi
當程序要求 38.4kb時,使用57.6kb的連接速度. 這個參數可以用由無特權的用戶指定.
spd_vhi
當要求38.4kb時,使用115kb的連接速度. spd_cust 當要求38.4kb時,使用指定的divisor(除數)來計算速度.這時波特率由 baud_base(波特基率) 除以 divisor(除數) 得到
spd_normal
當要求38.4kb 時使用38.4kb的速度. 此參數可以由無特權的用戶指定.
divisordivisor(除數)
此選項指定了自定義的除數.這個除數將被用在 spd_cust 選項中被指定時,當要求38.4kb的速度時,用來自行設置串行口連接 速度此參數可由無特權的普通用戶設定.
sak
設置break鍵爲引發安全注意鍵.
^sak
禁用引發安全注意鍵.
fourport
配置端口爲一AST Fouroart 卡.
^fourport
禁用 AST Fourport 配置.
closedelaydelay(延時)
指定時間長度,單位是百分之一秒,DTR在聯出設備被關閉後,仍會保 持一個低速串行通路,在有數據進來之前會重新起動DTR.這選項的默 認值爲50,即半秒延時.
close_delaydelay(延時)
指定時間長度,單位是百分之一秒,在接受端被禁之前關閉端口時, 核心需要等待從串行口傳來的數據. 如果指定爲"none",將不會有 延時.如果指定"infinite" 時,核心將會以不確定的時間等待緩衝 數據的傳輸.此選項的默認值爲是 "none" .
closing_wait2delay(延時)
指定時間的長度,單位是百分之一秒,在接受端被禁用後,在關閉端 口時核心會等待從串行口傳來的數據.而用 closing_wait 命令,"none" 和 "infinite" 兩參數都將被指定,此項的默認值是 3000,也就是30 秒延時。   closing_wait 和 closing_wait2的默認值對大多數的設備都會適用。 如果選擇的延時太長,當串行口斷開後,它會掛起太長時間, 致使數據掛起而被消除。如果設太短,將會有可能致使一些傳輸的 數據溢出。

如果設備非常慢,像一個繪圖儀,那麼,兩項值可能要增大一些。

如果設備使用 XON/XOFF 信號交換,那麼默認值將會反過來。然而這 可能會致使在linux 與回波貓之間有一個"回波衝突"。

session_lockout
對不同的任務,鎖定聯出設備的端口(/dev/cuaXX),也就是說,一但 有一個進程打開端口,就不允許其它不同號的任務打開此端口,直到 前一個進程放開此端口。
^session_lockout
對聯出的端口不開啓上述功能。
pgrp_lockout
對不同進程組,鎖定聯出的端口(/dev/cuaXX)。 也就是說,一但一個進程打開一個端口,不允其它進程組的進程共 享此端口,直到前一個進程釋放它。

此參數的一個應用就是在當一個登陸端被一個撥號的串行口鎖定。它將 允許登陸端重置調制解調器(使用指定設備的程序可能會修改它的設置) 在鎖定被打開之前。

^hup_notify
當進程鎖定在打一個撥號時,而此時聯郵設備正掛起的話,不通知進程。
split_termios
對於聯出設備的終端設置與聯入設備的終端設置分開對待。
^split)termios
對以上兩者相同對待.此值爲默認選項。
callout_nohup
如果這個特殊串行口被當成一個聯出設備打開,那麼當載波檢測消失 時,不掛起通訊端口。
^callout_nohup
當串行口當作聯出設備打開時,不忽略掛起通訊端口。當然,如果掛起 的話HUPCL終端標識將會被啓用。
^low_latency
以更高的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 Async 板,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_trigger
這是一個接收的FIFO的觸發水平(以字節爲單位),較大的值可減少中斷時間提 高性能;然而值太大會引起數據丟失。有效值在1 到 1023 之間.
tx_trigger
這是一個傳送的FIFO的觸發水平(安節爲單位),較在的值可減少中斷時間提高性 能,但值太大會引起傳輸效率下降。有效值在1 到 1023之間.
flow_off
這是通知ESP端口斷開遠端的傳輸(如,告訴它停止發送數據).有效值在1 到 1023之間,這個值要比接收的觸發等級和聯接的水平值高.
flow_on
這是ESP端口通知聯接的等級(單位字節),(如,通知重新開始發送數據)在 掛斷之後,有效值在1 到 1023之間.這個值應在斷開(flow off)等級值 之下但要比接收的觸發等級高.
rx_timeout
這是ESP端口在接收完最後一個字符,且在中斷信號之前將要等待的時間。 有效值是0到255.值太大會增加延時,太小會引起不必要的中斷。

警告

警告:設置一個串行端口時使用一個不正確的I/O地址可能會造成死機.

文件

/etc/rc.local /etc/rc.serial

另見 ,

tty(4), ttys(4), kernel/chr_drv/serial.c

作者

最初seterial的版本是由Rick Sladkey(jrs@world.std.com)所作,而後由 Michael K. Johnson(johsonm@stolaf.edu).

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
1998年9月 Setserial 2.15