adb ioctl 怎么传递参数_linux驱动中ioctl函数的讲解

第30章IOCTL函数

30-1:ioctl函数的作用:

设备在运行的时候可能要求数据的写入是连续的,如果这个时候仍然用WRITE函数去写指令的话,就有可能导致数据的不连续,比如声卡放音乐卡顿,电影播放不流畅等等的情况,为了解决这种情况,就有了IOCTL函数,此函数专门向驱动层发送或者接收指令。

30-2:ioctl函数的头文件和函数原型:

1) 应用层头文件:#include <sys/ioctl.h>

int ioctl(int d,int request, ...)

作用:配合驱动层的IOCTL函数实现指令的传递

参数1:设备描述符

参数2:指令,如某一个命令对应驱动层的某一个功能

参数3:可变参数,跟命令有关,传递进入驱动层的参数或者是接收数据的缓存

返回成功:0

返回失败:小于0 返回值取决于用户如何设计驱动层

2) 驱动层头文件:#include <linux/ioctl.h>

long (*unlocked_ioctl) (struct file *, unsigned int,unsigned long)

作用:此函数指针原型位于struct file_operations结构体当中,配合应用层ioctl函数实现指令传递的功能

参数1:文件结构体指针

参数2:指令

参数3:应用层传递给驱动层的数据或者是接收数据用到的缓存地址

30-3:ioctl函数的实现方法:

最基本的实现方法请参考代码和视频

得到一个结论:不能传递2,这是因为2已经被系统的其他程序占用了作为一个专用命令,所以在ioctl当中不能使用2,作为命令,于此相同情况的还不止2。正因为此原因,IOCTL不能够直接使用数字作为命令进行传递,而是有一套专门制作IOCTL命令的方法。

30-4:关于ioctl函数的命令:

30-5:系统提供的IOCTL命令工具:

Iotrl的系统定义命令方法是定义为一个32bit的无符号整形数字,这个数字会按位进行分段,每一段的含义都不一样,所以IOCTL的命令是四个部分组合起来形成的一个32bit的数字

3553f11c0e3fc45d25e1067cf90b9f3e.png

无标题.png

最高2bit:读写控制位,读,写,有没有数据传输,双向传输(先写后读)

16bit—29bit:要传输的数据大小

8bit—15bit:魔数/幻数,其实就是不同组命令的区分标识,写入一个ASCII字符来进行区分

0bit—7bit:真正的命令编号 0—255每一组共计支持256个

30-6:IOCTL代码编写:

1) 代码的功能设计:

ALLON à 开全部灯

ALLOFF à 关全部灯

LEDON à 开指定的某个灯

LEDOFF à 关指定的某个灯

LEDREAD à 读全部灯的状态

TRANSFERà 先写入灯状态再向用户空间传递数据

2) 代码请参考视频

30-6:内核提供的制作IOCTL命令的工具

#define _IO(type,nr) //制作没有数据传输的命令

#define _IOR(type,nr,size) //制作读取数据的命令

#define _IOW(type,nr,size) //制作写入数据的命令

#define _IOWR(type,nr,size) //制作先写入后读取的双向传输命令

参数1:魔数àASCII字符

参数2:命令编号

参数3:要传递的数据的大小,此处不能填入数字,要填定义类型

关于定义类型:charà一个字节 shortà两个字节 intà四个字节

传递非标准定义的数据长度使用结构体类型,不考虑结构体内部数据对齐,其实这样做是为了你传递数据的方便

30-7:内核提供的分离IOCTL命令的工具

#define _IOC_DIR(nr) //分离读写控制

#define _IOC_TYPE(nr) //分离魔数

#define _IOC_NR(nr) //分离命令

#define _IOC_SIZE(nr) //分离数据长度

合作微信xydf321456

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
win10_adb_fastboot驱动_usb_driver是指用于在Windows 10操作系统上安装和管理Android设备的ADB(Android Debug Bridge)和Fastboot驱动,以便进行开发者选项和设备连接。 ADB驱动是Android开发工具包(SDK)的一个组件,它允许开发者通过电脑上的命令行界面与Android设备进行通信。借助ADB驱动,开发者可以在电脑上安装、调试和测试应用程序,还可以利用ADB命令来获取设备信息、传输文件等。 Fastboot驱动是Android设备上的引导程序,它提供了一种引导设备到Fastboot模式的方式。Fastboot模式是一种拥有高级权限的启动模式,使用Fastboot驱动可以在设备上执行一系列高级操作,如刷写系统分区、解锁引导程序等。 在Windows 10操作系统上安装和配置win10_adb_fastboot驱动_usb_driver一般分为以下几个步骤: 1. 下载ADB驱动程序。例如,可以从官方的Android开发者网站下载最新版本的ADB驱动。 2. 解压下载的驱动文件。将解压后的文件夹保存到一个容易访问的位置。 3. 启动设备管理器。在Windows 10上,可以通过按下Windows键 + X打开快速访问菜单,然后选择“设备管理器”来打开设备管理器。 4. 连接Android设备。使用USB数据线将Android设备连接到电脑上。确保设备处于开发者模式,并已启用USB调试选项。 5. 在设备管理器找到Android设备。通常,Android设备会出现在“其他设备”或“便携式设备”下面,它可能带有一个黄色的感叹号图标。 6. 右键单击Android设备,选择“更新驱动程序”。 7. 在更新驱动程序向导,选择“浏览计算机以查找驱动程序软件”。 8. 浏览到之前下载和解压的ADB驱动文件夹,并选择相应的驱动程序。 9. 完成驱动程序的安装过程后,设备管理器的Android设备应该显示为正常状态。 安装和配置win10_adb_fastboot驱动_usb_driver后,开发者就可以开始使用ADB和Fastboot命令与Android设备进行交互,进一步开发、调试和测试Android应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值