在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()是
采用。
实际示例包括音频设备的音量控制,显示
视频设备的配置,读取设备的寄存器等
—基本上与设备输入/输出有关,或者
设备特定的操作,但对于任何类型的操作都足够通用
操作(例如,通过查询驱动程序数据来调试驱动程序
结构)。
...