3 Binder--sayHello之ioctl.md( 三 )


二. ioctl介绍
本身对Linux内核驱动不太了解,可以参考这篇博文:
ioctl() 系统调用操作特殊文件的底层设备参数 。特别是,字符特殊文件(例如终端)的许多操作特性可以通过ioctl() 请求来控制 。
ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现 。
参数描述
fd
文件描述符
cmd
交互协议,设备驱动将根据 cmd 执行对应操作

可变参数 arg,依赖 cmd 指定长度以及类型
2.1 API 头文件: # , 用于指定ioctl()请求的宏和定义位于文件中 。参数: int ioctl(int fd,long , …); fd 必须是打开文件描述符 。cmd 是依赖于设备的请求代码, 即交互协议,设备驱动将根据 cmd 执行对应操作argp(…) 是指向内存的非类型指针, 它传统上是char*argp, ioctl()请求在其中编码了参数是in参数还是out参数,参数argp的大小以字节为单位 。返回值: ioctl() 函数执行成功时返回 0,失败则返回 -1 并设置全局变量值 EBADF fd不是有效的文件描述符 。默认argp引用不可访问的内存区域 。请求或argp无效 。fd与字符专用设备不关联 。指定的请求不适用于文件描述符fd引用的对象类型 。2.2 ioctl用户与驱动之间的协议
参考:
总结
通过这个的过程,我们对通信有了基本概念 。知道, , , 等等类的作用 。
接下来我们先看看驱动的加载过程,之后在继续分析ioctl接下来的流程:比如发送请求后,驱动是怎么找到对应的 。