Scull Driver - Read

Pranay Srivastava pranjas at gmail.com
Sat Mar 21 04:15:44 EDT 2015


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