linux -- 串口調試總結

在某些情況下,需要同時對兩臺或多臺Linux主機進行管理和操作。如果手頭缺少足夠多的鍵盤和顯示器,那麼通過一臺機器的串口對其餘主機進行控制不失爲一種快捷、有效的方法。

下面就以兩臺主機爲例,簡單介紹一下配置方法。假設這兩臺主機分別爲A和B,它們都運行Red Hat 9.0。

A主機配置

A主機要選擇一個合適的串口通信工具,本文中使用Linux自帶的Minicom。

以root身份登錄,運行如下命令:

  

  # minicom -s

  

屏幕上出現Minicom的主配置選單,移動鍵盤的方向鍵,選擇“Serial Port Setup”選單項,會出現如下配置項:

  

  A - Serial Device : /dev/ttyS0

  B - Lockfile Location : /var/lock

  C - Callin Program :

  D - Callout Program :

  E - Bps/Par/Bits : 9600 8N1

  F - Hardware Flow Control : No

  G - Software Flow Control : No

  Change which setting?

  

按照需要配置如下參數:

◆ 串口設備 /dev/ttyS0;

◆ 波特率 9600;

◆ 幀格式 8N1(表示有8位數據、0位校驗和1位停止位);

◆ 軟、硬件流控 No。

注意,串口設備號可以根據所連接的端口進行更改,比如,連接到COM2口就設置爲/dev/ttyS1。波特率的設定要與B主機一致。

配置完成後回到主配置選單,選擇“Modem and Dialing”選單項,清除掉“A - Init string”、“B - Reset string”和“K - Hang-up string”選項的值。然後重新返回主選單,選擇“Save As Dfl”選單項,保存爲缺省設置。選擇“Exit from Minicom”退出後,用如下命令重新啓動Minicom:

  

  # minicom

  

B主機配置

B主機需要修改以下幾個文件。

1.修改/etc/inittab文件

該文件是init程序的配置文件,用於設置缺省狀態和終端連接。在該文件中增加如下一行,用來初始化串口終端:

  

  tty:2345:respawn:/sbin/agetty ttyS0 9600 vt100

  

“tty”爲該行ID;“2345”指該行的運行級別是2、3、4、5級;“respawn”使命令退出後再執行一次,以便其它用戶能夠登錄;“/sbin/agetty ttyS0 9600 vt100”表示具體的命令,該命令通過/sbin/agetty程序打開串口/dev/ttyS0(COM1),波特率設置爲9600bps,終端模式爲vt100。

重啓主機B後,在A主機中會顯示B主機的登錄界面。但是,此時還有兩個問題:一個是無法在A主機以root身份登錄B;另一個是A中無法顯示B主機啓動和關閉過程的相關提示信息。後者是因爲Linux啓動時的信息都是由內核顯示的,默認輸出到系統主控制檯(tty1)。要解決這兩個問題,還需要修改/etc/securetty文件和/etc/lilo.conf文件。

2.修改/etc/securetty文件

該文件是一個被允許以root身份登錄的tty設備列表,這些設備由/bin/login程序讀取。爲了使用戶能以root身份通過串口登錄,需要在該文件中添加“ttyS0”,告訴系統COM1是安全的。

3.修改/etc/lilo.conf文件

本文假設系統使用LILO啓動。爲了使LILO和內核的啓動信息能夠輸出到串口,必須修改/etc/lilo.conf文件,在“linear”一行後添加“serial=0,9600n8”,把“append="root=LABEL=/"”改爲“append="root=LABEL=/ console=ttyS0,9600"”。

serial選項使LILO的啓動信息輸出到串口,以便選擇不同的系統或內核進行啓動。其中,“0”表示串口使用COM1;“9600”表示波特率爲9600bps;“n”表示無校驗位;“8”表示有8位數據位。

“append="root=LABEL=/ console=ttyS0,9600"”的作用是向內核傳遞參數,使系統啓動信息輸出到串口COM1,波特率設爲9600bps。修改完成後,重新運行一下LILO命令使配置生效。

至此,把鍵盤和顯示器等外設連接在主機A上,主機A再通過串口連接主機B,就可以對B進行管理和控制了。所需的硬件就是一條串口線,當然還要求兩臺主機都具備串口。

利用串口終端作爲Linux控制檯,可以免去額外的鍵盤,顯示卡和顯示器,同時可將Linux主機作爲一個任意用途的嵌入式黑匣。 將串口終端連接到計算機的串口上並不困難,可以參考Linux的HOWTO文檔和以及inittab和agetty的幫助信息。這裏扼要地說一下。 
  首先,準備好一根null modem 電纜. 
  其次,在文件/etc/inittab 增加下面一行。[注:如果你不採用 agetty程序,採用其他的程序如like getty_ps ,應用正確的命令語法] 
   ID:RUNLEVELS:respawn:/sbin/agetty -L SPEED TTY TERM 
  這裏: ID =兩字母的標識符,如s1或s2。 
  RUNLEVELS = 終端激活的運行級別 
  SPEED = 串口端口速率 
  TTY = 串口的設備名 
  TERM = TERM環境變量 
  範例如下: 
  s2:12345:respawn:/sbin/agetty -L 9600 ttyS1 vt100 
  表示串口 /dev/ttyS1 (COM2 )速率爲 9600 bps,終端模式爲vt100。 
  最後,重新啓動機器。 
  如正確地按照上述三步進行,則就可以在終端屏幕上出現Login: 的提示符。你可以登錄進系統,並能象在實際的控制檯上或從遠程Telnet登錄一樣進行工作。 
  下面簡單介紹一下如何終端設置成控制檯,主要涉及內核信息、啓動腳本信息和LILO信息。 中國網管聯盟 

一、內核信息

  系統在啓動時顯示的信息總是輸出到主控制檯(tty1)。打開機器後,你只有等待Login: 出現在終端屏幕上,這意味着所有啓動信息都無法獲悉。你只有登錄後用dmesg命令查看,但通常是想在login shell起來前看到這些信息。 
  還有其他信息出現在控制檯上:/etc/rc.d目錄下腳本命令執行時,啓動和終止機器時運行的腳本命令等輸出的信息。如果信息沒有出現在屏幕上,怎樣真正地知道"系統已終止"呢? 
  你必須修改源碼/usr/src/linux/drivers/char/console.c[必須已安裝了內核源碼],這不是一個複雜得內核修改,按照下面三步進行: 
  首先,在程序前定義CONFIG_SERIAL_ECHO 
  #define CONFIG_SERIAL_ECHO 
  其次,修改串口地址 (僅當你使用得端口不同於默認定義的纔有必要修改)。 
  #define SERIAL_ECHO_PORT 0x3f8 /* COM1 */ 
  或者: 
  #define SERIAL_ECHO_PORT 0x2f8 /* COM2 */ 
   第三,重新編譯內核[請參考相應的手冊],啓動機器。在系統檢測硬件設備時,你應該在終端屏幕上看到信息。 
   請注意 :console.c 補丁除了Alpha平臺外,對所有的Linux 端口都是必要的。在Alpha平臺上它是在運行make config ,選擇下面的選項完成的:

www_bitscn_com


   Echo console messages on /dev/ttyS1 

二、/etc/rc.d/rc.*啓動腳本信息

  爲了將這些信息顯示在終端上,可以將這些文件中含有echo命令的行追加" > TTY "。 TTY 是終端的串口(與/etc/inittab 中串口終端行的一樣)。 

三、 LILO 配置

  如果想選擇兩個內核之一啓動,你必須修改LILO 配置文件,/etc/lilo.conf。配置LILO,使提示信息出現在終端上,可以參考/usr/doc/lilo/README 文件 (查看SERIAL選項)。 這裏給出兩步正確設置的步驟: 
  首先,編輯/etc/lilo.conf file ,在BOOT選項行後,插入一個SERIAL選項 。 
serial=SERIAL_LINE,SPEED PARITY BITS 
  這裏: 
  SERIAL_LINE = 0 (串口1) 
          1 (串口2) 
         2 (串口3) 
         3 (串口4) 
  SPEED = 串口速度 
  PARITY = n (=無) 
       o (= 奇校驗) 
       e (= 偶校驗) 
  BITS = 數據位(8 or 7) 
  請注意:在SPEED, PARITY 和BITS參數間沒有空格。這些參數必須與在terminal 設置時的參數一樣。下面是LILO 配置的示例: 
  serial=1,9600n8 
  這一行表示COM2 ,速率9600bps,無校驗位,數據位8。 www.bitsCN.com 
  第二,運行lilo 命令,刷新系統配置。 
  利用SERIAL 選項, LILO 在啓動默認內核前,設置了2秒的延遲 。在這期間,你可以 在終端上按"SHIFT"鍵發送一個終止信號,終止boot進程,並取得LILO提示信息。 
  完成上述配置後,你的終端就可以作爲一個控制檯了。有一件事不能做的是用CTRL-ALT-DEL 重啓動系統。

grub 串口
2007-03-23 20:03

t1:2345:respawn:/sbin/agetty -L ttyS0 115200 vt220

default=0
timeout=2
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=5 serial console
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-8) monitor
         root (hd0,0)
         kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ console=ttyS0 console=tty0
         initrd /initrd-2.4.20-8.img
title Red Hat Linux (2.4.20-8) serial console
         root (hd0,0)
         kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ console=tty0 console=ttyS0
         initrd /initrd-2.4.20-8.img
title Red Hat Linux (2.4.20-8)
         root (hd0,0)
         kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
         initrd /initrd-2.4.20-8.img

如何在紅帽企業Linux下設置串口終端?

2007-9-25 17:59:00查看學習心得

在某些情況下,出於調試的目的需要給linux配置串口控制檯,或者linux根本沒有顯卡,也需要配置串口終端。一個串口控制檯將發送所有的終端顯示到串口,而串口終端則可以實現通過串口登錄到系統。你可以同時設置兩個或者其中一個。

爲了控制內核輸出所有控制檯消息到串口,你需要在時向內核傳遞參數console=ttyS0,這可以通過GRUB來實現,下面的例子會將控制檯消息發送到tty0(顯示器控制檯)和ttyS0(串口1),發送到串口控制檯的速度爲115200,但是需要注意的是一種類型設備只能定義一個控制檯,例如不能把消息同時發送到串口1和串口2,編輯/boot/grub/grub.conf,添加如下內容:


console=ttyS0,115200 console=tty0

例如:


# cat /boot/grub/grub.conf# 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/hda2# initrd /initrd-version.img#boot=/dev/hdadefault=0timeout=10splashimage=(hd0,0)/grub/splash.xpm.gztitle Red Hat Enterprise Linux AS (2.4.21-27.0.2.ELsmp) root (hd0,0) kernel /vmlinuz-2.4.21-27.0.2.ELsmp ro root=LABEL=/ console=ttyS0,115200 console=tty0 initrd /initrd-2.4.21-27.0.2.ELsmp.img

串口終端 爲了設置一個串口終端,需要爲串口衍生(spawn)一個agetty,在/etc/inittab添加如下內容: co:2345:respawn:/sbin/agetty ttyS0 115200 vt100 init q 例如:

# Run gettys in standard runlevels1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6co:2345:respawn:/sbin/agetty ttyS0 115200 vt100 init q

也可以在/etc/securetty文件中添加串口設置,這樣纔可以以root身份從串口登錄,在該文件最後添加一行,內容爲


ttyS0


(如果不添加此行,則登錄時會不能輸入密碼。)

發佈了0 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章