设置一个 Linux 机器在其串行端口上侦听传入连接的最佳方法是什么?我已经做了很多谷歌搜索,但我找不到正确的命令组合来真正让他们说话!
我的主要目标是为运行的 kvm/qemu VM 实例提供串行接口。他们目前只有一个 VNC 接口(他们在无头服务器上,没有 X)。我可以通过使用 -serial file: 标志启动 VM 来创建串行设备,但如何与它对话则是另一个问题。两个盒子都运行 Ubuntu 8.04。
设置一个 Linux 机器在其串行端口上侦听传入连接的最佳方法是什么?我已经做了很多谷歌搜索,但我找不到正确的命令组合来真正让他们说话!
我的主要目标是为运行的 kvm/qemu VM 实例提供串行接口。他们目前只有一个 VNC 接口(他们在无头服务器上,没有 X)。我可以通过使用 -serial file: 标志启动 VM 来创建串行设备,但如何与它对话则是另一个问题。两个盒子都运行 Ubuntu 8.04。
Linux Serial HOWTO有很多关于串行通信的详细信息。如果您希望能够像在控制台上一样使用串行端口登录到您的虚拟化系统,那么您真正需要的是更具体的Linux 远程串行控制台 HOWTO 。正如 Hein 所指出的,您需要一根零调制解调器电缆,并且需要在远程终端上运行 minicom。
Linux 控制台有两种使用方式,每种方式都必须单独配置以供串行使用。您可以将内核配置为通过串行端口复制其消息,这对于观察系统启动有时很有趣,如果您正在进行内核调试,这几乎是必不可少的。(这需要内核支持并更新引导参数,以便内核知道您需要串行输出;请参阅第二个方法的第 5 章。)您可能对通过串行端口登录更感兴趣,这需要在串行端口上运行 getty启动后(就像您的系统在启动后已经在虚拟终端上运行 getty 一样),这在howto的第 6 章中有详细描述。
我假设您使用“空调制解调器”电缆连接两个串行端口。
使用像 minicom 这样的程序与远程系统通信——您可能需要设置通信参数并可能关闭硬件流控制(如果您的电缆没有连接流控制线)。
假设您在 /dev/tty1 上执行此操作。
在壳里
chown *youruser* /dev/tty1
然后在一个名为 example.pl 的 Perl 脚本中
open PORT, "</dev/tty1" || die "Can't open port: $!";
while (defined ($_ = <PORT>))
{
do_something($_);
}
close PORT;
显然,如果您希望它自动启动并在错误时重生等等,还有更多工作要做。但基本思想是像文件一样从串口读取。