哪个驱动程序控制 linux 中的 x86 串口 ttyS0
which driver controlling x86 serial port ttyS0 in linux
通过检查串行文件夹@:
\drivers\tty\serial
那里有很多不同的串口驱动程序,哪一个是针对x86的?
没有用于 x86 的单个 UART 芯片。
IBM PC 最初使用 8250, later it began customary to replace it with the 16550,后来使用 16750。
随着 SuperIO chips 的出现,每个制造商都实现了 UART,但都或多或少地与 16550/750 和 8250 兼容。
今天的芯片组通常在 PCH 中集成一个或多个 16750 UART,但它们没有外部插座,因此市场上有很多 USB/PCI 第三方序列号。
最终还是要看UART芯片的驱动。
如果您对集成的 UART(在您的 PC 背面有插座)感兴趣,驱动程序可能在 8250 folder 中,除非您的芯片组使用不同的 UART 芯片。
@Margaret Bloom 有一个很好的答案。兼容 8250/16550 的 UART 是普通 x86 PC 的基础,并集成到 northbridge/southbridge ICH/PCH 芯片组中。正如所指出的,这并不意味着使用了集成的 UART;有第三方串口卡可以加(Maxim MAX310x串口驱动见下文)
那么,您怎么知道正在使用什么?这是 QEMU 会话中的一些命令 运行 debian 10:
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 的 major/minor 号。
第二个查找有关驱动程序的信息:
它是一个 uart:16550A('A' 模型有一个字符 fifo),它在 IO 端口 0x3F8 上并使用 IRQ 4、tx 和 rx 字符计数以及最后可用的控制选项。
第三个显示每个设备的匹配驱动程序。 4:64 使用 serial
driver_name。一些开发人员不擅长唯一定义 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,
};
通过检查串行文件夹@: \drivers\tty\serial
那里有很多不同的串口驱动程序,哪一个是针对x86的?
没有用于 x86 的单个 UART 芯片。
IBM PC 最初使用 8250, later it began customary to replace it with the 16550,后来使用 16750。
随着 SuperIO chips 的出现,每个制造商都实现了 UART,但都或多或少地与 16550/750 和 8250 兼容。
今天的芯片组通常在 PCH 中集成一个或多个 16750 UART,但它们没有外部插座,因此市场上有很多 USB/PCI 第三方序列号。
最终还是要看UART芯片的驱动。
如果您对集成的 UART(在您的 PC 背面有插座)感兴趣,驱动程序可能在 8250 folder 中,除非您的芯片组使用不同的 UART 芯片。
@Margaret Bloom 有一个很好的答案。兼容 8250/16550 的 UART 是普通 x86 PC 的基础,并集成到 northbridge/southbridge ICH/PCH 芯片组中。正如所指出的,这并不意味着使用了集成的 UART;有第三方串口卡可以加(Maxim MAX310x串口驱动见下文)
那么,您怎么知道正在使用什么?这是 QEMU 会话中的一些命令 运行 debian 10:
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 的 major/minor 号。
第二个查找有关驱动程序的信息: 它是一个 uart:16550A('A' 模型有一个字符 fifo),它在 IO 端口 0x3F8 上并使用 IRQ 4、tx 和 rx 字符计数以及最后可用的控制选项。
第三个显示每个设备的匹配驱动程序。 4:64 使用 serial
driver_name。一些开发人员不擅长唯一定义 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,
};