首先,我是个设备司机。这是我第一次处理用户模式程序。我以前有一个中断服务例程来响应硬件中断。换句话说,硬件使用中断服务例程通知驱动程序服务。我现在使用ioctl作为应用程序和设备驱动程序之间通信的通道,并轮询它以等待响应。当应用程序完成某些任务时,设备驱动程序是否可以通过其他方式通知它?欢迎任何意见。谢谢,
发布于 2015-04-16 11:44:57
这方面有几种机制。第一种方法:用户空间应用程序进行投票()或选择()系统调用,等待来自内核的事件.第二种方法是使用Netlink套接字。也有像mmap()或信号这样的其他。谷歌的kernel user-space IPC,你会看到整个名单。
至于你的情况(驱动程序开发),我想说的是,采用下一种方法。在驱动程序中创建sysfs文件,并执行通知() (可能是wait_for_completion_interruptible_timeout()或类似的操作)。在用户空间中,选择()系统调用驱动程序sysfs文件。例如,看看从用户空间安装行纪律是如何实现的。
发布于 2015-04-16 11:35:33
通常,除非应用程序请求通知并等待通知,否则内核不会通知应用程序。在unix系统上,这通常使用选择或类似的例程来完成。一个为select提供了一组文件描述符,然后select将等待到其中一个文件描述符上有活动时才返回。
考虑到在unix上所有设备都是文件,当某个硬件设备上出现中断时,您应该能够利用这种机制唤醒应用程序。
发布于 2015-04-16 13:41:11
除了ioctl (信号、套接字等)之外,还有大量的内核-用户空间通信接口。请参阅核空间-用户空间接口教程以获得详细解释。
https://stackoverflow.com/questions/29673304
复制相似问题