Re: ioctl call fails with unknown command



On Fri, 22 Feb 2008 06:38:25 -0800, Bill Waddington
<william.waddington@xxxxxxxxxx> wrote:

On Thu, 21 Feb 2008 12:34:13 -0800, Bill Waddington
<william.waddington@xxxxxxxxxx> wrote:

[top posting shuffled]

On Thu, 21 Feb 2008 12:09:56 -0800 (PST), mcharon@xxxxxxxxx wrote:
On Feb 19, 10:10 pm, Janaka <jana...@xxxxxxxxxxxx> wrote:
On Feb 20, 1:18 pm, mcha...@xxxxxxxxx wrote:

hi, when trying to doioctlcallto my driver, i keep getting an error
message:unknowncommandfd(3).  it seems that theioctl

callis not invoking my driver ioctal method because the debug message
inside myioctlmethod never get printed out.
although this may seems like i am using incorrect file descriptor,
since myioctlmethod is not even being called, i know i am

using the correct file descriptor because my 'read' method gets
invoked fine.
And using the same code and driver, i was able to get it to work on a
486 target machine but it doesn't seem to work with this

particular linux version.

how can i debug this code? where in the kernel code can i begin to
trace to see what is happening?  which file/function gets

called whenioctlfunction is fisrt called?
(i don't have a debugger and i am not able to gdb the code so i need
to resort to printing out debug messages in the source

code.)

thank you in advance.
ioctlcallfailswithunknowncomma

I am assuming that you are using 2.6.x kernel.  If so use one of the
macros provided by the kernel to specify IOCTLs such as:
_IO( 'k', 0)
_IOR( 'k', 2)
_IOW( 'k', 4)
_IOWR( 'k', 5)

etc.

Make sure the file open succeeds before attempting tocallits IOCTLs.
Eg:
myfile = open("/dev/mydevice0", O_RDWR |  O_SYNC);

ioctl( myfile, 4, 1234);

hi janaka, i am using 2.6.x...and yes the open command is succesfful.
i can even invoke my read/write method.
i have registered my command using magic number
0x81 and also tried magic number 0x82, etc..
so far still havent' been able to do ioctl call in the driver.
the vendor says there's no problem with the kernel.
do you have any more suggestions?

thank you in advance.

Show us the code.

What does your ioctl() entry point (or points) look like? How are you calling
it? What does you file_operations structure look like?

To cut to the chase, is the failing case running a 64 bit kernel? If
so it's probably/maybe that you havent't implemented compatible ioctls
and/or unlocked ioctls:

http://lwn.net/Articles/119652/

For a few kernel versions, there was an even nastier way of telling
the kernel that ioctls were 64 bit compatible, IIRC.

[continuing this tacky habit of replying to myself...]

I should have added that this issue only comes up if running a 64 bit
kernel and a 32 bit calling application - I think.

Bill
--
William D Waddington
william.waddington@xxxxxxxxxx
"Even bugs...are unexpected signposts on
the long road of creativity..." - Ken Burtch
.



Relevant Pages

  • Re: ioctl call fails with unknown command
    ... inside myioctlmethod never get printed out. ... although this may seems like i am using incorrect file descriptor, ... I am assuming that you are using 2.6.x kernel. ... Make sure the file open succeeds before attempting tocallits IOCTLs. ...
    (comp.os.linux.development.system)
  • Re: [PATCH 5/7] FUSE: implement ioctl support
    ... namespace than your filesystem and so it's arguments refer ... is implemented in kernel or not. ... Of course FUSE has specific kernel dependencies. ... and I don't see why individual ioctls should be different. ...
    (Linux-Kernel)
  • Re: [PATCH 5/7] FUSE: implement ioctl support
    ... It would be better if the kernel handed you back a file descriptor to the ... - This seems to allow for random ioctls. ... arbitrary user space processes to support random ioctls. ...
    (Linux-Kernel)
  • Re: [PATCH 5/7] FUSE: implement ioctl support
    ... we won't have the option of doing backwards compatibility when something ... like we can with the 32->64bit ioctls. ... kernel stub kind of beats a lot of benefits of FUSE - no ... Of course FUSE has specific kernel dependencies. ...
    (Linux-Kernel)
  • Re: ioctls, etc. (was Re: [PATCH 1/4] sas: add flag for locally attached PHYs)
    ... ioctls represent the most direct, ... Microsoft and Linux while in the other there are ... in the kernel was killed by "struct class". ... a block driver is nothing but a message queue. ...
    (Linux-Kernel)