如有轉載,請注明出處與本文連接,謝謝!
修改XEN的源碼實現額外的功能,需要有一個調試環境來得到XEN的調試信息(有關源碼編譯並安裝 XEN 請閱讀我以前的博文:在CentOS下源碼安裝 Xen並搭建Windows虛擬機),這里有一篇很好的搭建方法:Xen Serial Console,可是光閱讀它還不夠,中間還會遇到許多問題,本博文介紹一下環境搭建的經過,以及遇到的問題的解決辦法,希望對大家有用。
得到 XEN 的 Debug String 需要靠串口(Serial Port)來接收並輸出,除了使用 RS232 線纜連接兩台機器之外(一台運行被調試的 XEN,另一台接收 XEN 的調試信息),還可以使用 Serial Over Lan (SOL) 替代串口線來傳輸數據。前者需要購買 RS232 接口的串口線,對於現在沒有串口的筆記本來說,還需要購買 Express Card 轉串口的轉接卡(或者 USB 轉串口的轉接卡,Xen Serial Console 一文中提到:若要調試XEN啟動,不能使用USB轉串口的轉接卡);而對於現在 Intel AMT 技術已經廣泛普及的新型筆記本來說,后者的方法更實惠簡便。AMT技術可以將串口數據重定向到LAN口,使得LAN口模擬串口實現數據的傳輸。
本人系統環境:
Linux: CentOS 6.3
XEN: Xen 4.1.3
AMT: AMT 6.0
運行 XEN 的被調試機:
1. 配置 AMT
參考:
Intel Management Engine BIOS Extention (MEBx) User Guides
開機時不停地按 Ctrl+P,即可進入 Intel(R) Management Engine BIOS Extension(MEBx)界面:
本人筆記本之前BIOS升級到1.45之后,不管如何按 Ctrl+P 都進入不了MEBx,后來降到 1.41 后就可以了,如果大家也遇到同樣的問題,降低BIOS版本試試。
第一次進入MEBx需要更改密碼,默認的初始密碼是:admin,更改的密碼要求復雜度比較高:8位以上、必須包括大寫字母、小寫字母、數字、特殊符號(如!@#等,但不能有‘:’、','、'"')。更改后的密碼切記保管好……
設置網絡:
依次進入配置界面:
Intel ME General Settings --> Intel (R) ME State Control --> ENABLE
Intel ME General Settings --> Activate Network Access --> Y
Intel ME General Settings --> Network Setup --> TCP/IP Settings --> Wired LAN IPV4 Configuration,使用DHCP,或將其設置為DISABLE后設置指定的IP、掩碼、網關、DNS等
Intel AMT Configuration --> Manageability Feature Selection --> ENABLED
Intel AMT Configuration --> SOL/IDER --> SOL --> ENABLED
Intel AMT Configuration --> Legacy Redirection Mode --> ENABLED
最后退出保存即可。
2. 修改 grub.conf
參考:Xen_Serial_Console、Xen and serial console over IPMI (SOL)
本文只給出傳統 grub 的配置方法,grub2 的配置方法請參考上面的鏈接。
進入 Linux后,在命令行中查看SOL的端口信息:
dmesg | grep ttyS
若有以下輸出,則說明SOL端口已啟用:
Kernel command line: ro root=/dev/mapper/vg_livecd-lv_root xencons=ttyS0 console=ttyS0 console [ttyS0] enabled 0000:00:16.3: ttyS0 at I/O 0x1808 (irq = 17) is a 16550A
注意這里的 SOL 在系統中的代號是“ttyS0”,端口號是 0x1808,分配的中斷號是 17,這信息很重要,不同的機器會不一樣。
在控制台下輸入命令:vi /boot/grub/grub.conf
在 default 前插入:
serial --unit=0 --speed=115200 terminal --timeout=0 console serial
這里的“--unit=0”要按照代號的數字來設置,如果上面查到的是“ttyS1”,這里就設置為“1”;設置“--timeout=0”可以令GRUB引導盡早出現。
添加一項引導項,參考可引導的引導項,並添加串口的配置:
title CentOS (3.1.2-xen-SOL) root(hd0,0) kernel /xen.gz dom0_mem=512M loglvl=all guest_loglvl=all sync_console console_to_ring console=vga,com1 com1=115200,8n1,0x1808,17 module /vmlinuz-3.1.2 ro root=/dev/mapper/vg_livecd-lv_root console=hvc0 console=tty0 earlyprintk=xen module /initramfs-3.1.2.img
以上加粗是添加的部分,這里注意:
kernel行:
“com1”:前面是“ttyS0”就設置為“1”,如果是“ttyS1”就設置為“2”,依此類推。
“com1=115200,8n1,0x1808,17”:115200、8n1就是串口的速率和類型,0x1808、17就是上文查出的ttyS0端口的端口號和中斷號,替換為自己的信息就行。
“sync_console”一定要設置,如果不設置的話,由於XEN使用SOL輸出調試信息時默認是使用異步方式輸出,這樣會導致在開機時接收調試信息到這一行時“Platform timer is 14.318MHz HPET”就暫停接收信息了。
“console=vga,com1”表示XEN的輸出信息從屏幕、COM1口(在這里就是SOL口)輸出。
module行:
“console=hvc0 console=tty0”表示 Linux 的調試信息輸出到 XEN 的命令行、第1個用戶界面(也就是啟動時一堆OK或FAILED的那些信息)。
其它設置項請參考:Xen Hypervisor Command Line Options、Kernel Boot Command-line Parameter Reference
然后保存退出,重啟后使用新添加的引導項引導試試。
3. 測試:使用 minicom 傳數據
安裝 minicom,測試是否可以連接:
yum install minicom
配置:
minicom -s
出現配置菜單,選擇“Serial port setup”,按“A”,輸入“/dev/ttyS0”,按“E”,選擇為 “115200 8N1”,按“F”,使得“Hardware Flow Control”配置為“No”,最后選擇“Save setup as dfl”。
執行 minicom,當 minicom 啟動后,上會出現“Port /dev/ttyS0”,按 Ctrl+A,控制台下方會出現一綠條,最右側若顯示“Online 00:00”,則說明已經連接上SOL,如下圖所示:
接收調試信息的控制台:
1. Linux 平台
(1) 使用 amtterm
首先安裝 amtterm,控制台中輸入:
wget https://www.kraxel.org/releases/amtterm/amtterm-1.3.tar.gz
下載完后解壓縮,並進入該目錄進行編譯安裝:
tar xvf amtterm-1.3.tar.gz cd amtterm-1.3 make make install
安裝完后,執行amterm進行連接:
amtterm -p 'AMT_PASSWORD' XEN_DEBUG_MACHINE_IP
其中“AMT_PASSWORD”是被調試機AMT的密碼,由於包含特殊字符,所以需要前后使用單引號;“XEN_DEBUG_MACHINE_IP”是被調試機的IP
。如果連接成功,將有以下提示:
如果需要記錄調試信息,執行 amtterm 時可加入以下參數:
amtterm -p 'AMT_PASSWORD' XEN_DEBUG_MACHINE_IP | tee debug_string.log
到此,雙機配置已成功,從被調試機開機開始,調試機就可以使用 amtterm 進行連接並接收調試信息。
(2) 使用 ipmitool
(未實驗成功,日后補上)
2. Windows 平台
(1) 使用 ipmiutil
(未實驗成功,日后補上)