- 论坛徽章:
- 0
|
各位大侠:
在编写字符设备驱动过程中,需要考虑多个线程同时访问该字符设备的问题,需要互斥保护,同一时刻只允许一个线程对字符设备进行读写。但不知道用信号量还是自旋锁更好(自己理解感觉自旋锁似乎不适合用在这里),请各位大侠指点。
我的驱动中write方法函数结构如下:
write(..., ..., ...)
{
copy_from_usr();//将用户空间的数据传递到内核空间
check_state();//查询设备状态是否可写,如果可写继续执行,不可写则等待一段时间后write返回
dma_transfer();//发起DMA传输
wait_dma_transfer_complete();//等待DMA传输结束,DMA传输结束条件在我编写的另一个DMA中断处理函数中赋值,500ms未触发DMA传输结束中断则超时返回
after_process();//后续处理,根据DMA中断处理函数中的设置的结果,判断本次写操作是否成功,返回相应的值
}
read方法函数结构如下:
read(..., ..., ...)
{
read_from_circle_buf();//从内核空间一个循环缓冲区中读取数据,该循环缓冲区的数据在我编写的另一个中断处理函数中写入,该中断处理函数处理字符设备发来的数据
copy_to_usr();//将数据传递到用户空间
} |
|