您应该确保您的调制解调器已正确设置,并且您知道它连接到哪个串行端口。
记住...
DOS com1: = Linux /dev/cua0 (和 /dev/ttyS0)
DOS com2: = Linux /dev/cua1 (和 /dev/ttyS1) 等等
同样值得记住的是,如果您有 4 个串行端口,标准的 PC 设置是 com1 和 com3 共享 IRQ4,而 com2 和 com4 共享 IRQ3。
如果您的标准串行端口上有设备与您的调制解调器共享 IRQ,您将会遇到问题。 您需要确保您的调制解调器串行端口具有自己唯一的 IRQ。 许多现代串行卡(和更高质量的主板串行端口)允许您移动串行端口的 IRQ。
如果您运行的是 Linux 内核 2,您可以使用以下命令检查正在使用的 IRQcat /proc/interrupts,这将产生如下输出
0: 6766283 timer 1: 91545 keyboard 2: 0 cascade 4: 156944 + serial 7: 101764 WD8013 10: 134365 + BusLogic BT-958 13: 1 math error 15: 3671702 + serial |
这显示了 IRQ4 上的一个串行端口(鼠标)和 IRQ15 上的一个串行端口(到 Internet 的永久调制解调器 PPP 链接)。 (com2 上也有一个串行端口,IRQ3,com4 在 IRQ14 上,但由于它们未使用,因此不显示)。
请注意 - 如果您要摆弄您的 IRQ,您需要知道您在做什么! 您不仅必须打开计算机,拔出卡并摆弄跳线,而且您需要知道哪个 IRQ 上有什么。 在我的情况下,这是一台完全基于 SCSI 的 PC,因此我可以禁用通常使用 IRQ14 和 15 的“主板上”的 IDE 接口!
您还应该记住,如果您的 PC 启动其他操作系统,移动 IRQ 可能会导致操作系统无法正常启动 - 甚至根本无法启动!
如果您确实将您的串行端口移动到非标准的 IRQ,那么您需要告诉 Linux 每个端口正在使用哪个 IRQ。 这是通过使用“setserial” ,最好在启动过程中在rc.local或rc.serial中完成,它从rc.local或作为 SysV 初始化的一部分调用。 对于上面图示的机器,使用的命令是...
/bin/setserial -b /dev/ttyS2 IRQ 11 /bin/setserial -b /dev/ttyS3 IRQ 15 |
但是,如果您正在使用动态加载的串行模块,当需要时,通过kerneld进程,您不能在启动时一次性设置并忘记 IRQ(等等)。 这是因为如果卸载了串行模块,Linux 会忘记特殊设置。
因此,如果您按需加载串行模块,您将需要在每次加载模块时重新配置 IRQ(等等)。
如果您正在使用高速(外部)调制解调器(14,400 波特或更高),您的串行端口需要能够处理这种调制解调器能够产生的吞吐量,尤其是在调制解调器压缩数据时。
这要求您的串行端口使用现代 UART(通用异步接收器/发送器),例如 16550(A)。 如果您正在使用旧机器(或旧串行卡),您的串行端口很可能只有 8250 UART,当与高速调制解调器一起使用时,这将给您带来相当大的问题。
使用命令...
setserial -a /dev/ttySx |
以使 Linux 向您报告您拥有的 UART 类型。 如果您没有 16550A 型 UART,请投资购买新的串行卡(价格低于 50 美元)。 当您购买新卡时,请确保您可以在其上移动 IRQ!
注意:16550 UART 芯片的第一个版本存在错误。 这很快被发现,并发布了芯片的修订版 - 16550A UART。 然而,相对少量的有缺陷的芯片确实进入了流通。 您不太可能遇到其中之一,但您应该寻找表明 16550A 的响应,尤其是在一些老旧的串行卡上。