红联Linux门户
Linux帮助

求助:应用程序如何访问驱动中实现的ioctl方法

发布时间:2009-03-28 12:50:25来源:红联作者:li32768
我编写了一个驱动程序,然后在其中的ioctl(struct inode *,struct file *,unsigned int ,unsigned long ) 中定义了一些操作来设置ARM中的么些寄存器,但是我在上面的应用程序中如何访问其中的控制命令,实现控制了,
如果是通过 open 打开一个文件,获得的是整型的文件描述符,而fcntl 实现的功能也与驱动中的ioctl 差别很大的,我该如何调用以及在哪里调用 ioctl()了,
先谢谢了
文章评论

共有 1 条评论

  1. li32768 于 2009-03-30 14:47:53发表:

    自己解决:inode和filp指针是根据应用程序传递的文件描述符fd计算而得的,与read和write的用法一致。参数cmd不经修改地传递给驱动程序,可选的arg参数无论是指针还是整数值,它都以unsigned long的形式传递给驱动程序。如果调用程序没有传递第3个参数,驱动程序所接收的arg没有任何意义。<BR>由于附加参数的类型检查被关闭了,如果非法参数传递给ioctl,编译器无法向你报警,程序员在运行前是无法注意这个错误的。这是我所见到的ioctl语义方面的唯一一个问题。<BR>如你所想,大多数ioctl实现都包括一个switch语句来根据cmd参数选择正确的操作。不同的命令对应不同的数值,为了简化代码我们通常会使用符号名代替数值。这些符号名都是在预处理中赋值的。不同的驱动程序通常会在它们的头文件中声明这些符号;scull就在scull.h中声明了这些符号。