On Tue, Dec 27, 2011 at 10:34 PM, Chetan Nanda <
chetannanda@gmail.com> wrote:
>
>
> On Tue, Dec 27, 2011 at 11:25 PM, Dave Hylands <
dhylands@gmail.com> wrote:
>>
>> Hi Chetan,
>>
>> On Tue, Dec 27, 2011 at 3:39 AM, Chetan Nanda <
chetannanda@gmail.com>
>> wrote:
>> > Hi All,
>> >
>> > I am facing a strange issue with the ioctl commands, and not able to
>> > find
>> > what wrong I am doing.
>> > I am trying with a dummy kernel driver and implemented ioctl command as
>> > follow:
>> >
>> > in my_ioctl.h
>> > #define READHWREG_MAGIC_NUMBER 0x15
>> > #define READHWREG_CAM_READPE _IOR(READHWREG_MAGIC_NUMBER, 1, int*)
>> >
>> > But the value of 'READHWREG_CAM_READPE' is comes out to be different in
>> > userspace (in the application) and kernel space (in the driver).
>> >
>> > In userspace I used ioctl as
>> > ...
>> > printf("\ncommand %x \n",READHWREG_CAM_READPE); <-- command 80041501
>> > error = ioctl(g_DevFileId, READHWREG_CAM_READPE);
>> > ..
>> >
>> > In kernel space
>> >
>> > int readHwReg_ioctl(struct inode *node, struct file *filp, unsigned int
>> > cmd, unsigned long arg)
>> > {
>> > ...
>> > printk("\n%d %s cmd = %x\n",__LINE__,__FUNCTION__,cmd); <--- cmd =
>> > bee6a9d4
>>
>> Back in 2.6.36, the ioctl member of the struct file_operations
>> structure (which took 4 arguments) was finally deprecated, replaced
>> with unlocked_ioctl (which only takes 3 arguments).
>>
>> If you just renamed and ignored the compiler warnings, then that
>> explains your problem.
>>
> Thanks Dave for pointing out 'unlocked_ioctl'
> I come across this link:
>
http://lwn.net/Articles/119652/
>
>> --
>> Dave Hylands
>> Shuswap, BC, Canada
>>
http://www.davehylands.com
>
>
> Thanks,
> Chetan Nanda
>