c-哪个驱动程序控制linux中的x86串口ttyS0



通过检查串行文件夹@:\驱动程序\ty\串行

有许多不同的串行端口驱动程序,哪一个适用于x86?

x86没有单一的UART芯片。
IBM PC最初使用8250,后来,人们开始习惯于用16550和16750取代它。
随着SuperIO芯片的出现,每个制造商都实现了UART,但都或多或少地与16550/750和8250兼容。
今天的芯片组通常在PCH中集成了一个或多个16750 UART,因此市场上出现了大量的USB/PCI第三方串行
最终,驱动程序取决于UART芯片。


如果您对集成UART(带有电脑背面的插座)感兴趣,除非您的芯片组使用不同的UART芯片,否则驱动程序可能在8250文件夹中。

@Margaret Bloom有一个很好的答案。8250/16550兼容UART是普通x86 PC的基础,并集成到北桥/南桥ICH/PCH芯片组中。正如所指出的,这并不意味着使用集成UART;可以添加第三方串行卡(Maxim MAX310x串行驱动程序见下文)

那么,你怎么能知道正在使用什么呢?以下是运行debian10:的QEMU会话中的一些命令

q35ek:511> ls -l /dev/ttyS0
crw------- 1 dave tty 4, 64 Feb  2 12:09 /dev/ttyS0
q35ek:512> sudo cat /proc/tty/driver/serial | egrep '^0:'
0: uart:16550A port:000003F8 irq:4 tx:11291 rx:18 RTS|CTS|DTR|DSR|CD
q35ek:513> sudo cat /proc/tty/drivers
/dev/tty             /dev/tty        5       0 system:/dev/tty
/dev/console         /dev/console    5       1 system:console
/dev/ptmx            /dev/ptmx       5       2 system
/dev/vc/0            /dev/vc/0       4       0 system:vtmaster
ttyprintk            /dev/ttyprintk   5       3 console
max310x              /dev/ttyMAX   204 209-224 serial
serial               /dev/ttyS       4 64-111 serial
pty_slave            /dev/pts      136 0-1048575 pty:slave
pty_master           /dev/ptm      128 0-1048575 pty:master
unknown              /dev/tty        4 1-63 console
q35ek:514> 

第一个命令查找您感兴趣的tty的主要/次要编号。

第二个查找有关驾驶员的信息:它是一个uart:1650A("a"型号有一个字符fifo),位于IO端口0x3F8上,使用IRQ 4、tx和rx字符计数,最后是可用的控制选项。

第三个显示了每个设备的匹配驱动程序。4:64使用serial驱动程序名称。一些开发人员不擅长唯一定义driver_name,因此它可能是8250/16550兼容设备(在$K/drivers/tty/serial/8250下)、DECstation DZ芯片或GRLIB uart。我说这是一个8250/16550接口,如下代码片段所示:

static struct uart_driver serial8250_reg = {
.owner          = THIS_MODULE,
.driver_name        = "serial",
.dev_name       = "ttyS",
.major          = TTY_MAJOR,
.minor          = 64,
.cons           = SERIAL8250_CONSOLE,
};

相关内容

  • 没有找到相关文章

最新更新