android11 屏蔽usb通过otg转接口外接鼠标设备

硬件平台:QCS6125

软件平台:Android11

需求:Android设备通过接usb转接线连接鼠标功能屏蔽。

考虑到屏蔽的层面可以从两个层面去做,一个是驱动层面不识别,一个就是Android系统层面不识别加载,本篇只讲后者。

1、分析接入鼠标时候的日志:

cpp 复制代码
07-17 11:49:31.326124     0     0 I msm-dwc3 4e00000.ssusb: DWC3 exited from low power mode 
--------- switch to main 
07-17 11:49:31.519494  3131  3310 E AntiCheck: [SECSDK] pid 3309, TracePID is 0 
--------- switch to kernel
07-17 11:49:31.557661     0     0 I usb 1-1 : new low-speed USB device number 2 using xhci-hcd
07-17 11:49:31.715120     0     0 I usb 1-1 : New USB device found, idVendor=046d, idProduct=c077
07-17 11:49:31.715145     0     0 I usb 1-1 : New USB device strings: Mfr=1, Product=2, SerialNumber=0
07-17 11:49:31.715162     0     0 I usb 1-1 : Product: USB Optical Mouse
07-17 11:49:31.715179     0     0 I usb 1-1 : Manufacturer: Logitech
07-17 11:49:31.740283     0     0 I input   : Logitech USB Optical Mouse as /devices/platform/soc/4e00000.ssusb/4e00000.dwc3/xhci-hcd.0.auto/usb1/1-1/1-1:1.0/0111:0003:046D:C077.0001/input/input6
07-17 11:49:31.740748     0     0 I hid-generic 0111: 0003:046D:C077.0001: input: USB HID v1.11 Mouse [Logitech USB Optical Mouse] on usb-xhci-hcd.0.auto-1/input0
--------- switch to main 
07-17 11:49:31.868222  1445  1557 D EventHub: No input device configuration file found for device 'Logitech USB Optical Mouse'.
07-17 11:49:31.869328  1445  1557 I EventHub: usingClockIoctl=true
07-17 11:49:31.869380  1445  1557 I EventHub: New device: id=7, fd=306, path='/dev/input/event6', name='Logitech USB Optical Mouse', classes=0x80000008, configuration='', keyLayout='', keyCharacterMap='', builtinKeyboard=false, 
07-17 11:49:31.871511  1445  1557 I InputReader: Device added: id=8, eventHubId=7, name='Logitech USB Optical Mouse', descriptor='45dd693031521900f038547baa8709cf60c2611f',sources=0x00002002
07-17 11:49:31.874726  3131  3151 I ez.app.launche: Background young concurrent copying GC freed 777596(44MB) AllocSpace objects, 0(0B) LOS objects, 20% free, 91MB/115MB, paused 202us total 119.147ms

可以看到,底层驱动识别后,EventHub也识别了设备一些类型属性,

New device: id=7, fd=306, path='/dev/input/event6', name='Logitech USB Optical Mouse', classes=0x80000008, configuration='', keyLayout='', keyCharacterMap='', builtinKeyboard=false,

遂计划从这里入手:

在EventHub::openDeviceLocked方法中,有对input设备类型的判断和加载,日志显示的是上文标红的类型,查看EventHub.h中设备类型的定义,发现该类型就是鼠标的类型:

/* The input device is a cursor device such as a trackball or mouse. */

INPUT_DEVICE_CLASS_CURSOR = 0x00000008,

2、跟代码逻辑,屏蔽识别该类型的代码段,具体修改如下:

java 复制代码
diff --git a/services/inputflinger/reader/EventHub.cpp b/services/inputflinger/reader/EventHub.cpp
index a1514af66..f726979be 100644
--- a/services/inputflinger/reader/EventHub.cpp
+++ b/services/inputflinger/reader/EventHub.cpp
@@ -67,6 +67,9 @@ using android::base::StringPrintf;
 
 namespace android {
 
+// class type we do not want to support
+static uint32_t NOT_SUPPORT_CLASS_TYPE = 0;
+
 static constexpr bool DEBUG = false;
 
 static const char* DEVICE_PATH = "/dev/input";
@@ -1331,7 +1334,8 @@ status_t EventHub::openDeviceLocked(const char* devicePath) {
     // See if this is a cursor device such as a trackball or mouse.
     if (test_bit(BTN_MOUSE, device->keyBitmask) && test_bit(REL_X, device->relBitmask) &&
         test_bit(REL_Y, device->relBitmask)) {
-        device->classes |= INPUT_DEVICE_CLASS_CURSOR;
+        //device->classes |= INPUT_DEVICE_CLASS_CURSOR;
+        device->classes &= NOT_SUPPORT_CLASS_TYPE;
     }
 
     // See if this is a rotary encoder type device.

将设备类型或的标志位标为不识别的一个类型即可,后文代码识别到class为0,会不走加载流程:

java 复制代码
    // If the device isn't recognized as something we handle, don't monitor it.
    if (device->classes == 0) { 
        ALOGV("Dropping device: id=%d, path='%s', name='%s'", deviceId, devicePath,
              device->identifier.name.c_str());
        delete device;
        return -1;
    }    

从而不挂载,完成。

Mark~~~

相关推荐
CYRUS_STUDIO32 分钟前
LLVM 全面解析:NDK 为什么离不开它?如何亲手编译调试 clang
android·编译器·llvm
CYRUS_STUDIO38 分钟前
静态分析神器 + 动态调试利器:IDA Pro × Frida 混合调试实战
android·逆向
g_i_a_o_giao3 小时前
Android8 binder源码学习分析笔记(一)
android·java·笔记·学习·binder·安卓源码分析
翻滚丷大头鱼3 小时前
android 四大组件—BroadcastReceiver
android
人生游戏牛马NPC1号4 小时前
学习 Android (二十) 学习 OpenCV (五)
android·opencv·学习
2501_916008894 小时前
uni-app iOS 日志与崩溃分析全流程 多工具协作的实战指南
android·ios·小程序·https·uni-app·iphone·webview
文 丰4 小时前
【AndroidStudio】官网下载免安装版,AndroidStudio压缩版的配置和使用
android
WillWolf_Wang4 小时前
Linux 编译 Android 版 QGroundControl 软件并运行到手机上
android·linux·智能手机
fatiaozhang95274 小时前
数码视讯TR100-OTT-G1_国科GK6323_安卓9_广东联通原机修改-TTL烧录包-可救砖
android·xml·电视盒子·刷机固件·机顶盒刷机
撬动未来的支点4 小时前
【Android】内核及子系统
android