2002-02-18 17:35:58

by Michael Zhu

[permalink] [raw]
Subject: Communication between two kernel modules

Hi, how can I call some kind of APIs from kernel mode,
such as open, ioctl and close? Because I need to use
some services of another kernel module from my kernel
module and I have no source code of the module which
provides the services. Now I can only access the
module in user space using the open, ioctl and close
APIs. Can I do the same thing in my kernel module?
Thanks.

Michael

______________________________________________________________________
Web-hosting solutions for home and business! http://website.yahoo.ca


2002-02-19 06:31:14

by Rok Papež

[permalink] [raw]
Subject: Re: Communication between two kernel modules

Hello Michael!

On Monday 18 February 2002 18:32, Michael Zhu wrote:

> Hi, how can I call some kind of APIs from kernel mode,
> such as open, ioctl and close? Because I need to use
> some services of another kernel module from my kernel
> module and I have no source code of the module which
> provides the services. Now I can only access the
> module in user space using the open, ioctl and close
> APIs. Can I do the same thing in my kernel module?
> Thanks.

Create a user-space app that will ioctl into your driver and wait for
requests. When your module needs to call the other module it delivers request
to the user-space app wich in turn calls the other module and returns results
via another ioctl call.

Take care not to deadlock.. In user space app use fork() or threads and
handle module requests async...

Be ready to handle an event when your user-space app unexpectedly dies.

--
best regards,
Rok Pape?.

2002-02-20 09:29:09

by Jan Hudec

[permalink] [raw]
Subject: Re: Communication between two kernel modules

> > Hi, how can I call some kind of APIs from kernel mode,
> > such as open, ioctl and close? Because I need to use
> > some services of another kernel module from my kernel
> > module and I have no source code of the module which
> > provides the services. Now I can only access the
> > module in user space using the open, ioctl and close
> > APIs. Can I do the same thing in my kernel module?
> Create a user-space app that will ioctl into your driver and wait for
> requests. When your module needs to call the other module it delivers request
> to the user-space app wich in turn calls the other module and returns results
> via another ioctl call.
>
> Take care not to deadlock.. In user space app use fork() or threads and
> handle module requests async...
>
> Be ready to handle an event when your user-space app unexpectedly dies.

Seems way too complicated to me. You can do everything from kernel.
You probably shouldn't use file handles in kernel, but you can use
file structure. Just open via filp_open, ioctl via ->f_op->ioctl
and close via filp_close (it will fput the structure).

You have to be in process context, either your ioctl handler or kernel
thread would do.

--------------------------------------------------------------------------------
- Jan Hudec `Bulb' <[email protected]>