目的: 臺(tái)機(jī)已經(jīng)裝好Linux,顯示器有問題,平時(shí)一般都SSH控制,當(dāng)Linux網(wǎng)絡(luò)掛的時(shí)候,想通過串口來管理。 硬件:臺(tái)機(jī)自帶兩個(gè)串口(上面的是COM1)[under Windows] or ttyS0[under Linux)),筆記本T61p沒有串口,買了個(gè)USB轉(zhuǎn)串口(具體見下圖)。同時(shí)需要串口交叉線一根(NULL modem Cable),母對(duì)母(公的是針),都是凹口那種。 目標(biāo)機(jī)器:安裝的CentOS 5.2 Linux 內(nèi)核2.6.18-92.1.22.el5和2.6.18-92.1.22.el5xen 客戶端: Windows XP SP3 IBM OEM. 安裝USB轉(zhuǎn)串口驅(qū)動(dòng)。 需要把輸出定向到串口,一般有下面幾處:
BIOS中的設(shè)置 BIOS設(shè)置的作用我沒嘗試過,如果是可以連BIOS設(shè)置都可以定向到串口,那個(gè)強(qiáng)大了。也不知道如何去掉機(jī)器需要連鍵盤的限制。沒拿出顯示器所以沒看我臺(tái)機(jī)的BIOS,不過這個(gè)功能一般只有服務(wù)器級(jí)別的機(jī)器有?!咀?/font>1】臺(tái)機(jī)一般沒有串口重定向功能。 GRUB設(shè)置 這里的配置是為了把grub菜單定向到串口,這樣你就可以在串口操作grub,選擇啟動(dòng)項(xiàng),使用single mode等等。 同時(shí)也要給kernel參數(shù)加上console選項(xiàng)。 [root@CentOS5 ~]# cat /boot/grub/menu.lst # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/vg00/lv_root # initrd /initrd-version.img #boot=/dev/hdb1 serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console default=2 timeout=20 #splashimage=(hd0,0)/grub/splash.xpm.gz =>這些在console下會(huì)工作不正常,注釋掉。 #hiddenmenu title CentOS (2.6.18-92.1.22.el5) root (hd0,0) kernel /vmlinuz-2.6.18-92.1.22.el5 ro root=/dev/vg00/lv_root rhgb quiet initrd /initrd-2.6.18-92.1.22.el5.img title CentOS Serial[ttyS0] - Console (2.6.18-92.1.22.el5) root (hd0,0) kernel /vmlinuz-2.6.18-92.1.22.el5 ro root=/dev/vg00/lv_root console=ttyS0,9600 console=tty0 initrd /initrd-2.6.18-92.1.22.el5.img title CentOS Console - serial[ttyS0] (2.6.18-92.1.22.el5) [get more output in serial console] root (hd0,0) kernel /vmlinuz-2.6.18-92.1.22.el5 ro root=/dev/vg00/lv_root console=tty0 console=ttyS0,9600 initrd /initrd-2.6.18-92.1.22.el5.img title CentOS Xen (2.6.18-92.1.22.el5xen) root (hd0,0) kernel /xen.gz-2.6.18-92.1.22.el5 module /vmlinuz-2.6.18-92.1.22.el5xen ro root=/dev/vg00/lv_root rhgb quiet xencons=off module /initrd-2.6.18-92.1.22.el5xen.img title CentOS Xen Serial[ttyS0] - Console (2.6.18-92.1.22.el5xen) root (hd0,0) kernel /xen.gz-2.6.18-92.1.22.el5 module /vmlinuz-2.6.18-92.1.22.el5xen ro root=/dev/vg00/lv_root xencons=off console=ttyS0,9600 console=tty0 module /initrd-2.6.18-92.1.22.el5xen.img title CentOS Xen Console - serial[ttyS0] (2.6.18-92.1.22.el5xen) root (hd0,0) kernel /xen.gz-2.6.18-92.1.22.el5 module /vmlinuz-2.6.18-92.1.22.el5xen ro root=/dev/vg00/lv_root xencons=off console=tty0 console=ttyS0,9600 module /initrd-2.6.18-92.1.22.el5xen.img title Other rootnoverify (hd0,0) chainloader +1 后面的console有順序關(guān)系,詳見下文【注2】,我常用串口所以console=tty0 console=ttyS0,9600這個(gè)順序的輸出信息比較多。 因?yàn)槲业臋C(jī)器有xen的內(nèi)核,xen默認(rèn)情況下會(huì)把串口做為xencons,所以這里設(shè)置xencons=off. When multiple consoles are listed output is sent to all consoles and input is taken from the last listed console. The last console is the one Linux uses as the /dev/console device. /etc/inittab 設(shè)置 系統(tǒng)系統(tǒng)后,需要在串口上監(jiān)聽請(qǐng)求,所以要有個(gè)類似服務(wù)器的程序(agetty, mgetty etc)。 /etc/inittab中添加 s0:2345:respawn:/sbin/agetty -L -f /etc/issue.serial 9600 ttyS0 vt100 #s1:2345:respawn:/sbin/agetty -L -f /etc/issue.serial 9600 ttyS1 vt100 #S0:2345:respawn:/sbin/mgetty -r -x 9 ttyS0 ==> mgetty 用來調(diào)試比較好,log也豐富。 What is a getty? A getty is is a program that opens a tty port, prompts for a login name, and runs the /bin/login command. It is normally invoked by init. 所以其他程序就不能再來占用ttyS0了,串口是獨(dú)占模式的吧。 vt100: vt100 is the terminal emulation. You can use others, but VT100 is the most common or "standard". Another widely used termial type is VT102. OK都可以了,可以重啟server了。這里如果想測(cè)試下串口線,推薦先在Linux啟動(dòng)下mgetty,因?yàn)樗?/font>debug信息和log比較豐富,適合排錯(cuò)和測(cè)試。 #mgetty –r –x 9 ttyS0 Log在/var/log/mgetty*中。 /etc/securetty設(shè)置 因?yàn)橐话阄覀兌际鞘褂?/font>root登陸串口來維護(hù),所以需要設(shè)置root可以在COM1和COM2登陸。 在/etc/securetty中添加: ttyS0 ttyS1 Windows客戶端連接可以用超級(jí)終端或者Putty。 注意啟動(dòng)server的時(shí)候,putty就應(yīng)該去連接串口了,這樣才可以看到所有信息。 Press any key to continue. Grub menu Booting. 本來正常情況下,接下去kernel的boot信息應(yīng)該也會(huì)打到串口的。但是沒有,確定是Xen內(nèi)核的關(guān)系?!咀?/font>3】好像有人已經(jīng)碰到這個(gè)問題了。 系統(tǒng)啟動(dòng)起來后,過了init,agetty就起來了,這個(gè)時(shí)候就可以通過串口登陸了。(在/etc/securetty中需要添加ttyS0) 后記: 在做這次實(shí)驗(yàn)的時(shí)候開始心里很沒底,因?yàn)榇趶膩頉]搞過。雖然編程時(shí)涉及過串口編程,但到我這邊已經(jīng)只是網(wǎng)絡(luò)編程了。買了一個(gè)USB轉(zhuǎn)串口接口,兩個(gè)串口交叉線。我想要NULL modem線,店主不知道(額…), 開始不工作時(shí)一度懷疑線有問題。 還有就是開始不理解串口工作原理,我知道串口是字符設(shè)備,有啥數(shù)據(jù)得當(dāng)時(shí)就去讀。曾經(jīng)我連了串口并開了Putty去連,界面上沒輸出。1)因?yàn)楫?dāng)時(shí)就是沒數(shù)據(jù)。 2)是有時(shí)候終端需要按鍵來激活(比如按幾下回車)。 還有就是可能終端設(shè)置問題。這塊我現(xiàn)在還不太清楚。因?yàn)榻K端設(shè)置涉及到有些鍵盤操作,比如刪除。我好幾次發(fā)現(xiàn)?Backspace鍵沒反應(yīng)而重啟過好幾次機(jī)器。后來發(fā)現(xiàn)我的終端設(shè)置需要先<= = 左箭頭左移然后 delete。 我的主板說明書上接口圖: 【注1】: http://www./docs/ldp/howto/Remote-Serial-Console-HOWTO/rhl-biosserial.html C.2. Configure the BIOS to use the serial portMany servers allow the BIOS to be configured from the serial port, especially on systems designed for rack mounting. At the moment few machines designed to be used as desktop systems allow the BIOS to be accessed from the serial port. 【注2】: http:///HOWTO/Remote-Serial-Console-HOWTO/configure-kernel.html Chapter 5. Configure Linux kernelThe Linux kernel is configured to select the console by passing it the console parameter. The console parameter can be given repeatedly, but the parameter can only be given once for each console technology. So console=tty0 console=lp0 console=ttyS0 is acceptable but console=ttyS0 console=ttyS1 will not work. When multiple consoles are listed output is sent to all consoles and input is taken from the last listed console. The last console is the one Linux uses as the /dev/console device. 【注3】: |
|