第15章  串行通信

  本部分回答与 FreeBSD 进行串行通信的常见问题.PPP 和 SLIP 在网络部分进行阐述. Networking

15.1. 怎样知道 FreeBSD 是否发现我的串口?
15.2. 怎样知道 FreeBSD 是否发现我的调制解调器卡?
15.3. 怎样访问 FreeBSD 上的串口?
15.4. 怎样使系统支持多端口串口卡?
15.5. FreeBSD 能处理多个多端口串口卡共享同一 IRQ 吗?
15.6. 我能为一个端口设置默认的串行参数吗?
15.7. 怎样使能调制解调器拨号登录功能?
15.8. 怎样将一个无相应的终端与我的 FreeBSD box相连接?
15.9. 为什么我不能运行命令 tipcu?
15.10. 我的原装贺氏调制解调器不支持 ── 我该怎么办?
15.11. 我怎样使用 AT 命令?
15.12. 为什么用于确认 pn 功能的 @ 符号不工作?
15.13. 怎样用命令行形式拨出电话号码?
15.14. 每次我这样做时都需要键入波特率吗?
15.15. 怎样容易地通过一个终端服务器接入许多主机?
15.16. 消息能够对每个站点进行多次连接吗?
15.17. 为什么需要点击按键 Ctrl+P 两次以立即发送 Ctrl+P ?
15.18. 问什么键入的内容突然变为大写?
15.19. 怎样使用 tip(消息)进行文件传输?
15.20. 怎样使用 tip消息执行zmodem?

15.1. 怎样知道 FreeBSD 是否发现我的串口?

在 FreeBSD 内核引导过程中, 它会根据配置去探测系统中的串口。 您可以在系统启动时观察, 或在系统完全启动之后运行下面的命令:

% dmesg | grep -E "^sio[0-9]"

下面是上述命令常见的输出结果:

sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
sio0: type 16550A
sio1: <16550A-compatible COM port> port 0x2f8-0x2ff irq 3 on acpi0
sio1: type 16550A

上面显示了两个串口。 第一个在 IRQ 4 上, 正在使用的端口地址 0x3f8, 为 16550A 类型的 UART 芯片。 第二块使用同样类型的芯片但是使用 IRQ 3 端口地址为 0x2f8。 内置调制解调器按串口方式处理 ── 除非始终有一个调制解调器“连接” 在端口上。

GENERIC kernel 支持上例中的两个串口使用相同 IRQ 和端口地址。 如果这样设置在你的系统上显示不正确, 可能是你增加了调制解调器卡, 或者你使用比在 kernel 上配置的更多的端口, 那么你重新配置一下 kernel 就可以了。 可以查看 关于创建 kernel 以获取更多细节.

15.2. 怎样知道 FreeBSD 是否发现我的调制解调器卡?

请查阅前一问题的相关解答.

15.3. 怎样访问 FreeBSD 上的串口?

第三个串口, sio2 (查看 sio(4), 就像在DOS下的 COM3 一样), 在 /dev/cuad2 上有拨出设备, 同时在 /dev/ttyd2 上有拨入 设备. 这两类设备有什么区别吗?

你使用 ttydX 来拨入. 当打开设备 /dev/ttydX 使它处于阻塞模式时, 一个进程将等待 相应的设备 cuadX 改变为非激活态, 然后等待载波检测线路变为激活态. 当你打开设备, cuadX 它将确认串口是否已经被设备 ttydX 使用. 如果端口可用, 它将 “获取” 该端口, 通过设备 ttydX 进行该端口的获取. 同样, 设备 cuadX 并不在意载波检测. 通过这种方式和一个自动应答调制解调器, 你可以实现 远程用户登录,在该远程登录过程的同时还可以用同一个调制解调器拨出号码, 由系统来处理该冲突.

15.4. 怎样使系统支持多端口串口卡?

再次强调, 关于内核配置的部分提供了与之相关的信息。 对于多端口串口卡, 您可能需要为卡上的每个 sio(4) 设备在 device.hints(5) 文件中进行对应的配置。 不过, 只需要在其中的一项上指定 IRQ。 卡上的所有端口会共享同一个 IRQ。 出于一致性的考虑, 请使用最后一个串口来指定 IRQ。 此外, 您应在内核的联编配置中加入下列选项:

options COM_MULTIPORT

下面的 /boot/device.hints 例子用于 AST 4-端口串口卡, 使用 IRQ 12:

hint.sio.4.at="isa"
hint.sio.4.port="0x2a0"
hint.sio.4.flags="0x701"
hint.sio.5.at="isa"
hint.sio.5.port="0x2a8"
hint.sio.5.flags="0x701"
hint.sio.6.at="isa"
hint.sio.6.port="0x2b0"
hint.sio.6.flags="0x701"
hint.sio.7.at="isa"
hint.sio.7.port="0x2b8"
hint.sio.7.flags="0x701"
hint.sio.7.irq="12"

这些标志表示主端口的 minor 编号是 7 (0x700), 而所有的端口共享 IRQ (0x001)。

15.5. FreeBSD 能处理多个多端口串口卡共享同一 IRQ 吗?

尚不可以。 您必须为每一个多端口卡配置不同的 IRQ。

15.6. 我能为一个端口设置默认的串行参数吗?

请参见 FreeBSD 使用手册中的 串口通讯 部分。

15.7. 怎样使能调制解调器拨号登录功能?

请参见 FreeBSD 使用手册中的 拨入服务 部分。

15.8. 怎样将一个无相应的终端与我的 FreeBSD box相连接?

请参见 FreeBSD 使用手册中的 终端 部分。

15.9. 为什么我不能运行命令 tipcu?

在您的系统上, tip(1)cu(1) 这两个程序可能只能通过以 uucp 用户和 dialer 组身份运行时才能访问 /var/spool/lock 目录。 您可以通过 dialer 组来控制谁可以访问您的调制解调器或远程系统。 例如, 您可以只将自己加入到 dialer 组中。

你可以让在你系统上的每一个用户运行 tip(1)cu(1) 通过键入如下命令的方式来执行:

# chmod 4511 /usr/bin/cu
# chmod 4511 /usr/bin/tip

15.10. 我的原装贺氏调制解调器不支持 ── 我该怎么办?

请参阅 FreeBSD 使用手册中的 这个答案

15.11. 我怎样使用 AT 命令?

请参阅 FreeBSD 使用手册中的 这个答案

15.12. 为什么用于确认 pn 功能的 @ 符号不工作?

请参阅 FreeBSD 使用手册中的 这个答案

15.13. 怎样用命令行形式拨出电话号码?

请参阅 FreeBSD 使用手册中的 这个答案

15.14. 每次我这样做时都需要键入波特率吗?

请参阅 FreeBSD 使用手册中的 这个答案

15.15. 怎样容易地通过一个终端服务器接入许多主机?

请参阅 FreeBSD 使用手册中的 这个答案

15.16. 消息能够对每个站点进行多次连接吗?

请参阅 FreeBSD 使用手册中的 这个答案

15.17. 为什么需要点击按键 Ctrl+P 两次以立即发送 Ctrl+P ?

请参阅 FreeBSD 使用手册中的 这个答案

15.18. 问什么键入的内容突然变为大写?

请参阅 FreeBSD 使用手册中的 这个答案

15.19. 怎样使用 tip(消息)进行文件传输?

请参阅 FreeBSD 使用手册中的 这个答案

15.20. 怎样使用 tip消息执行zmodem?

请参阅 FreeBSD 使用手册中的 这个答案

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.