我正在编写一个与特定串行设备交互的程序。该串行设备有两个通道,每个通道都有一个硬件接收和发送缓冲区。基本上,在任何给定时间,您都可以在设备的任一通道上读/写。
我试图从一个通道读取数据,验证它(并可能使用其中一些数据),然后传输数据。通过iotctl调用设备进行读取,而通过调用write()系统调用来完成写入。
我主要的问题是数据吞吐量。我想为每个通道(即每个通道的读线程和写线程)设置单独的线程来处理读取和写入。但是,我遇到了一些麻烦。从Linux的角度来看,设备上的所有内容都是通过一个单一的设备访问的,并且我不确定Linux是否注意到设备具有多个通道。
因此,目前我打开了一个文件描述符以对设备执行串行读/写操作。我想采用线程方法,但我想知道并发的ioctl()和write()调用是否会导致问题。我知道read()和write()不是线程安全的,但是我想知道是否有任何方法可以解决这个问题(例如调用open()两次,一次使用读权限,一次使用写权限)。
谢谢你的帮助。我还想避免编写自己的驱动程序,但这可能是不可避免的结论...
此外,作为一个副作用,我特别关注设备具有极小的硬件缓冲区。有没有办法确定操作系统为数据使用软件缓冲器使用了多少空间?也就是说,我是否可以确定操作系统是否有自己的缓冲器,用于防止硬件缓冲区溢出?所讨论的设备是I2C UART Bridge。