Scull Driver - Read

sahil aggarwal sahil.agg15 at gmail.com
Sat Mar 21 11:34:47 EDT 2015


Hi Pranay

Thanks a lot. That cleared it all.



On 21 March 2015 at 13:45, Pranay Srivastava <pranjas at gmail.com> wrote:
> Hi Sahil
>
> On Fri, Mar 20, 2015 at 6:14 PM, sahil aggarwal <sahil.agg15 at gmail.com> wrote:
>> Does it mean that in kernel space the direction bitfields are reversed.?
>
> No it doesn't mean that.
>
>>
>> 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
>
>
>
> --
>         ---P.K.S



More information about the Kernelnewbies mailing list