❶ 誰有FreeBSD的使用手冊啊
24.4 撥入服務
Contributed by Guy Helmer. Additions by Sean Kelly.
為撥入服務配置FreeBSD系統與連接到終端是非常相似的,除非您正在使用 modem來撥號而不是終端。
24.4.1 外置vs.內置modem
外置modem看起來很容易撥號。 因為,外置 modem 可以通過儲存在非易失性的RAM中的參數來配置,它們通常提供指示器來顯示重要的RS-232信號的狀態。不停閃光的信號燈能給用戶留下比較深刻的印象,而且指示器也可以用來查看modem是否正常地工作。
內置modem通常缺乏非易失性的RAM, 所以對它們的配置可能會限制在通過 DIP 開關來設置。如果您的內置modem有指示燈,您也很難看得到。
24.4.1.1 Modem和線纜
如果您使用一個外置的 modem,那您將需要適當的電纜線。一個標準的串口線應當足夠長以至普通的信號能夠連接上:
表 24-4. 信號名稱
縮寫 全名
RD 收到數據 (Received Data)
TD 傳出數據 (Transmitted Data)
DTR 數據終端就緒 (Data Terminal Ready)
DSR 數據集就緒 (Data Set Ready)
DCD 數據載波檢測 (Data Carrier Detect) (RS-232 的收到線路信號檢測器)
SG 信號地 (Signal Ground)
RTS 要求發送數據 (Request to Send)
CTS 允許對方發送數據 (Clear to Send)
FreeBSD 對速度超過 2400 bps 的情形需要通過 RTS 和 CTS 信號來完成流控制, 通過 CD 信號來檢測呼叫響應和掛機,並通過 DTR 信號來在會話結束時對數據機進行復位。某些電纜在連接時沒有提供全部需要的信號, 這會給您帶來問題, 例如在掛斷時登錄會話不消失,這就有可能是電纜的問題。
與其它類 UNIX? 操作系統類似, FreeBSD 使用硬體信號來檢測呼叫響應, 以及在掛斷時掛斷並復位數據機。 FreeBSD 避免發送命令給數據機, 或監視其狀態。 如果您熟悉通過數據機來連接基於 PC 的 BBS 系統, 這可能看起來有點難用。
24.4.2 串口的考慮
FreeBSD支持基於 NS8250, NS16450, NS16550 和 NS16550A 的EIA RS-232C通訊介面。 8250和16450設備有單字元緩沖。 16550設備提供了一個 16 個字元的緩沖,可以提高更多的系統性能。 因為單字元緩沖設備比 16 個字元的緩沖需要更多的系統資源來工作,所以基於16550A的介面卡可能更好。 如果系統沒有活動的串口, 或有較大的負載, 16 字元緩沖的卡對於低錯誤率的通訊來說更好。
24.4.3 快速預覽
對於終端, init 會在每個配置串口上為每個撥入連接產生一個 getty 進程。 例如, 如果一個 modem 被附帶在 /dev/ttyd0 中,用命令ps ax可以顯示下面這些:
4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0
當用戶撥上modem, 並使用它進行連接時, CD 線就會被 modem 認出。 內核注意到載波信號已經被檢測到, 需要完成 getty 埠的打開。 getty 發送一個登錄:在指定的初始線速度上的命令行。 Getty 會檢查合法的字元是否被接收,在典型的配置中, 如果發現 「垃圾」, getty 就會設法調節線速度,直到它接收到合理的字元。
用戶在鍵入他/她的登錄名稱後, getty執行/usr/bin/login, 這會要求用戶輸入密碼來完成登錄,然後啟動用戶的shell。
24.4.4 配置文件
如果希望允許撥入您的 FreeBSD 系統, 在 /etc 目錄中有三個系統配置文件需要您關注。 其一是 /etc/gettytab,其中包含用於 /usr/libexec/getty 服務的配置信息。 其二是 /etc/ttys, 它的作用是告訴 /sbin/init 哪些 tty 設備上應該運行 getty。 最後,關於埠的初始化命令, 應放到 /etc/rc.d/serial 腳本中。
關於在 UNIX 上配置撥入數據機有兩種主要的流派。一種是將本地計算機到數據機的 RS-232 介面配置為固定速率。 這樣做的好處是,遠程用戶總能立即見到系統的登錄提示符, 而其缺點則是,系統並不知道用戶真實的數據速率是多少, 因而, 類似 Emacs 這樣的程序, 也就無法調整它們繪制屏幕的方式, 以便為慢速連接改善響應時間。
另一種流派將數據機的 RS-232 介面速率配置為隨遠程用戶的連接速率變化。 例如, 對 V.32bis (14.4 Kbps) 連接, 數據機會讓自己的 RS-232 介面以 19.2 Kbps 的速率運行, 而 2400 bps 連接, 則會使數據機的 RS-232 介面以 2400 bps 的速率運行。 由於 getty 並不能識別具體的數據機的連接速率反饋信息, 因此, getty 會以初始速度給出一個 login: 提示, 並檢查用戶的響應字元。如果用戶看到亂碼, 則他們應知道此時應按下 Enter 鍵,直到看到可以辨認的提示符為止。 如果數據速率不匹配, 則 getty 會將用戶輸入的任何信息均視為 「亂碼」, 並嘗試以下一種速率來再次給出 login: 提示符。 這一過程可能需要令人作嘔地重復下去, 不過一般而言,用戶只要敲一兩下鍵盤就能看到正確的提示符了。 顯然, 這種登錄過程看起來不如前面所介紹的 「鎖定速率」 方法那樣簡單明了, 但使用低速連接的用戶,卻可以在運行全屏幕程序時得到更好的交互響應。
這一節將盡可能公平地介紹關於配置的信息,但更著力於介紹數據機速率隨連接速率變化的配置方法。
24.4.4.1 /etc/gettytab
/etc/gettytab是一個用來配置 getty 信息的 termcap 風格的文件。 請看看 gettytab 的聯機手冊了解完整的文件格式和功能列表。
24.4.4.1.1 鎖定速度的配置
如果您把您的modem的數據通訊率鎖定在一個特殊的速度上, 您不需要對 /etc/gettytab 文件作任何變化。
24.4.4.1.2 匹配速度的配置
您將需要在 /etc/gettytab 中設置一個記錄來告訴 getty 您希望在 modem 上使用的速度。 如果您的 modem 的速率是 2400 bit/s, 則可以使用現有的 D2400 的記錄。
#
# Fast dialup terminals, 2400/1200/300 rotary (can start either way)
#
D2400|d2400|Fast-Dial-2400:\
:nx=D1200:tc=2400-baud:
3|D1200|Fast-Dial-1200:\
:nx=D300:tc=1200-baud:
5|D300|Fast-Dial-300:\
:nx=D2400:tc=300-baud:
如果您有一個更高速度的 modem, 必須在 /etc/gettytab 中添加一個記錄。 下面是一個讓您可以以最高 19.2 Kbit/s 的用在 14.4 Kbit/s的modem上的介面記錄:
#
# Additions for a V.32bis Modem
#
um|V300|High Speed Modem at 300,8-bit:\
:nx=V19200:tc=std.300:
un|V1200|High Speed Modem at 1200,8-bit:\
:nx=V300:tc=std.1200:
uo|V2400|High Speed Modem at 2400,8-bit:\
:nx=V1200:tc=std.2400:
up|V9600|High Speed Modem at 9600,8-bit:\
:nx=V2400:tc=std.9600:
uq|V19200|High Speed Modem at 19200,8-bit:\
:nx=V9600:tc=std.19200:
這樣做的結果是 8-數據位, 沒有奇偶校驗的連接。
上面使用19.2 Kbit/s的連接速度的例子,也可以使用 9600 bit/s (for V.32), 2400 bit/s, 1200 bit/s,300 bit/s, 直到 19.2 Kbit/s。 通訊率的調節使用 nx= (「next table」) 來實現。 每條線使用一個 tc= (「table continuation」) 的記錄來加速對於一個特殊傳輸率的標准設置。
如果您有28.8 Kbit/s的modem,或您想使用它的 14.4Kbit/s 模式,就需要使用一個更高的超過 19.2 Kbit/s 的通訊速度的 modem。 這是一個啟動 57.6 Kbit/s 的 gettytab 記錄的例子:
#
# Additions for a V.32bis or V.34 Modem
# Starting at 57.6 Kbps
#
vm|VH300|Very High Speed Modem at 300,8-bit:\
:nx=VH57600:tc=std.300:
vn|VH1200|Very High Speed Modem at 1200,8-bit:\
:nx=VH300:tc=std.1200:
vo|VH2400|Very High Speed Modem at 2400,8-bit:\
:nx=VH1200:tc=std.2400:
vp|VH9600|Very High Speed Modem at 9600,8-bit:\
:nx=VH2400:tc=std.9600:
vq|VH57600|Very High Speed Modem at 57600,8-bit:\
:nx=VH9600:tc=std.57600:
如果您的 CPU 速度較低, 或系統的負荷很重, 而且沒有 16550A 的串口,您可能會在57.6 Kbit/s 上得到 「sio」 「silo」錯誤。
24.4.4.2 /etc/ttys
/etc/ttys文件的配置在 例 24-1中介紹過。 配置 modem 是相似的, 但我們必須指定一個不同的終端類型。鎖定速度和匹配速度配置的通用格式是:
ttyd0 "/usr/libexec/getty xxx" dialup on
上面的第一條是這個記錄的設備特定文件 —— ttyd0 表示 /dev/ttyd0 是這個 getty 將被監視的文件。 第二條 "/usr/libexec/getty xxx" 是將運行在設備上的進程 init。 第三條,dialup,是默認的終端類型。 第四個參數, on, 指出了線路是可操作的 init。也可能會有第五個參數, secure, 但它將只被用作擁有物理安全的終端 (如系統終端)。
默認的終端類型可能依賴於本地參考。 撥號是傳統的默認終端類型,以至用戶可以定製它們的登錄腳本來注意終端什麼時候撥號, 和自動調節它們的終端類型。 然而,作者發現它很容易在它的站點上指定 vt102 作為默認的終端類型,因為用戶剛才在它們的遠程系統上使用的是VT102模擬器。
您對/etc/ttys作修改之後,您可以發送 init 進程給一個 HUP 信號來重讀文件。您可以使用下面的命令來發送信號:
# kill -HUP 1
如果這是您的第一次設置系統, 您可能要在發信號 init 之前等一下,等到您的 modem 正確地配置並連接好。
24.4.4.2.1 鎖定速度的配置
對於一個鎖定速度的配置,您的 ttys 記錄必須有一個為 getty 提供固定速度的記錄。 對於一個速度被鎖定在 19.2kbit/s 的 modem, ttys 記錄是這樣的:
ttyd0 "/usr/libexec/getty std.19200" dialup on
如果您的 modem 被鎖定在一個不同的數據速度, 為 std.speed 使用適當的速度來代替 std.19200。 確信您使用了一個在 /etc/gettytab 中列出的正確的類型。
24.4.4.2.2 匹配速度的設置
在一個匹配速度的設置中,您的 ttys 錄需要參考在 /etc/gettytab 適當的起始 「auto-baud」 記錄。 例如, 如果您為一個以 19.2 Kbit/s 開始的可匹配速度的 modem 添加上面建議的記錄, 您的 ttys 記錄可能是這樣的:
ttyd0 "/usr/libexec/getty V19200" dialup on
24.4.4.3 /etc/rc.d/serial
高速數據機, 如使用 V.32、 V.32bis, 以及 V.34 的那些, 需要使用硬體 (RTS/CTS) 流控制。 您可以在 /etc/rc.d/serial 中增加 stty 命令來在 FreeBSD 內核中, 為數據機設置硬體流控制標志。
例如, 在 1 號串口 (COM2) 撥入和撥出設備上配置 termios 標志 crtscts, 可以通過在 /etc/rc.d/serial 增加下面的設置來實現:
# Serial port initial configuration
stty -f /dev/ttyd1.init crtscts
stty -f /dev/cuad1.init crtscts
24.4.5 Modem 設置
如果您有一個 modem, 它的參數能被存儲在非易失性的 RAM 中,您將必須使用一個終端程序來設置參數 (比如 MS-DOS? 下的 Telix 或者 FreeBSD 下的 tip)。使用同樣的通訊速度來連接 modem 作為初始速度 getty 將使用和配置 modem 的非易失性 RAM 來適應這些要求:
連接時宣告 CD
操作時宣告 DTR; DTR 消失時掛斷線路並復位數據機
CTS 傳輸數據流控制
禁用 XON/XOFF 流控制
RTS 接收數據流控制
寧靜模式 (無返回碼)
無命令回顯
請閱讀您 modem 的文檔找到您需要用什麼命令和 DIP 介面設置。
例如,要在一個 U.S. Robotics? Sportster? 14400 的外置 modem 上設置上面的參數,可以用下面這些命令:
ATZ
AT&C1&D2&H1&I0&R2&W
您也可能想要在 modem 上尋找機會調節這個設置, 例如它是否使用 V.42bis 和 MNP5 壓縮。
外置 modem 也有一些用來設置的 DIP 開關, 也許您可以使用這些設置作為一個例子:
Switch 1: UP —— DTR Normal
Switch 2: N/A (Verbal Result Codes/Numeric Result Codes)
Switch 3: UP —— Suppress Result Codes
Switch 4: DOWN —— No echo, offline commands
Switch 5: UP —— Auto Answer
Switch 6: UP —— Carrier Detect Normal
Switch 7: UP —— Load NVRAM Defaults
Switch 8: N/A (Smart Mode/Dumb Mode)
在撥號 modem 上的結果代碼應該被 禁用/抑制, 以避免當 getty 在 modem 處於命令模式並回顯輸入時錯誤地給出 login: 提示時可能造成的問題。 這樣可能導致 getty 與 modem 之間產生更長的不必要交互。
24.4.5.1 鎖定速度的配置
對於鎖定速度的配置, 您需要配置 modem 來獲得一個不依賴於通訊率的穩定的 modem到計算機 的傳輸率。 在一個 U.S. Robotics Sportster 14400 外置 modem 上, 這些命令將鎖定 modem 到計算機的傳輸率:
ATZ
AT&B1&W
24.4.5.2 匹配速度的配置
對於一個變速的配置, 您需要配置 modem 調節它的串口傳輸率匹配接收的傳輸率。 在一個 U.S. Robotics Sportster 14400 的外置 modem 上, 這些命令將鎖定 modem 的錯誤修正傳輸率適合命令要求的速度,但允許串口速度適應沒有糾錯的連接:
ATZ
AT&B2&W
24.4.5.3 檢查modem的配置
大多數高速的modem提供了用來查看當前操作參數的命令。 在USR Sportster 14400外置modem上, 命令 ATI5 顯示了存儲在非易失性RAM中的設置。要看看正確的 modem 操作參數, 可以使用命令 ATZ 然後是 ATI4。
如果您有一個不同牌子的 modem, 檢查 modem 的使用手冊看看如何雙重檢查您的 modem 的配置參數。
24.4.6 問題解答
這兒是幾個檢查撥號modem的步驟。
24.4.6.1 檢查FreeBSD系統
把您的modem連接到FreeBSD系統, 啟動系統, 然後, 如果您的 modem 有一個指示燈,當登錄時看看 modem 的 DTR 指示燈是否亮: 會在系統控制台出現命令行——如果它亮, 意味著 FreeBSD 已經在適當的通訊埠啟動了一個 getty 進程, 等待 modem 接收一個呼叫。
如果DTR指示燈不亮, 通過控制台登錄到 FreeBSD系統,然後執行一個 ps ax 命令來看 FreeBSD 是否正在正確的埠運行 getty進程。您將在進程顯示中看到像這樣的一行:
114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0
115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1
如果您看到是這樣的:
114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0
modem 不接收呼叫, 這意味著 getty 已經在通訊埠打開了。這可以指出線纜有問題或 modem 錯誤配置, 因為 getty 無法打開通訊埠。
如果您沒有看到任何 getty 進程等待打開想要的 ttydN 埠, 在 /etc/ttys 中雙擊您的記錄看看那兒是否有錯誤。 另外,檢查日誌文件 /var/log/messages 看看是否有一些來自 init 或 getty 的問題日誌。 如果有任何信息, 仔細檢查配置文件 /etc/ttys 和 /etc/gettytab,還有相應的設備文件 /dev/ttydN,是否有錯誤,丟失記錄,或丟失了設備指定文件。
24.4.6.2 嘗試接入Try Dialing In
設法撥入系統。 確信使用8位, 沒有奇偶檢驗, 在遠程系統上的1阻止位。如果您不能立刻得到一個命令行, 試試每隔一秒按一下 Enter。如果您仍沒有看到一個登錄: 設法發送一個 BREAK。如果您正使用一個高速的 modem 來撥號, 請在鎖定撥號 modem 的介面速度後再試試。
如果您不能得到一個登錄:prompt,再檢查一下 /etc/gettytab,重復檢查:
在/etc/ttys 中指定的初始可用的名稱與 /etc/gettytab 的一個可用的相匹配。
每個 nx= 記錄與另一個 gettytab 可用名稱匹配。
每個 tc= 記錄與另一個 gettytab可用名稱相匹配。
如果您撥號但 FreeBSD 系統上的 modem 沒有回應, 確信 modem 能回應電話。 如果 modem 看起來配置正確了, 通過檢查 modem 的指示燈來確認 DTR 線連接正確。
如果您做了好幾次,它仍然無法工作,打斷一會,等會再試試。 如果還不能工作,也許您應該發一封電子郵件給 FreeBSD 一般問題郵件列表 尋求幫助。