您的位置:首页 > 移动开发 > Android开发

Android 编译2.6.36的kernel akm8975 driver时unknown field 'ioctl' specified in initializer的问题

2011-02-15 21:53 483 查看
最近在学习Android源代码的结构,需要经常编译内核

在单独编译Andrioid linux kernel的时候再编译到/driver/misc/akm8975.c 时出现

问题主要是linux 2.6.36的驱动机制里file_operation关于ioctl这块改动比较大

所以导致了unknown field 'ioctl' specified in initializer的这个问题

原来内核的ioctl注册方法:

例:

static int ***_ioctl(Struct inode *in,struct file *filp,unsigned int cmd,unsigned long arg)

{

..........//内容

}

.........

static struct file_operations ***_fops={

.open = ***_open,

.read = ***_read,

.ioctl = ***_ioctl,

}

////////////////**********************************************//////////////////

2.6.36内核的ioctl改动:

去掉了原来的ioctl,添加两个新的成员,所以会出错

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

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

例:

static long ***_unlocked_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)

{

..........//内容

}

static struct file_operations ***_fops={

.open=***_open,

.....,

.unlocked = ***_unlocked_ioctl;

}

////////////////**********************************************//////////////////

运气好的话按照这个样子更改,是能够通过编译通过 :)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: