• 安卓USB模块源码分析(一)- 准备


    介绍USB服务在Android服务体系中的位置,源码的位置及使用AndroidStudio 查看USB模块FWK的配置方式。

    Windows环境准备

    WSL2安装及AOSP源码下载编译 (shimo.im)

    安卓服务概览

    Android 主要有如下7类服务:

    1. 核心服务,如ActivityManagerService,WindowManagerService
    2. 通信相关服务,如:Wifi相关服务,Telephone相关服务;
    3. 系统功能相关服务,如:AudioService,MountService,UsbService
    4. BatteryService,VibratorService
    5. 相对独立的服务:EntropyService,DiskStatsService,Watchdog;
    6. 蓝牙服务
    7. UI相关服务,如:状态栏服务,通知管理服务。

    源码分布

    • FWK/API 即 Java层api:
      • frameworks/base/core/java/android/hardware/usb/
      • frameworks/base/core/java/com/android/internal/usb
    • Service 层: Java 及JNI实现
      • frameworks/base/services/usb (Java)
      • frameworks/base/services/core/jni/ (cpp)
      • system/core/libusbhost ©
    • HAL(硬件抽象层) 接口定义 :
      • hardware/interfaces/usb
    • 内核层:
      • bionic/libc/kernel/uapi/linux/usb

    阅读工具准备

    AS项目文件生成

    过滤规则编辑,在aosp源码根目录下添加名为 excluded-paths 的文件

    # 几个根目录的规则
    ^art/.*
    ^packages/.*
    ^bootable/.*
    ^build/.*
    ^cts/.*
    ^dalvik/.*
    ^developers/.*
    ^external/.*
    ^platform_testing/.*
    ^pdk/.*
    ^sdk/.*
    ^system/.*
    ^test/.*
    # platform-compat中有注解的类
    ^tools/(?!(platform-compat))
    ^development/.*
    ^device/.*
    ^prebuilts/*
    # 这里我们查看这两个模块,所以注释掉
    #^libcore/.*
    #^frameworks/.*
    
    # 关于out其他的一些规则
    #^out/*
    ^out/soong/.intermediates/.*/stubsDir/.*
    ^out/soong/.intermediates/.*/aapt2/.*
    
    #^out/soong/.intermediates/frameworks/base/system-api-stubs-docs/android_common/stubsDir/android/hardware/usb/UsbDevice.java
    ^out/soong/.intermediates/(?!((frameworks)|(libcore)))
    
    # ./out/soong/.intermediates/frameworks/native/libs/binder/libbinder/android_x86_64_shared/gen/aidl/android/os/BnServiceManager.h
    # ^out/soong/.intermediates/.*
    #^out/target/.*
    
    # 根据实际运行情况补充的规则
    # 移除可能的jar
    # 如 ./frameworks/base/tools/aapt2/integration-tests/CommandTests/android-28.jar
    ^frameworks/(?!base)
    ^frameworks/base/tools/aapt2/.*\.jar
    # 排除一干测试文件目录
    ^frameworks/.*/tests
    ^frameworks/base/(?!((core)|(services)))
    ^hardware/interfaces/(?!usb)
    ^bionic/libc/kernel/uapi/linux/(?!usb)
    ^libcore/*
    gradle-wrapper.jar
    ^tools/*
    
    # 对于sdk源码的隐藏,我们exclude掉,以使可以找到真正的源码
    ^libcore/ojluni/annotations
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    执行如下命令生成 android.ipr 文件以供 AndroidStudio 使用:

    # 在源码根目录执行
    source build/envsetup.sh
    # 加载正确的Java
    lunch aosp_x86_64-eng 
    cd development/tools/idegen
    mm 
    
    croot 
    development/tools/idegen/idegen.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    AS 配置

    大小写敏感配置

    idea.case.sensitive.fs=true
    
    • 1

    在这里插入图片描述

    VM 配置

    在这里插入图片描述

    Android Studio 打开项目

    在这里插入图片描述

    打开之后需要一定时间建立索引。

    vscode 打开项目

    我们使用vscode 查看c/c++代码,字节在ubuntu中使用命令行打开对应目录即可,vscode会自动提示安装对应的本地及远程的c++插件,按提示安装即可。

    code frameworks/base/services/core/jni/
    
    • 1

    配置 C++ 的头文件查找地址:
    在这里插入图片描述

    在包含路径中输入:aosp/** (如: /home/hanlyjiang/aosp/**)

    在这里插入图片描述

    参考

    find . -type d -name "usb"
    ./bionic/libc/kernel/uapi/linux/usb
    ./cts/apps/CtsVerifier/src/com/android/cts/verifier/usb
    ./cts/hostsidetests/usb
    ./cts/hostsidetests/usb/SerialTestApp/src/com/android/cts/usb
    ./cts/hostsidetests/usb/src/com/android/cts/usb
    ./cts/tests/tests/usb
    ./cts/tests/tests/usb/src/android/usb
    ./development/host/windows/prebuilt/usb
    ./development/host/windows/usb
    ./device/google/bonito/usb
    ./device/google/bramble/usb
    ./device/google/coral/usb
    ./device/google/crosshatch/usb
    ./device/google/redfin/usb
    ./device/google/sunfish/usb
    ./external/autotest/client/common_lib/cros/cfm/usb
    ./external/crosvm/devices/src/usb
    ./external/kernel-headers/original/uapi/linux/usb
    ./external/linux-kselftest/tools/testing/selftests/drivers/usb
    ./external/ltp/testcases/kernel/device-drivers/usb
    ./external/u-boot/doc/device-tree-bindings/usb
    ./external/u-boot/drivers/usb
    ./external/u-boot/include/dt-bindings/usb
    ./external/u-boot/include/linux/usb
    ./external/u-boot/include/usb
    ./frameworks/base/core/java/android/hardware/usb
    ./frameworks/base/core/java/com/android/internal/usb
    ./frameworks/base/libs/usb
    ./frameworks/base/libs/usb/src/com/android/future/usb
    ./frameworks/base/libs/usb/tests/AccessoryChat/accessorychat/linux/usb
    ./frameworks/base/packages/SystemUI/src/com/android/systemui/usb
    ./frameworks/base/services/usb
    ./frameworks/base/services/usb/java/com/android/server/usb
    ./frameworks/base/tests/UsbHostExternalManagmentTest/AoapTestDevice/src/com/android/hardware/usb
    ./frameworks/base/tests/UsbHostExternalManagmentTest/AoapTestHost/src/com/android/hardware/usb
    ./frameworks/base/tests/UsbHostExternalManagmentTest/UsbHostExternalManagmentTestApp/src/com/android/hardware/usb
    ./frameworks/base/tests/UsbTests/src/com/android/server/usb
    ./hardware/google/pixel/usb
    ./hardware/interfaces/usb
    ./packages/apps/Settings/src/com/android/settings/connecteddevice/usb
    ./packages/apps/Settings/tests/robotests/src/com/android/settings/connecteddevice/usb
    ./packages/services/Car/car-usb-handler/src/android/car/usb
    ./packages/services/Car/tests/CarDeveloperOptions/src/com/android/car/developeroptions/connecteddevice/usb
    ./packages/services/Car/tests/usb
    ./packages/services/Car/tests/usb/AoapHostApp/src/com/google/android/car/usb
    ./packages/services/Car/tests/usb/AoapPhoneCompanionApp/src/com/google/android/car/usb
    ./prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/sysroot/usr/include/linux/usb
    ./test/framework/harnesses/host_controller/utils/usb
    ./test/vts-testcase/fuzz/config/usb
    ./test/vts-testcase/hal/usb
    ./test/vts-testcase/hal/usb/gadget/V1_1/host/src/com/android/usb
    ./test/vts-testcase/hal-trace/usb
    ./tools/test/connectivity/acts/tests/google/usb
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    相关文件:

    ./hardware/interfaces/usb
    ./bionic/libc/kernel/uapi/linux/usb
    
    ./frameworks/base/services/usb
    ./frameworks/base/libs/usb
    
    ./frameworks/base/core/java/android/hardware/usb
    ./frameworks/base/core/java/com/android/internal/usb
    
    ./frameworks/base/services/core/jni/
    com_android_server_UsbAlsaJackDetector.cpp
    com_android_server_UsbDescriptorParser.cpp
    com_android_server_UsbDeviceManager.cpp
    com_android_server_UsbHostManager.cpp
    com_android_server_UsbMidiDevice.cpp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    使用 Python 交互式方法预测股票价格变动概率
    docker运行中的容器新增映射端口
    Java中的Map集合
    AI对室内设计师带来哪些新的机会以及影响 优漫动游
    CompletableFuture异步编程
    CRM、DMP、CDP都是什么?
    ElasticSearch是什么?ElasticSearch在SpringBoot中怎么用?SpringBoot整合ElasticSearch
    金仓数据库KingbaseES客户端编程接口指南-Gokb (4. 执行SQL语句 )
    Apache POl
    【定制项目】【M15 消防安全宣传】主要模块:视频 + 音频 + 图标 + 问答游戏
  • 原文地址:https://blog.csdn.net/mospuito/article/details/126167997