Linux设备驱动程序,用于embedded式系统中的RS232设备

我最近开始学习为我正在开发的特定项目编写Linux设备驱动程序。 以前我所做的大部分工作都是在没有操作系统的设备上进行的,所以Linux的驱动程序和开发对我而言是一个新的东西。 对于我正在开发的项目,我有一个运行基于Linux操作系统的embedded式系统。 我有一个外部设备通过RS232控制,我需要写一个驱动程序。

问题:

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

2)从我发现,似乎只要打开dev / ttyS *并写入它将更容易访问用户空间中的串行端口。 当为这样的设备(RS232设备)编写驱动程序时,最好是在用户空间中执行还是可以编写内核模块? 如何决定在用户​​空间中将驱动程序编写为内核模块,还是反之亦然?

驱动程序仅适用于通用设备,如UART /串口,然后在上面是用户空间,还是应该将此驱动程序编写为内核模块? 我感谢帮助,我一直无法find许多信息来回答我的问题。

Solutions Collecting From Web of "Linux设备驱动程序,用于embedded式系统中的RS232设备"

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

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

从用户空间做这样的事情会导致一些延迟。 读写操作是缓冲的,而且通常很难判断硬件实际在写入操作的哪个位置,并且取消已经成功的写入调用在用户空间中是不可行的,即使硬件还没有收到字节。

我会建议尝试从用户空间,然后移动到OS驱动程序,如果有必要。 即使有必要将其转换为OS级别的驱动程序,您也可能会从用户空间中获得一些进展。