二. 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接下来的流程:比如发送请求后,驱动是怎么找到对应的 。
- 未解之谜:揭大清在灭亡前发生的三件怪事
- 未解之谜:玛雅人竟然可以画出月球的背面图
- 雷峰塔倒掉之后竟出现一座地宫揭开历史谜团
- 汉高祖刘邦传奇人生之刘邦与紫气岩有何传说
- 宋太祖赵匡胤是猝死吗?赵匡胤死亡之谜大揭秘
- 安史之乱后杨贵妃有何下落?杨贵妃生死大揭秘
- 飞将军李广之孙李陵:即使身在异族却心中有国
- 揭秘:成吉思汗之孙元世祖忽必烈是因何故而死?
- 夹杂私仇的晚明三大案件之一红丸案是谁主使的
- 中国版加勒比海盗乃是民族英雄郑成功之父