Android Mediatek USB 核心驱动中增加设备 PID/VID 检查

简介: Android Mediatek USB 核心驱动中增加设备 PID/VID 检查

这个是在mtk usb核心驱动增加的检查文件 , 并且对vid、pid进行过滤的。

这个修改主要在Mediatek  USB 核心驱动的 usb_new_device 函数中增加了设备 PID/VID 的检查。当新的 USB 设备连接时,驱动会检查设备的 PID/VID 是否在预定义的列表中,如果不在,则不会继续初始化该设备。

修改的文件:

  1. kernel-3.10/drivers/usb/core/hub.c

文件修改说明:

  1. hub.c: 在 usb_new_device 函数中,增加了设备 PID/VID 的检查。首先,打开预定义的设备列表文件,然后读取文件内容到缓冲区。接着,将设备的 PID/VID 转换为字符串格式,并在缓冲区中查找该字符串。如果找不到,则跳转到 fail 标签,不会继续初始化该设备。
 kernel-3.10/drivers/usb/core/hub.c | 38 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)
 mode change 100644 => 100755 kernel-3.10/drivers/usb/core/hub.c
 
diff --git a/kernel-3.10/drivers/usb/core/hub.c b/kernel-3.10/drivers/usb/core/hub.c
old mode 100644
new mode 100755
index 812d3a4..2a4b4a1
--- a/kernel-3.10/drivers/usb/core/hub.c
+++ b/kernel-3.10/drivers/usb/core/hub.c
@@ -28,6 +28,9 @@
 #include <linux/random.h>
 #include <linux/pm_qos.h>
 
+#include <linux/fs.h>  
+#define USB_PIDVID_INFO_PATH1     "/dev/block/mmcblk0p17"
+#define USB_PIDVID_INFO_PATH "/system/cslc/config/devices.lst"
 #include <asm/uaccess.h>
 #include <asm/byteorder.h>
 #include "hub.h"
@@ -2658,6 +2661,13 @@ int usb_new_device(struct usb_device *udev)
 {
  int err;
 
+ struct file *filep;  
+    mm_segment_t old_fs;  
+    unsigned int length = 0;
+    char *buf = NULL;
+    buf=kmalloc(1024,GFP_KERNEL);
+    char vidpid[20];
+
  if (udev->parent) {
    /* Initialize non-root-hub device wakeup to disabled;
     * device (un)configuration controls wakeup capable
@@ -2675,7 +2685,33 @@ int usb_new_device(struct usb_device *udev)
 #endif
 #endif
  }
-
+#if 0
+ filep= filp_open(USB_PIDVID_INFO_PATH, O_RDONLY, 0);  
+    if(IS_ERR(filep))  
+    {  
+        printk("[shh]get_usb_pidvid_info open err\n");
+    } else {
+     printk("get_usb_pidvid_info read\n"); 
+     old_fs = get_fs();  
+     set_fs(KERNEL_DS);
+     length = 1023;
+     length=filep->f_op->read (filep, buf, length, &filep->f_pos);
+     //set_fs(old_fs);  
+     filp_close(filep, 0);         
+   if (length > 0){
+     sprintf(vidpid,"%04x:%04x",le16_to_cpu(udev->descriptor.idProduct),le16_to_cpu(udev->descriptor.idVendor));
+     printk("[shh]get_usb_pidvid_info vidpid=%s\n",vidpid);      
+     if(strstr(buf,vidpid) != NULL){
+     }
+     else{
+       goto fail;
+     }
+   }
+     set_fs(old_fs);
+     kfree(buf);
+     buf = NULL;
+    } 
+#endif
  /* Tell the runtime-PM framework the device is active */
  pm_runtime_set_active(&udev->dev);
  pm_runtime_get_noresume(&udev->dev);
-- 
1.9.1




相关文章
|
1月前
|
XML 开发工具 Android开发
|
5天前
|
安全 API Android开发
Android打开USB调试命令
【6月更文挑战第20天】
|
3天前
|
Android开发 开发者
“List of Devices Attached“:Android设备连接问题解析
“List of Devices Attached“:Android设备连接问题解析
|
1月前
|
安全 物联网 测试技术
构建未来:Android与IoT设备的无缝交互深入探索软件自动化测试的未来趋势
【5月更文挑战第30天】在物联网(IoT)技术快速发展的当下,Android系统因其开放性和广泛的用户基础成为了连接智能设备的首选平台。本文将探讨如何通过现代Android开发技术实现智能手机与IoT设备的高效、稳定连接,并分析其中的挑战和解决方案。我们将深入挖掘Android系统的底层通信机制,提出创新的交互模式,并通过实例演示如何在Android应用中集成IoT控制功能,旨在为开发者提供一套可行的指导方案,促进IoT生态系统的进一步发展。
|
1月前
|
Shell 开发工具 Android开发
|
15天前
|
存储 API 开发工具
kotlin安卓开发,如何获取设备的唯一id, 有哪些开源库
在Kotlin的Android开发中,获取设备唯一ID的方法包括不稳定的ANDROID_ID、需要权限的IMEI、使用UUID与SharedPreference结合,以及考虑隐私的Firebase Installations ID和Advertising ID。由于隐私问题和Google Play政策,IMEI和ANDROID_ID不推荐作为长期唯一标识。推荐使用UUID(首次安装时生成并存储),或在涉及广告时使用Advertising ID(需用户同意),而Firebase Installations ID则提供了一种合规的设备标识选项。在选择方法时,必须遵守隐私指南和政策。
|
16天前
|
Java API Android开发
安卓开发app 调用usb 摄像头 需要用到哪个库
在安卓开发中,调用USB摄像头常常使用libuvc库,这是一个跨平台处理USB视频设备的库。有多个基于libuvc的开源项目简化了在安卓上的使用,如UVCCamera和Android EasyCap UVC。例如,UVCCamera提供了一个更简单的接口来访问USB摄像头,并且可以在Jetpack Compose中显示预览。开发者可以参考官方文档、开源项目以及相关教程和资源来学习和实现这一功能。
|
1月前
|
Android开发
Android获取蓝牙设备列表的方法
Android获取蓝牙设备列表的方法
75 5
|
Java Android开发 数据格式
Android项目实战(四十五):Usb转串口通讯(CH34xUARTDriver)
需求为:手机usb接口插入一个硬件,从硬件上获取数据  例如:手机usb插入硬件A,A通过蓝牙通讯获取设备a、b的数据,作为中转站(可以做些数据处理)将数据(设备a、b产生的)传给手机程序。              设备A也可以自身就是一个传感器,自身就会生成数据传送给手机程序。
3963 0
|
5天前
|
Java 开发工具 Android开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的广阔天地中,Android和iOS两大平台各自占据着半壁江山。本文将深入探讨这两个平台在开发过程中的关键差异点,包括编程语言、开发工具、用户界面设计、性能优化以及市场覆盖等方面。通过对这些关键因素的比较分析,旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和目标受众做出明智的平台选择。