最近在调试驱动的时候遇到这个问题,在这里记录一下。
在做测试驱动的时候是这样写法的,但将驱动加载之后驱动进不去myioctl里面
struct file_operations fops = {
.owner = THIS_MODULE,
.compat_ioctl = myioctl,
};
然后file一下我的用户程序,发现用户程序是32位的,于是找到网上相关信息,修改成如下,就可以正常进到myioctl。
struct file_operations fops = {
.owner = THIS_MODULE,
.unlocked_ioctl = myioctl,
};
如果是64位的用户程序运行在64位的kernel上,调用的是compat_ioctl,如果是32位的APP运行在32位的kernel上,调用的也是unlocked_ioctl。