无题

本文探讨了Linux USB Gadget驱动的发展历程及个人遇到的问题:在使用GadgetFs驱动过程中,发现其对USBAudioClass的支持存在问题。通过查阅内核3.18的代码,发现该问题已在新版本中得到解决,并介绍了USB Gadget ConfigFS这一强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

果然是人贱不能移:前几天晚上无论是看电影、还是玩儿游戏都睡不好觉,结果昨天躺床上看了会儿代码,睡得这个香啊!

要说为啥要看代码,因为发现前阵子调查的GadgetFs"似乎"对USB Audio Class的支持有问题:在GadgetFs的驱动代码inode.c中,有一段注释:

/* NOTE:  audio endpoint extensions not accepted here;
* just don't include the extra bytes.
*/

就是讲Audio Endpoint俺们不支持,你爱咋咋的。。。

不支持Audio Endpoint,我就接收不了PCM数据,接下来就没法干了。于是今天查了下kernel 3.18的代码,发现gadget目录下没有inode.c了!!!仔细看了下原来挪到legacy目录下,这不是过时了么!!!上网搜了一下,找了个PDF,里面讲了linux usb gadget driver的发展历史,简述如下:

1. 第一个gadget的framework是由David Brownell在2003年早些时候提出的,正式采用了gadget的命名,而且只很少的UDC driver,g_zero&g_ether就是这时候添加的;

2. 2003年晚些时候,gadgetfs被引入,用于在userspace中开发gadget驱动,MTP/PTP是主要的用例;

3. composite framework在2008年加入,开始支持多功能USB gadget驱动(我的问题就此,没能及时的发现要做的协议和gadgetfs驱动之间是匹配不上的);

4. FunctionFS在2010年引入,重要!相当于多功能版的gadgetfs(但还缺点什么);

5. 3.11的内核,牛B人物来了---USB Gadget ConfigFS,用户空间API可以任意组合已有的Linux USB Gadget驱动,创造出怪物一样的USB Gadget设备;支持所有的除FunctionFS和Mass Storage之外已知gadget驱动;3.13之后,FunctionFS和Mass Storage也提供支持;

世界似乎总是这样:当你为了一些事头痛不以的时候,答案就在下个拐弯的地方等你。。。

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,广泛应用于图像处理、计算机视觉和模式识别等领域。物体识别是OpenCV的一个重要应用场景,以下是一些常见的物体识别方法和技术: 1. **特征提取与匹配**: - **SIFT(尺度不变特征变换)**和**SURF(加速稳健特征)**:这些算法用于检测和描述局部特征,能够在图像中识别出相同的物体,即使它们的大小、旋转或光照条件发生变化。 - **ORB(定向快速旋转BRIEF)**:一种快速的特征检测和描述算法,适用于实时应用。 2. **模板匹配**: - 通过在图像中滑动一个模板(已知物体的图像),并计算模板与图像区域的相似度,来找到物体的位置。 3. **机器学习与深度学习**: - **支持向量机(SVM)**:用于分类和回归分析,可以用于物体识别任务。 - **卷积神经网络(CNN)**:深度学习模型,特别适合处理图像数据,能够自动学习图像的特征并进行分类。 4. **目标检测算法**: - **Haar级联分类器**:基于积分图和AdaBoost算法,用于实时人脸检测。 - **YOLO(You Only Look Once)**和**SSD(Single Shot MultiBox Detector)**:实时目标检测算法,能够在单次前向传播中同时进行目标定位和分类。 5. **实例分割**: - **Mask R-CNN**:在目标检测的基础上,进一步分割出目标的精确轮廓。 OpenCV提供了丰富的API和工具,可以方便地实现上述方法。以下是一个简单的示例代码,展示如何使用OpenCV进行模板匹配: ```python import cv2 import numpy as np # 读取原始图像和模板图像 original_image = cv2.imread('original_image.jpg') template = cv2.imread('template.jpg') template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) w, h = template_gray.shape[::-1] # 转换为灰度图 gray_original = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY) # 模板匹配 result = cv2.matchTemplate(gray_original, template_gray, cv2.TM_CCOEFF_NORMED) threshold = 0.8 loc = np.where(result >= threshold) # 绘制矩形框 for pt in zip(*loc[::-1]): cv2.rectangle(original_image, pt, (pt[0] + w, pt[1] + h), (0, 255, 255), 2) # 显示结果 cv2.imshow('Detected', original_image) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值