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