Building for Linux Kernel after version 2.6.36

在2.6.36之後的版本,原先使用的IOCTL已經完全的被移除掉,而在這之後的版本IOCTL可以看到

long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

其中ioctl改成使用unlocked_ioctl,如果User Space是32位元,Kernel是64位元,則使用compat_ioctl

範例

2.6.35以前使用方式
static struct file_operations MyDriver_fops = {
  .owner = THIS_MODULE,
  .llseek = no_llseek,
  .read = MyDriver_read,
  .write = MyDriver_write,
 
.ioctl = MyDriver_ioctl,
  .open = MyDriver_open,
  .release = MyDriver_release
};
2.6.35以後使用方式
static struct file_operations MyDriver_fops = {
  .owner = THIS_MODULE,
  .llseek = no_llseek,
  .read = MyDriver_read,
  .write = MyDriver_write,
  .unlocked_ioctl = MyDriver_ioctl,
  .open = MyDriver_open,
  .release = MyDriver_release
};
arrow
arrow
    全站熱搜

    Leo 發表在 痞客邦 留言(1) 人氣()