On Fri, Sep 18, 2009 at 7:32 AM, Pei Lin <telent997@xxxxxxxxx> wrote:
2009/9/17 Leonidas . <leonidas137@xxxxxxxxx>:
>hi, leo
>
> Hi list,
>
> I know that introducing/using new ioctls is frawned upon by the community.
> They might still be needed for controlling various hw parameters, Just
> wanted
> to understand the data transfer side of ioctls with a use case.
>
> E.g. My kernel module needs to pass a buffer of 1-2Mb to userspace
> whenever user requests. The buffer will contain different kind of data
> depending
> on different commands i.e. assume that I maintain 3 types of buffers in my
> module.
>
> Now, with ioctls it is much easiler to get the buffer to userspace simply by
> issusing
> different commands. But if I have to achive the same functionality using
> read() call
> how would I do it? Meaning ioctl kind of multiplexes the things which might
> be
> needed in some cases. How would I do this kind of stuff with read()? By
> having 3
> different minor devices and issuing read() on 3 devices for getting 3
> buffers?
>
just implement your ioctl function, create the command, and decode
command,deliver your command and buffer point (user) into your
module,then use copy_from_user /copy_to_user deliver your buffer from
user to kernel or vice versa.
--
> I am not looking for anyother mechanism of trasnfering data to userspace as
> of now
> since this data would be really sporadic. I have to choose between ioctl and
> read.
>
> -Leo.
>
Best Regards
Lin
Peter,
No it is going to be a simple char device. Actually a pseudo device since it is not going
to be associated with any hw buffers. The buffers which I need to transfer are some
bookkeeping buffers I would maintain in my module. So the usd stuff which you mention
might not be appropriate.
Lin,
I think you are talking about ioctl on a single minor number device, my concern is more
about choice here. Meaning whether using ioctls with different commands on a single dev
node be preferable to issuing reads on 3 different minor number device nodes.
-Leo.