ftdi_sio驱动学习笔记 2 - probe

ops/2024/9/24 20:36:14/

目录

1. ftdi_quirk

2. id的特殊性

3. 将特殊操作赋值给串口的私有数据


.probe =		ftdi_probe,

这个接口函数是FTDI设备插入时调用的函数。程序ftdi_probe里面主要是根据不同的VID和PID设备做了不同的probe函数。这一步最大的作用是probe特殊的一些应用,对于普通的串口应用,实际没有做任何处理,服从默认的初始化。

static int ftdi_probe(struct usb_serial *serial, const struct usb_device_id *id)
{const struct ftdi_quirk *quirk = (struct ftdi_quirk *)id->driver_info;if (quirk && quirk->probe) {int ret = quirk->probe(serial);if (ret != 0)return ret;}usb_set_serial_data(serial, (void *)id->driver_info);return 0;
}

1. ftdi_quirk

这是特殊的处理,这个结构体相当于定义了2个特殊的probe和port_probe

struct ftdi_quirk {int (*probe)(struct usb_serial *);/* Special settings for probed ports. */void (*port_probe)(struct ftdi_private *);
};

2. id的特殊性

在数组id_table_combined中,大部分的成员是2个ID,但是会有一些特殊的id申明,例如:

	{ USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) ,.driver_info = (kernel_ulong_t)&ftdi_8u2232c_quirk },{ USB_DEVICE(FTDI_VID, FTDI_4232H_PID) },

第二个USB Device就是只有VID和PID,而第一个USB Device多了一个driver_info,结合上面ftdi_quirk的获取:

const struct ftdi_quirk *quirk = (struct ftdi_quirk *)id->driver_info;

这个地方就是从id那里得到这个设备特殊的处理。而这个特殊的处理只包括了新的probe。

static const struct ftdi_quirk ftdi_8u2232c_quirk = {.probe	= ftdi_8u2232c_probe,
};

可以看到ftdi_8u2232c_probe里面初始化了JTAG的应用。这里先不深入这部分。

3. 将特殊操作赋值给串口的私有数据

usb_set_serial_data其实没有做什么,就是简单的把id那里定义的特殊处理赋值给serial这个变量的私有数据。

static inline void usb_set_serial_data(struct usb_serial *serial, void *data)
{serial->private = data;
}

也就是ftdi的probe步骤其实没什么特别需要处理了,除非是一些需要实现特殊功能的设备。


http://www.ppmy.cn/ops/115450.html

相关文章

何时提取ReID特征:一种改进多目标跟踪的选择性方法

摘要 https://arxiv.org/pdf/2409.06617 提取和匹配重识别(Re-ID)特征被许多最先进的(SOTA)多目标跟踪(MOT)方法所使用,特别是在频繁和长期遮挡的情况下特别有效。尽管端到端的目标检测和跟踪一…

【C++】C++中如何处理多返回值

十四、C中如何处理多返回值 本部分也是碎碎念,因为这些点都是很小的点,构不成一篇文章,所以本篇就是想到哪个点就写哪个点。 1、C中如何处理多个返回值 写过python的同学都知道,当你写一个函数的返回时,那是你想返回…

Redis数据结构之哈希表

这里的哈希表说的是value的类型是哈希表 一.相关命令 1.hset key field value 一次可以设置多个 返回值是设置成功的个数 注意,哈希表中的键值对,键是唯一的而值可以重复 所以有下面的结果: key中原来已经有了f1,所以再使用hse…

J Transl Med结肠癌分子分型+简单实验

目录 技术路线 实验设计(药物敏感性) 亮点 方法 从 TCGA 和 GEO 数据库下载大量和单细胞 RNA 测序以及 CRC 的临床数据。HRGs 和 LMRGs 来自分子特征数据库。使用 R 软件包 DESeq2 进行差异表达分析。使用无监督聚类进行分子亚型。使用单变量 Cox 回…

Laravel邮件发送:从配置到发邮件的指南!

Laravel邮件发送功能如何实现?怎么使用Laravel发信? Laravel作为一款流行的PHP框架,提供了强大且易用的邮件发送功能。AokSend将详细介绍如何从配置到实际发送邮件的全过程,帮助你快速掌握Laravel邮件发送的技巧。 Laravel邮件发…

【MySQL】表的操作

目录 一、增加表 二、查看表 2.1 查看当前数据库中的表 2.2 查看指定表的结构 2.3 查看创建表时的详细信息 2.4 查看表中所有数据 三、修改表 3.1 修改表名 3.2 插入数据 3.3 添加列 3.4 修改列类型 3.5 删除列 3.6 修改列名 四、删除表 一、增加表 增加表的语法…

sqli-lab靶场学习(四)——Less11-14(post方法)

前言 第1-10关都是get方法,本关开始进入post方法。其实post也好get也好,本质都差不多,使用的技巧也基本相同。 Less11 第11关打开是一个输入用户名密码的界面 显然登陆对话框会使用post方式提交,这里我们尝试在Username一栏通过…

Android轻量级RTSP服务使用场景分析和设计探讨

技术背景 好多开发者,对我们Android平台轻量级RTSP服务模块有些陌生,不知道这个模块具体适用于怎样的场景,有什么优缺点,实际上,我们的Android平台轻量级RTSP服务模块更适用于内网环境下、对并发要求不高的场景&#…