1

在 Linux 驱动程序中同步线程时,我非常喜欢几个函数,即 : wait_for_completion()和它的对应函数complete_and_exit()

用 2 个线程实现这个 api 是否可行,共享一个内存映射,分别是内核中的写入器和用户空间中的读取器?

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

问候, CyrIng (Fr)

4

1 回答 1

0

用户空间进程可以ioctl()对通过mknod. 您的设备驱动程序可以使用来自ioctl系统调用的参数来为wait_for_completion()调用提供参数。例如,用户进程可以ioctl()用来传递一个结构,该结构包含某种代码来识别它想要什么,一个指向用户空间缓冲区的指针,以及一个包含缓冲区大小的大小字段。处理 的内核线程ioctl()然后可以阻塞wait_for_complete(),然后用数据填充用户空间缓冲区。

有关处理示例,请参见此网页ioctl()

介绍 ioctl()

输入/输出控制(ioctl,简称 ioctl)是大多数驱动程序类别中可用的常见操作或系统调用。这是一种万能的系统调用。如果没有满足特定要求的其他系统调用,则使用 ioctl()。

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

...

于 2015-07-27T16:41:40.093 回答