Scull Driver - Read

sahil aggarwal sahil.agg15 at gmail.com
Fri Mar 20 08:44:52 EDT 2015


Does it mean that in kernel space the direction bitfields are reversed.?

On 20 March 2015 at 18:12, sahil aggarwal <sahil.agg15 at gmail.com> wrote:
> Hi Pranay,
>
> Can you help me with this too.? In case of _IOC_READ why VERIFY_WRITE
> and in case of _IOC_WRITE why VERIFY_READ.? . Book says its kernel
> oriented so concept of read and write is reversed.
>
> if(_IOC_DIR(cmd) & _IOC_READ)
>          err = !access_ok(VERIFY_WRITE, (void __user*)arg, _IOC_SIZE(cmd));
> else if(_IOC_DIR(cmd) & _IOC_WRITE)
>          err = !access_ok(VERIFY_READ, (void __user*)arg, _IOC_SIZE(cmd));
> if(err)
> return -EFAULT;
>
> Thanks
> Regards
>
>
>
>
>
>
> On 20 March 2015 at 12:36, sahil aggarwal <sahil.agg15 at gmail.com> wrote:
>> Hi Pranay
>>
>> Well explained.
>>
>> Thank you.
>>
>> On 20 March 2015 at 11:46, Pranay Srivastava <pranjas at gmail.com> wrote:
>>> Hi Sahil
>>>
>>> On Sun, Mar 15, 2015 at 10:17 AM, sahil aggarwal <sahil.agg15 at gmail.com> wrote:
>>>> hi all,
>>>>
>>>> Going through scull driver code, i see read function reads only till
>>>> end of 1 quantum, so do kernel call read multiple times if count from
>>>> q_pos exceeds quantum size limit.?
>>>>
>>>>
>>>> Ref: ldd3.
>>>>
>>>> if(count > quantum - q_pos)
>>>> count = quantum - q_pos;
>>>> if(copy_to_user(buf, dptr->data[s_pos] + q_pos,count)){
>>>> retval = -EFAULT;
>>>> goto out;
>>>> }
>>>
>>> If you are not using the default read/write routines, then its up to
>>> you to code that.
>>>
>>> Kernel doesn't do multiple read calls. It'll do only what you asked it
>>> for no more but it can do less. For example, a file is say 100 KiB and
>>> you are reading say 4KiB in a loop when do you stop?
>>>
>>> Simply put it's the user space application which is doing the looping
>>> and repeatedly doing read calls because it assumes that file isn't
>>> finished.
>>>
>>> So again when do you stop reading from the file, without knowing size
>>> of the file.?
>>>
>>>> *f_pos += count;
>>>> retval = count;
>>>>
>>>> Thanks
>>>> Regards
>>>>
>>>> _______________________________________________
>>>> Kernelnewbies mailing list
>>>> Kernelnewbies at kernelnewbies.org
>>>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>>
>>>
>>>
>>> --
>>>         ---P.K.S



More information about the Kernelnewbies mailing list