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? Thank you. |
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?
Thank you. Kind regards. |
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?
Thank you. Kind Regards. |
how to send signal from kernel
Hi,
I am also stuck here. i don't know how send the signal from kernel space to user. Please can u explain. or just give sample code if u have i will check it out.. Thanks Please help me harsha |
All times are GMT -5. The time now is 10:42 PM. |