Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 来自LDD的tiny_串行驱动程序示例_Linux_Device Driver - Fatal编程技术网

Linux 来自LDD的tiny_串行驱动程序示例

Linux 来自LDD的tiny_串行驱动程序示例,linux,device-driver,Linux,Device Driver,我已经编译并安装了来自的tiny_串行驱动程序示例。我使用来自 设备节点/dev/ttytiny0已成功创建,但我无法从设备读取任何内容。看着司机,我似乎应该能读懂一个“t”字 运行stty会得到以下错误: root@brijesh-M11BB:~/ldd3-examples-3.x# setserial /dev/ttytiny0 /dev/ttytiny0, UART: unknown, Port: 0x0000, IRQ: 0 root@brijesh-M11BB:~/ldd3-exam

我已经编译并安装了来自的tiny_串行驱动程序示例。我使用来自

设备节点
/dev/ttytiny0
已成功创建,但我无法从设备读取任何内容。看着司机,我似乎应该能读懂一个“t”字

运行
stty
会得到以下错误:

root@brijesh-M11BB:~/ldd3-examples-3.x# setserial /dev/ttytiny0
/dev/ttytiny0, UART: unknown, Port: 0x0000, IRQ: 0

root@brijesh-M11BB:~/ldd3-examples-3.x# stty -F /dev/ttytiny0
stty: /dev/ttytiny0: Input/output error
类似地,执行cat/dev/tinytty0也会报告类似的错误。我还尝试了
minicom-D/dev/ttytiny0
,但该设备始终显示为脱机

我好像遗漏了什么,有人能指出我遗漏了什么吗


我在Ubuntu 15.10(3.19.x内核)和旧版2.6.28内核上都遇到了这种情况。

我已经调试过它并找到了根本原因


strace显示TinyTy0设备上的-EIO-EIO是从驱动程序tty层(-ENO_tty_设备)生成的。ENO_TTY_设备的原因是端口->类型设置为0(即未知)。在添加uart驱动程序之前设置port->type=port_16550A解决了这个问题。

虽然前面的答案是正确的,但它没有解释在哪里修复代码

注意:我使用的是linux内核3.10

我在uart_端口结构声明中实现了单行修复,下面是如何实现的:

static struct uart_port tiny_port = {
    .ops        = &tiny_ops,
    .type       = PORT_16550A, // THIS IS THE FIX
};
我相信这可能是内核代码中的一个bug,因为通过不设置uart_端口类型,它默认为port_UNKNOWN

虽然我理解这可能是一种保护,但将其保留在未知端口似乎比另一个随机设备更为正确

奖励积分: 修复端口_未知问题后,如果被0除导致内核死机,请注释掉duxing2007代码中的以下行:

baud = uart_get_baud_rate(port, new, old, 0, port->uartclk/16);
quot = uart_get_divisor(port, baud);
积分2: 显示了有类似问题的开发人员(Ira Snyder)是如何实现tiny_exit()函数的,这样您就可以删除内核模块而不会导致挂起。

链接就在您的问题下方,在左侧。我已经用这些信息更新了这个问题。