我目前正在编写一个Linux内核模块,但在实现与用户空间程序的通信时遇到了问题。
这个内核模块需要接收用户空间程序发出的任务,并在完成后向用户空间程序发送结果。在内核模块执行任务期间,应阻塞用户空间程序。
我认为使用内核-用户空间IPC或Unix套接字会很好,但我在Google上找不到相关示例。
目前,我采用了一个丑陋的解决方案,即导出chardev并让用户空间程序将请求写入设备文件中,并从其中读取结果。但我每次只能通过open()调用发出一个请求,这导致了新的问题。我真的需要一种IPC或类似socket的东西。谢谢!
这个内核模块需要接收用户空间程序发出的任务,并在完成后向用户空间程序发送结果。在内核模块执行任务期间,应阻塞用户空间程序。
我认为使用内核-用户空间IPC或Unix套接字会很好,但我在Google上找不到相关示例。
目前,我采用了一个丑陋的解决方案,即导出chardev并让用户空间程序将请求写入设备文件中,并从其中读取结果。但我每次只能通过open()调用发出一个请求,这导致了新的问题。我真的需要一种IPC或类似socket的东西。谢谢!
write(2)
调用是否已经写入了完整的消息。如果用户程序使用fprintf()
向chardev
写入请求,则内核模块可能会接收到部分消息。通过使用套接字或 IPC,我认为我可以保证消息是完整的。 - Santa Zhang