配置你的FreeBSD串行口控制檯(Serial Console)

在FreeBSD 中,允許以下三種控制檯(Console)類型:vidconsole、serial console和nullconsole。vidconsole就是我們通常使用的配有顯示器和鼠標鍵盤的控制檯,serial console是顯示在串行口連接終端設備(serial terminal)上面的控制檯,而nullconsole是指既不是vidconsole也不是serial console,也就是說主機上沒有顯示器、鼠標鍵盤以及串口終端。
要實現通過串口終端來訪問FreeBSD很簡單。從使用層次上可以分爲三個階段,下面將一一敘述:
階段一:將登錄提示符顯示在你的串口終端上
要實現讓用戶從串口控制檯上登錄到FreeBSD,方法很簡單,只需要修改/etc/ttys中的項即可。
FreeBSD使用/dev/目錄下的ttyd*文件來表示串行口(接入用,另有cuad*來表示接出,不再累敘)。並且默認/etc/ttys中有以下幾項:
ttyd0 “/usr/libexec/getty std.9600″ dialup off secure
ttyd1 “/usr/libexec/getty std.9600″ dialup off secure
ttyd2 “/usr/libexec/getty std.9600″ dialup off secure
ttyd3 “/usr/libexec/getty std.9600″ dialup off secure
雖然理論上可以使用任何一個/dev/中有的ttyd*文件來作爲串口控制檯,但是默認情況下FreeBSD使用ttyd0作爲串口控制檯,也就是說你的串口終端設備必須接到ttyd0所表示的COM1口上。
通過dmesg | grep sio可以看到類似如下的信息:
sio0: <16550A-compatible COM port> port 0×3f8-0×3ff irq 4 flags 0×10 on acpi0
sio0: type 16550A, console
sio1: <16550A-compatible COM port> port 0×2f8-0×2ff irq 3 on acpi0
sio1: type 16550A
這就是在不經過配置內核情況下,FreeBSD自動將sio0作爲了串口控制檯的設備,這些設置同時也可以在/boot/device.hints文件中修改。在這裏,作爲實例,我們以系統默認的sio0,即ttyd0作爲串口終端的接入。
我們將/dev/ttys文件中的關於串口控制檯的描述改爲以下內容:
ttyd0 “/usr/libexec/getty std.115200″ vt220 on insecure
ttyd1 “/usr/libexec/getty std.9600″ dialup off insecure
ttyd2 “/usr/libexec/getty std.9600″ dialup off insecure
ttyd3 “/usr/libexec/getty std.9600″ dialup off insecure
std.115200表示的是傳輸的速度,這是我在實驗中試過的最高的傳輸速度。這裏的std.115200作爲參數傳遞給/usr/libexec/getty。關於速度的更詳細列表可參見/etc/gettytab文件。
vt220爲終端的類型,當然也可以選擇vt100、vt102、cons25等其他的類型,但是在筆者的環境下(裝有Gentoo的pc作模擬串口終端),vt220最爲合適。
insecure的選項表示在ttyd0這個串口控制檯下不允許root登錄,這是個好的習慣,比較採用普通用戶登錄再su一下也是很方便的。
爲了讓設置生效,reboot當然是個辦法,但最方便的是
kill -HUP 1
每一次對/etc/ttys的修改,都應該使用kill -HUP 1來使之生效。
這樣,在FreeBSD端的設置就完成了。
爲了連接串口控制檯,我在Gentoo上安裝了minicom,一個非常優秀的串口通信程序。使用以下設置:
% more /etc/minicom/minirc.dfl
# Machine-generated file - use “minicom -s” to change parameters.
pr port /dev/ttyS0
pu baudrate 115200
pu mautobaud Yes
(可用root運行minicom來配置實現)
爲了讓普通用戶使用minicom,正確來說是使用/etc/ttyS0,需要運行gpasswd -a xxx tty來將你的用戶添加到tty這個組中。
這樣如果設置正確的話,運行minicom就可以連接到FreeBSD的串口終端了,如果你不能看到你熟悉的login提示符,請檢查你的FreeBSD中/dev/ttys裏串口速度的設置以及minicom中速度的設置。
階段二:將內核啓動過程輸出到你的串口終端上
在上一部分裏,已經介紹瞭如何通過串口控制檯登錄到FreeBSD,但是 在有些情況下,僅僅登錄到FreeBSD是不夠的。上述的方法是在 FreeBSD啓動完成後通過getty來實現的。如果需要查看登錄過程的屏幕輸出,或者需要登錄到單用戶模式,上述的做法是不夠的。
要讓FreeBSD把啓動信息顯示在串口控制檯上,最簡單的辦法是:
echo “console=comconsole” >> /boot/loader.conf
要指定串口的速度則可以
方法一:
echo “comconsole_speed=115200″ >> /boot/loader.conf
方法二:
echo “machdep.conspeed=115200″ >> /boot/loader.conf (不要把machdep.conspeed的值寫在/etc/sysctl.conf裏,/etc/sysctl.conf裏的值在FreeBSD啓動完 畢之後纔會應用。)
方法三:
重新編譯boot模塊:
在/etc/make.conf中指定
BOOT_COMCONSOLE_SPEED=115200
讓後
cd /sys/src
make clean && make && make install
以及在內核中指定
options CONSPEED=115200
重新編譯、安裝內核。
這樣,通過minicom,你就可以看到FreeBSD的啓動過程了,你也從串口控制檯可以選擇進入單用戶模式。
在此階段描述的串口速度是在FreeBSD啓動到loader 階段設置的。
階段三:將啓動區的信息輸出到你的終端上
經過階段二的設置,通過minicom連接的FreeBSD串口控制檯可以滿足你啓動系統的大部分需要,但是你依然無法通過控制檯在啓動提示符下輸入boot -s這樣的命令。
熟 悉FreeBSD啓動過程的朋友就會知道,上述階段二的設置loader.conf是在/boot/loader(loader階段)被調用的時候被應用 的,但在 /boot/loader被調用之前,FreeBSD還調用了啓動塊(boot blocks)程序來顯示boot的提示符。所以,階段二的設置無法將這些先於/boot/loader執行的內容顯示在串口控制檯上,用戶也無法輸入 boot -s類似的啓動命令。
要讓啓動塊的信息也顯示在串口控制檯上,我們需要在/boot/所在的分區的根目錄建立 boot.config文件。如果你的/boot目錄與/目錄是在同一個分區上的,那麼這個文件就是/boot.config;如果你的/boot目錄是 在一個獨立的分區上的,這個文件就是/boot/boot.config
/boot/boot.config的內容爲:
-P
-P是boot提示符下輸入的參數,表示如果FreeBSD檢測到鍵盤的話就使用vidconsole來實現啓動內容,否則使用serial console。具體的其他需選項可參見handbook或者man boot。
默認情況下,在boot階段的串口控制檯的傳輸速度是9600,在當前的FreeBSD版本里,我還沒有發現可以修改boot階段的串口控制檯速度。而在7.0 Current的文檔中,我找到了以下內容:
A new option -S, which allows setting the boot2 serial console speed in the /boot.config file or on the boot: prompt line, has been added.
所以,要修改boot階段的串口速度,還得等更新的版本的FreeBSD吧(不一定是7.0),我現在的版本是6.1-Prerelease。
關於串口控制檯的速度
值得一提的是,速度的設置。
1、 如果串口控制檯是通過/boot.config來啓動的(階段三),那麼在loader階段,也就是本文說的階段二,串口控制檯的速度默認就是boot階 段的串口速度,除非手動在/boot/loader.conf中設置comconsole_speed或者machdep.conspeed的值。而 /etc/ttys中定義的速度值會被忽略掉。
2、如果串口是通過/boot/loader.conf中定義console= comconsole來啓動的話(階段二),默認的就是9600或者用BOOT_COMCONSOLE_SPEED重新定義的值,如果在 /boot/loader.conf中指定了comconsole_speed或者machdep.conspeed的值,則串口控制檯的速度就是這些變 量指定的值。
3、如果串口控制檯是通過/etc/ttys啓動的(階段三),串口控制檯的速度就是/etc/ttyps中指定的值。
推薦的方案
因此,在boot的-S參數沒有正是應用之前,可以使用以下的方案來配置您的串口控制檯
1、方案一:
/boot.config:
-P
/etc/loader.conf
comconsole_speed=115200
/etc/ttys
ttyd0 “/usr/libexec/getty std.115200″ vt220 on insecure
方案二:
/etc/make.conf
BOOT_COMCONSOLE_SPEED=11520
cd /sys/boot/ && make clean && make && make install
如有必要請在內核中加入options CONSPEED=11520
/etc/loader.conf
console=comconsole
/etc/ttys
ttyd0 “/usr/libexec/getty std.115200″ vt220 on insecure
Tips:
如何查看FreeBSD當前串口控制檯的傳輸速度:
sysctl -a | grep conspeed
如何在運行過程中修改FreeBSD串口控制檯傳輸速度:
sysctl machdep.conspeed=115200
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章