callback or notification from kernel to user space
ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
callback or notification from kernel to user space
Hello,
I am working on a device driver. It is no problem to access driver from user space to call ioctl, read and write. But how can I issue a callback from kernel to user application? For example, my driver in kernel space receives some packets from hardware and need to pass the data to the application in user space, is it possible to pass a callback function from user space to kernel, so that the kernel can call the callback function in user space? Or using other mechanism to let kernel notifies user applicaitons asynchronously?
It is doable, but would make a big mess. Especially when the code crashes. It's much better idea to pass it to user space program to process. You can send a signal. It's a quite good solution if the signals are rather rare. How often you need to pass the packets?
Thanks for your response. Signal is one of options, but the callback would be more appropriate for my driver. Could you please give more details for callback mechanism, or point me a resource for further reading?
Callback is done by just passing (as parameter, you can use casting if you don't have a good place for it) a function pointer (known propotype). Note that it's a great security risk (the function may do really nasty things).
Thanks for your explanation. You are right, it is not safe. I am just thinking about to use IPC to send a message from the kernel space to the applications. Can the sys_msgsnd() be used in kernel space?
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.