为什么驱动程序的 insmod 会生成 ttyF 设备?

为什么驱动程序的 insmod 会生成 ttyF 设备?

我最近遇到了一个编译驱动程序的情况PCIe 转串行适配器. (更具体地说,该卡上的 AX99100 芯片组)

为了快速测试,我并没有真正安装驱动程序,而只是使用命令insmod来加载驱动程序。

经过研究dmesg,我发现它生成了/dev/ttyF0/dev/ttyF1而不是/dev/ttyS0和,这很奇怪/dev/ttyS1

我想知道这个设备名称是怎么来的?

这是因为insmodPCIe 还是因为操作系统?


驱动程序工作正常。

答案1

在 Linux 上,ttyS 不是所有串行端口的通用名称——它是 PC 上 8250 UART 串​​行端口的名称,同样也是其他一些平台上的“内置”串行端口的名称。

因此,每个驱动程序在创建设备时都会决定自己的名称,许多“附加”串行卡(使用各种专有芯片)的驱动程序会故意选择不同的前缀以避免混淆。就您而言,驱动程序的作者选择使用ttyF

(毕竟,PCI 卡实际上并没有模拟 8250 串行端口。操作系统将其视为一个完全新的、不同的设备——这就是为什么它首先需要自定义驱动程序。)

以下是 Linux 内置的一些其他示例(我用‘grep’找到的):

  • ttyACM – 使用 CDC ACM 协议的 USB 串行适配器
  • ttyC – “Cyclades 串行卡”
  • ttyEQ – “Equinox SST 多端口串行板”
  • ttyMX – “Moxa Intellio 串行卡”
  • ttyUSB – 使用其他协议的 USB 串行适配器
  • rfcomm – 蓝牙 RFCOMM 串行端口模拟

相关内容