解决 error: unknown field 'ioctl' specified in initializer 的一种方法

   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 不需要修改,是通用的。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值