![为什么驱动程序的 insmod 会生成 ttyF 设备?](https://linux22.com/image/1631399/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%20insmod%20%E4%BC%9A%E7%94%9F%E6%88%90%20ttyF%20%E8%AE%BE%E5%A4%87%EF%BC%9F.png)
我最近遇到了一个编译驱动程序的情况PCIe 转串行适配器. (更具体地说,该卡上的 AX99100 芯片组)
为了快速测试,我并没有真正安装驱动程序,而只是使用命令insmod
来加载驱动程序。
经过研究dmesg
,我发现它生成了/dev/ttyF0
和/dev/ttyF1
而不是/dev/ttyS0
和,这很奇怪/dev/ttyS1
我想知道这个设备名称是怎么来的?
这是因为insmod
PCIe 还是因为操作系统?
驱动程序工作正常。
答案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 串行端口模拟