gpt4 book ai didi

c - 用于嵌入式系统中 RS232 设备的 Linux 设备驱动程序

转载 作者:太空狗 更新时间:2023-10-29 11:13:23 25 4
gpt4 key购买 nike

我最近开始学习为我正在进行的特定项目编写 Linux 设备驱动程序。以前我所做的大部分工作都是针对不运行操作系统的设备,因此 Linux 驱动程序和开发对我来说有些陌生。对于我正在从事的项目,我有一个运行基于 Linux 的操作系统的嵌入式系统。我有一个通过 RS232 控制的外部设备,我需要为其编写驱动程序。

问题:

1) 有没有办法从内核空间访问串行端口(可能使用 serial.h、serial_core.h 等),这通常是如何完成的,有什么好的例子吗?

2) 根据我的发现,通过打开 dev/ttyS* 并向其写入数据似乎更容易访问用户空间中的串行端口。在为这样的设备(RS232 设备)编写驱动程序时,最好是在用户空间中编写还是有办法编写内核模块?如何决定将驱动程序编写为用户空间的内核模块,反之亦然?

驱动程序是否仅适用于通用设备,例如 UART/串行设备,然后是用户空间,还是应该将该驱动程序编写为内核模块?感谢您的帮助,我找不到太多信息来回答我的问题。

最佳答案

有几次,通过串口通信的模块可能在内核中。 pppd(点对点协议(protocol)守护进程)就是一个例子,因为 Linux 有一些内核代码专门用于它,因为它是串行的高流量使用,它还需要转身并将 IP 数据包放入内核空间。

大多数其他用途在用户空间中会更好地工作,因为您有一个很好的 API,它已经处理了很多可能发生的错误。这也减少了您的错误导致大规模系统故障的可能性。

从用户空间做这样的事情确实会导致一些延迟。读取和写入被缓冲,并且通常很难判断硬件在写入操作中的实际位置,并且从用户空间取消已经成功的写入调用并不是真正可行的,即使硬件尚未接收到字节也是如此。

我建议首先尝试从用户空间执行此操作,然后在必要时移至操作系统驱动程序。即使有必要将其移动到操作系统级别的驱动程序中,您也可能能够从用户空间取得一些进展。

关于c - 用于嵌入式系统中 RS232 设备的 Linux 设备驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com