在Linux驱动程序中同步线程时,我确实喜欢几个功能:
wait_for_completion()及其对应的complete_and_exit()

用两个线程共享一个内存映射,分别在内核中的写程序和在用户空间中的读程序来实现此api是否可行?

如果不是,向C语言用户空间线程提供wait_for_completion()的工作是什么?

问候,
西格
(神父)

最佳答案

用户空间进程可以在通过ioctl()创建的设备文件上使用mknod调用。您的设备驱动程序可以使用ioctl系统调用中的参数来提出wait_for_completion()调用的参数。例如,用户进程可以使用ioctl()传递一个结构,该结构包含某种代码以标识其所需内容,指向用户空间缓冲区的指针以及包含缓冲区大小的大小字段。然后,处理ioctl()的内核线程可以在wait_for_complete()上阻塞,然后用数据填充用户空间缓冲区。

有关ioctl()处理的示例,请参见this web page


  介绍ioctl()
  
  输入/输出控制(简称ioctl)是一种常见操作,或者
  系统调用,在大多数驱动程序类别中可用。它是一个
  一刀切的所有类型的系统调用。如果没有其他系统
  满足特定要求的调用,那么ioctl()是
  采用。
  
  实际示例包括音频设备的音量控制,显示
  视频设备的配置,读取设备的寄存器等
  —基本上与设备输入/输出有关,或者
  设备特定的操作,但对于任何类型的操作都足够通用
  操作(例如,通过查询驱动程序数据来调试驱动程序
  结构)。
  
  ...

07-24 09:38
查看更多