关于字符设备驱动在多进程访问下的问题

老师好,

想问一下字符设备驱动是不是同时只能用一个用户态进程去打开?
我用最简单的按键驱动试了下,单个app去打开设备没啥问题,但两个app同时去打开就会出现一个app能读,另一个app读不到值。请问多进程的情况下,驱动要怎么处理呢?


比如这个read函数,使用休眠唤醒的方法来读取数据。要怎么做到能让多进程读?

我自己思考了一下,觉得内核应该有机制能将中断产生这个事件发送给所有阻塞在read函数的用户态app,但不清楚怎么实现。

就我所知:

  1. 采用 input 子系统来编写按键驱动,用多个进程来打开同一个 event 节点;
  2. 编写一个应用专门用于按键驱动的读取,使用进程间通信告诉其它进程;
  3. 你说的这个情况不清楚要怎么实现,蹲一下其他人的回答;
1 个赞

看了一下代码,感觉是 wait_event_interruptible(gpio_key_wait, g_key); 这个唤醒函数中的 condition 的问题;也就是 g_key = 0; 导致另一个 app 无法唤醒的问题;