许多 486 PC(旧型号)和所有奔腾 (Pentium) 或类似型号的 PC 应该都配备了现代的 16550A (通常简称为 16550) UART,带有 FIFO 缓冲区。如果您使用的是非常老旧的设备(1990 年之前),芯片可能是可插拔的,因此您或许可以通过找到一个可插拔的 16550A 芯片并替换掉您现有的旧 16450 UART 来进行升级。如果该功能已被集成到其他类型的芯片中,那么您就无能为力了。如果 UART 是插槽式的,那么如果您能找到替代品,升级将很容易。新的和旧的芯片是引脚兼容的。更可行的方法可能是在互联网上购买一块新的串口卡(截至 2000 年,很少有零售店备货)或找一块二手的。
现代内核不应允许打开具有相同 IO 地址的端口。但是,即使端口未打开,也可能探测到端口。如果两个端口具有相同的 IO 地址,那么通过向该地址发送命令进行的老式探测将错误地仅指示一个端口。但是,启动时的调制解调器设备检测应该能够发现这两个端口并报告冲突。在过去,对于非法尝试使用相同 IO 地址的设备,会报告/观察到各种错误。请参阅 探测。
在过去,为了获得对特定串口的支持,可能需要修改 C 源代码,或许需要向其中添加一个 #define 宏定义。如今,使用模块或内核的参数,或者使用配置选项应该可以处理所有情况(除了可能存在的古董硬件 ??)。
为了使调制解调器以接近 56k 的速率传输,它需要是特殊的数字调制解调器,并且具有到数字电话线(例如 T1 线)的数字连接。与串口卡一起使用的调制解调器(调制解调器可能在串口卡上或在另一张卡上)通常没有这样的数字连接,因此它们不能以 56k 的速度使用,因此除非不需要以 56k 的速度发送,否则它们是过时的。换句话说,它们对于 ISP 服务器来说已经过时了,但对于小型企业或家庭使用来说可能还可以。
上述情况的一个部分例外是连接到多端口串口卡的调制解调器组,其中调制解调器组可以访问多路复用的数字电话线。因此,可以使用带有少量 56k 数字调制解调器的多端口串口卡以 56k 的速度发送。对于模拟和数字调制解调器,每个串口上都有一个调制解调器,因此需要为每个调制解调器使用一条外部电缆(调制解调器组到多端口)。这可能会导致大量的电缆。因此,使用不带多端口卡的内置调制解调器可以减少杂乱(也更便宜)。这使得即使是这种“例外”对于高容量工作来说也变得过时。这有点类似于台式 PC 的内置调制解调器的成本较低,而外置调制解调器的成本较高(并且需要更多布线)。请参阅 Modem-HOWTO: 调制解调器池,数字调制解调器。
已废弃的设备文件系统 (devfs) 具有带有子目录的 /dev 目录。截至 2001 年末,锁定文件存在问题。例如,锁定文件机制认为 dev/usb/tts/0 和 /dev/tts/0 是相同的设备,名称为 "0"。对于所有其他具有相同“叶”名称的设备也是如此。此外,如果某些应用程序使用设备的旧名称,而其他应用程序使用同一设备的 devfs 名称,则锁定文件将具有不同的名称。但是串口驱动程序应该知道它们是相同的。
内核 2.4 引入了现在已过时的可选“设备文件系统” (devfs),它为所有内容提供了一整套新的名称。有些人使用它,但大多数人可能没有。但在 2003-4 年,有人声称 devfs 存在无法解决的问题,并且从内核 2.6.12 开始,它被 “udev” 取代(2.6.12 之前的内核也可以使用 udev,但存在一些问题)。虽然 udev 没有提供 devfs 的所有功能,但它确实处理热插拔。此外,运行 Linux 不需要使用 udev,因此有些人不使用它。但许多发行版默认安装它。
Devfs 是一个好主意,并且据称比 udev 更高效。但不幸的是,devfs 的作者没有长期维护它,据称它的维护不太好。因此,无论好坏,我们现在都使用了 udev,尽管关于 devfs 与 udev 的争论仍在继续。有关 devfs 的详细描述,请参阅:http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.html 另请参阅内核文档树:filesystems/devfs。
devfs 的设备名称可以在 udev 中使用,但通常不使用,并且可能不容易激活。以下是串口设备的 devfs 名称:ttyS1 变为 tts/1,ttyUSB1 变为 /usb/tts/1,ttyACM1 为 /usb/acm/1。请注意,上面的数字 1 只是一个示例。它可以替换为 0、2、3、4 等。udev 名称的更多示例:ttyS2 变为 tts/2(串口),tty3 变为 vc/3(虚拟控制台),ptyp1 变为 pty/m1(PTY 主设备),ttyp2 变为 pty/s2(PTY 从设备)。“tts” 看起来像一个目录,其中包含设备“文件”:0、1、2 等。所有这些新名称都放在 /dev 目录中,尽管可以选择将它们放在其他地方。
对于 devfs,/dev 目录中的设备名称由相应的驱动程序自动创建。因此,如果串口支持来自模块,并且该模块尚未加载,则 /dev 目录中将没有任何串口设备。这可能会令人困惑:您物理上拥有串口,但在 /dev 目录中看不到它们。但是,如果通信程序请求设备名称(尝试打开它)并且串口模块未加载,则内核应该尝试为其找到驱动程序并在 /dev 目录中为其创建名称。
如果找到驱动程序,这可以正常工作。但是,假设没有为其找到驱动程序。例如,如果您尝试使用 “setserial” 配置驱动程序未能检测到的端口,它会声称没有这样的端口。在这种情况下,如何创建 devfs 端口?
例如,对于多端口设备,/dev/ttyF9 变为 /dev/ttf/9,或者在更高版本中变为 /dev/tts/F9。将 F (或 f) 替换为您的多端口板为此目的使用的任何字母。多端口驱动程序应该创建一个类似于上述的 devfs 名称,并将其放入 /dev 目录中。
Serial-HOWTO 结束