On Tue, Sep 29, 2009 at 3:34 PM, Leonidas . <leonidas...@gmail.com> wrote:

>
>
> On Tue, Sep 29, 2009 at 3:31 PM, Nagaprabhanjan Bellari <
> nagp....@gmail.com> wrote:
>
>> If you take /proc filesystem for example, you can write something to it
>> and can read something from it depending on what you last wrote.
>> -nagp
>>
>> On Fri, Sep 18, 2009 at 9:46 PM, Peter Teoh <htmldevelo...@gmail.com>wrote:
>>
>>> On Fri, Sep 18, 2009 at 9:07 PM, Leonidas . <leonidas...@gmail.com>
>>> wrote:
>>> >
>>> >
>>> > On Fri, Sep 18, 2009 at 5:36 AM, Peter Teoh <htmldevelo...@gmail.com>
>>> wrote:
>>> >>
>>> >> >
>>> >> > 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.
>>> >> >
>>> >> >
>>> >>
>>> >> just take the example of major device no 1:   u have /dev/mem,
>>> >> /dev/kmem, /dev/null, /dev/port etc etc....all having same major but
>>> >> different minor number, and implementation functions spilled into
>>> >> mem.c, or random.c etc, ie, more codes, more global variables (the
>>> >> fops structures) and more kernel memory (> 6MB++?).   but then u have
>>> >> the simplicity of coding (userspace) as well as asynchronous access to
>>> >> the kernel - ie, all three read() can enter the kernel at the same
>>> >> time.
>>> >>
>>> >> but if u used just one minor for 3 different buffer, and do some
>>> >> sophisticated multiplexing, u saved on memory (2MB++), but programming
>>> >> is more complex (userspace + kernel - those multiplexing stuff).  and
>>> >> u need to issue the read() synchronously - and u can either use
>>> >> in-band (or in-channel, hope u know what I mean) signalling (meaning
>>> >> the identifier of the buffer type is inside the buffer itself), or
>>> >> simpler still is out-of-band signalling (or side-channel), so in this
>>> >> case u need another minor device for ioctl purpose, to signal the
>>> >> buffer type to be used for the first minor device. ie, read() for
>>> >> first minor device, and ioctl() for 2nd minor device?   does it make
>>> >> any sense?
>>> >>
>>> >>
>>> >> --
>>> >> Regards,
>>> >> Peter Teoh
>>> >
>>> > Peter,
>>> >
>>> > You explained the first part in a fantastic way!
>>> > But I am not sure about the second para, in/out-band stuff.
>>> >
>>> > -Leo
>>> >
>>>
>>> ok......by in-band, i mean data + buffer type descriptor (u have 3
>>> types of buffer right) all goes into the same data area, so perhaps
>>> 2MB + 1 byte (which will have values of 1,2, or 3 to identify which
>>> buffer the current data represent).   so basically only ONE device
>>> (eg, /dev/myA).
>>>
>>> by out-of-band, i mean data will go into /dev/myA, and buffer type
>>> will go into /dev/myB.   so u do ioctl(/dev/myB) to specify the buffer
>>> type, and then the entire 2MB will go into /dev/myA.   so basically
>>> TWO device have to be created.
>>>
>>>
>>>
>>>
>>> --
>>> Regards,
>>> Peter Teoh
>>>
>>> --
>>> To unsubscribe from this list: send an email with
>>> "unsubscribe kernelnewbies" to ecar...@nl.linux.org
>>> Please read the FAQ at http://kernelnewbies.org/FAQ
>>>
>>>
>>
>
> I dont think so....
>
> Your kernel module can write to /proc file only when someone has issued a
> read on it.
> i.e. your kernel module will not know whether to write or not unless
> someone tries to
> read from /proc file. You cant dump data to a /proc file assuming that
> someone will read
> it later on.
>
> -Leo.
>

Not sure, how what I wrote contradicts with what you said.
What I meant was:

* write the mode to /proc file - you driver will remember that when somebody
reads from it, it will have to return mode specific data
* read from /proc file - driver will write mode specific data which is
stored.

This will behave like a true device - you program it to make it behave in a
certain fashion. :-)

-nagp

Reply via email to