我在不止一台主机上有这个问题,所以特定的硬件不是问题。
在默认配置下,裸机 Ubuntu 12 不会在唯一的串行端口上创建登录进程。串行端口与固件一起正常工作。它与 Grub2 一起正常工作。我什至将串行线连接到 2 个不同的外部客户端盒,所以问题既不是硬件也不是远程客户端。
最终启动时,系统无法创建登录进程。
root@xenpro3:~# ps ax | grep tty
1229 tty4 Ss+ 0:00 /sbin/getty -8 38400 tty4
1233 tty5 Ss+ 0:00 /sbin/getty -8 38400 tty5
1239 tty2 Ss+ 0:00 /sbin/getty -8 38400 tty2
1241 tty3 Ss+ 0:00 /sbin/getty -8 38400 tty3
1245 tty6 Ss+ 0:00 /sbin/getty -8 38400 tty6
1403 tty1 Ss+ 0:00 /sbin/getty -8 38400 tty1
1996 pts/0 S+ 0:00 grep --color=auto tty
root@xenpro3:~# dmesg | grep tty
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.2.0-30-generic root=/dev/mapper/xenpro3-root ro console=ttyS0,115200n8
[ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.2.0-30-generic root=/dev/mapper/xenpro3-root ro console=ttyS0,115200n8
[ 0.000000] console [ttyS0] enabled
[ 2.160986] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 2.203396] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[ 2.263296] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 2.323102] 00:09: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
root@xenpro3:~# uname -a
Linux xenpro3 3.2.0-30-generic #48-Ubuntu SMP Fri Aug 24 16:52:48 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
root@xenpro3:~#
Run Code Online (Sandbox Code Playgroud)
我试过在 /etc/initab 中放置一个 ttyS0.conf 文件,它解决了裸机问题,但在 Xen 上启动 Ubuntu 时我仍然无法让串口工作,作为域 0。我的串行线输出看起来像这样, 启动 Xen 时
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
* Exporting directories for NFS kernel daemon... [ OK ]
* Starting NFS kernel daemon [ OK ]
SSL tunnels disabled, see /etc/default/stunnel4
[ 18.654627] XENBUS: Unable to read cpu state
[ 18.659631] XENBUS: Unable to read cpu state
[ 18.664398] XENBUS: Unable to read cpu state
[ 18.669248] XENBUS: Unable to read cpu state
* Starting Xen daemons
[ OK ]
mountall: Disconnected from Plymouth
Run Code Online (Sandbox Code Playgroud)
此时,串行线不再连接到进程。Xen 本身运行良好。Dmesg 给了我一长串
[ 120.236841] init: ttyS0 main process ended, respawning
[ 120.239717] ttyS0: LSR safety check engaged!
[ 130.240265] init: ttyS0 main process (1631) terminated with status 1
[ 130.240294] init: ttyS0 main process ended, respawning
[ 130.242970] ttyS0: LSR safety check engaged!
Run Code Online (Sandbox Code Playgroud)
这并不奇怪,因为我看到
root@xenpro3:~# ls -l /dev/ttyS?
crw-rw---- 1 root tty 4, 64 Nov 7 14:04 /dev/ttyS0
crw-rw---- 1 root dialout 4, 65 Nov 7 14:04 /dev/ttyS1
crw-rw---- 1 root dialout 4, 66 Nov 7 14:04 /dev/ttyS2
crw-rw---- 1 root dialout 4, 67 Nov 7 14:04 /dev/ttyS3
crw-rw---- 1 root dialout 4, 68 Nov 7 14:04 /dev/ttyS4
crw-rw---- 1 root dialout 4, 69 Nov 7 14:04 /dev/ttyS5
crw-rw---- 1 root dialout 4, 70 Nov 7 14:04 /dev/ttyS6
crw-rw---- 1 root dialout 4, 71 Nov 7 14:04 /dev/ttyS7
crw-rw---- 1 root dialout 4, 72 Nov 7 14:04 /dev/ttyS8
crw-rw---- 1 root dialout 4, 73 Nov 7 14:04 /dev/ttyS9
Run Code Online (Sandbox Code Playgroud)
如果我手动将组更改/dev/ttyS0
为dialout
,它会被更改回来。我没有对默认的 udev 规则进行任何更改,所以我看不出这个问题是从哪里来的。
真挚地,
段错误重新加载
这个问题的答案是/etc/init
为 Xen 所需的/dev/hvc0
串行控制台提供一个“入口” 。
这该怎么做?
以 root 身份或使用 sudo 命令,打开终端并切换到 /etc/init 目录。将 tty1 的文件复制/etc/init/tty1.conf
到/etc/init/hvc0.conf
. 然后hvc0
在您喜欢的文本编辑器中编辑新文件,tty1
用hvc0
. 下次使用 Xen 启动时,您的串行终端现在应该可以正常工作。您应该能够登录dom0
并使用命令行,或者通过点击Ctrl-a
3 次,切换到与管理程序的直接串行通信。
真挚地,
段错误重新加载