博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GPIO ,ioctl,file->private_data
阅读量:4042 次
发布时间:2019-05-24

本文共 1050 字,大约阅读时间需要 3 分钟。

1.应用层的ioctl,int ioctl(int fd, ind cmd, …);fd为你所打开的文件描述符,cmd一般可以为一个宏标志,如

#define  GPIO_REQUEST   _IO('I',1)     第三个参数可以为一个一个结构体的地址,当应用程序调用ioctl 时

驱动中的对应ioctl中的   XX_ioctl(struct file *pfile, unsigned int cmd, unsigned long arg)

中的arg即是传下来的该结构体地址。数据结构struce file 在驱动中的 struct file_operations中的接口(如 open read write ioctl)中都存在,他的pfile->private_data即为私有的数据,你可以将自己的数据结构传到该指针指向的空间里面,前提是你要申请一个空间让该指针指向该申请的空间,对该空间里的数据在 struct file_operations 中定义的各函数接口中进行任意的操作。

2.程序中不要要全局变量,不然你会很痛苦的,把全局变量统统都给干掉

3.应用程序中ioctl(xx,xx ,&xx)最后一个参数传递给驱动程序的地址,你可以对该空间的值做任意的改变,改变之后你再在应用程序中直接取你就能取到改变过后的值。比如你定义了一个结构体:

struce gpio_pri{

int number;

irq_trigger;

}gpio;

你在应用程序中将这个结构体最为参数向驱动中传递,ioctl(fd,cmd,&gpio);

在驱动程序中

XX_ioctl(struct file *pfile, unsigned int cmd, unsigned long arg)

{

struct gpio_pri *gpio = (struct gpio_pri *)arg;

/*你可以改变这个地址里的值*/gpio->irq_trigger = 1;

}

改变了之后,你在应用程序中直接读取gpio->trigger 他的值即是驱动里改变的那个,就是这么神奇,之前都不知道怎么回事,看网上有哥们这样做,亲自验证过真是这么回事。

4.驱动中ioctl返回的值即是应用程序中的ioctl的返回值。

5.用irq_request( , , , (void *)dev_id)申请的中断,当dev_id不为空时,当你在free_irq()释放的时候,/proc/interrupt中的 中断还是会有。

转载地址:http://xjmdi.baihongyu.com/

你可能感兴趣的文章
iPhone开发中静态库中的Category使…
查看>>
去掉字符串中不能作为文件名的特殊…
查看>>
常用SQL说明
查看>>
在iOS中使用重定向,把控制台内容…
查看>>
SQLibs iOS开发常用代码库
查看>>
iOS 开发常用尺寸
查看>>
"/usr/include/sqlite3.h" …
查看>>
ShareKit 中SHK.m中的编译错…
查看>>
Object_c底层细节
查看>>
TortoiseSVN切换登录用户
查看>>
iOS 拨打电话相关知识总结
查看>>
iOS 播放流媒体 服务端配置备份
查看>>
一行代码,在 iPhone 应用中…
查看>>
用UIWebView,JS获取视频链接
查看>>
iPhone app 内嵌httpserver
查看>>
iOS 剪贴板使用相关总结《转》
查看>>
让用户在应用中进入 App&nbsp…
查看>>
iOS网页专用,打开iSecret App
查看>>
排列组合公式/排列组合计算公式
查看>>
FaceBook 代码中重要备份&nbs…
查看>>