首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux中哪个驱动程序控制x86串口ttyS0?

在linux中哪个驱动程序控制x86串口ttyS0?
EN

Stack Overflow用户
提问于 2019-01-24 07:59:19
回答 2查看 866关注 0票数 2

通过检查串行文件夹@:\驱动器\tty\串行

有很多不同的串口驱动程序,哪个是x86的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-24 11:33:17

x86没有单一的UART芯片。

IBM最初使用的是八二五零,后来它开始习惯于用16550代替它,后来又用16750取代它。

随着SuperIO芯片的出现,每个制造商都实现了UART,但它们或多或少都与16550/750和8250兼容。

今天,芯片组通常有一个或多个16750 UART集成在PCH中,但它们没有外部套接字,因此许多USB/PCI第三方串行口出现在市场上。

最后,驱动程序依赖于UART芯片。

如果您对集成的UART感兴趣(PC背面有套接字),驱动程序可能在8250文件夹中,除非您的芯片组使用不同的UART芯片。

票数 2
EN

Stack Overflow用户

发布于 2021-02-02 17:39:59

@玛格丽特·布鲁姆有一个很好的答案。8250/16550兼容的UART是普通x86 PCH机的基础,并集成到northbridge/southbridge /PCH芯片组中。如前所述,这并不意味着使用了集成的UART;可以添加第三方串行卡(请参阅下面的Maxim MAX310x串行驱动程序)。

那么,你怎么知道他们在用什么呢?下面是运行debian 10的QEMU会话中的一些命令:

代码语言:javascript
复制
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: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。我正在讨论一个分支,并说它是一个8250/16550接口,如下面的代码片段所示:

代码语言:javascript
复制
static struct uart_driver serial8250_reg = {
    .owner          = THIS_MODULE,
    .driver_name        = "serial",
    .dev_name       = "ttyS",
    .major          = TTY_MAJOR,
    .minor          = 64,
    .cons           = SERIAL8250_CONSOLE,
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54341830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档