error: unknown field 'ioctl' specified in initializer 如何解决呢?
买了个A8的嵌入式开发板,在学习字符驱动时没有配套的源程序,于是用的是其他板子的程序。修改完各项IO口后发现ioctl报错,网上找了很多方法,发现了一种简便有效的方法,做个记录吧。网上说的是Linux 2-6.36 之后Linux内核的的ioctl有变化,说的比较复杂,我是初学,看不太明白。
具体解决方法是:拿我的程序作为实例,我的是LED和KEY一起做的按键控制LED灯亮灭的程序。
1. 找到驱动源程序(*.c),我的是led_key_drv.c,并打开找到*_ioctl(struct inode *inode, struct file * file, unsigned int cmd, unsigned long arg),将里面的第一个参数,蓝色的那部分删除。
即变成只有后3个参数的ioctl函数-----
2. 在找到文件操作结构定义---file_operations部分,将其中的“ .ioct = *** ” 改为 “ .unlocked_ioct = *** ” ,只改变等号左边的即可。
之后变为:
3. 编译再次内核程序,即可通过。注意:应用程序(即用户程序)中的 ioctl 不需要修改,是通用的。
解决 error: unknown field 'ioctl' specified in initializer 的一种方法
最新推荐文章于 2024-03-06 16:14:51 发布