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

2023-10-31

介绍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

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

# 在源码根目录执行
source build/envsetup.sh
# 加载正确的Java
lunch aosp_x86_64-eng 
cd development/tools/idegen
mm 

croot 
development/tools/idegen/idegen.sh

AS 配置

大小写敏感配置

idea.case.sensitive.fs=true

在这里插入图片描述

VM 配置

在这里插入图片描述

Android Studio 打开项目

在这里插入图片描述

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

vscode 打开项目

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

code frameworks/base/services/core/jni/

配置 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

相关文件:

./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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安卓USB模块源码分析(一)- 准备 的相关文章

  • 菜单在片段的 onCreateOptionsMenu 处多次膨胀调用

    我使用 Fragments 当我切换到嵌套 Fragment 时 它实现了public void onCreateOptionsMenu Menu menu MenuInflater inflater 当我到达该嵌套片段时 我的菜单会多次膨
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 使用 PhoneGap 使 Android 应用程序易于访问(对于残障人士)

    有人有过使用 PhoneGap 使 Android 应用程序可访问的经验吗 至少我们需要使我们的应用程序符合第 508 条规定 我尝试实现一些标准的辅助功能 文本框标签 向 div 添加标题属性等 但是 当在 Android 中使用 Tal
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • 在 Android 中调整可绘制对象的大小

    我正在为进度对话框设置一个可绘制对象 pbarDialog 但我的问题是我想每次调整可绘制的大小 但不知道如何调整 这是一些代码 Handler progressHandler new Handler public void handleM
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • Android:AsyncTask ProgressDialog 将不会在 ActivityGroup 中打开

    我试图在轮询我的服务器时打开一个进度对话框 该类是一个 ActivityGroup 因为它嵌套在选项卡栏中 为了将视图保持在框架内 需要 ActivityGroup 这是我的 ActivityGroup 类的声明 public class
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • Office Tool Plus软件运行错误,缺少.net

    2021 9 29更新 看了Office Tool Plus官方文档之后 发现有了一个新版本 with runtime 版本 这个版本已经包含了 net组件 不用另外安装 net了 如果遇到Office Tool Plus软件运行错误 缺少
  • Retrofit Interceptor网络拦截器

    1 Interceptor interface Interceptor Throws IOException class fun intercept chain Chain Response interface Chain fun requ
  • python压缩数据长度_Python错误:解压缩需要一个长度为4的字符串参数,但这是吗?...

    我正在使用python 2 7 我不明白为什么这行不通 有人可以给我提示 gt gt gt from struct import unpack gt gt gt T2 u xb6 u x01 u x59 u x59 gt gt gt T2
  • Anaconda Scrapy 安装

    anaconda安装 anaconda官网下载下载地址https www anaconda com distribution 安装anaconda没有什么注意事项 只要更改一下安装目录即可 其他的都可以默认下一步 安装成功后 配置一下环境变
  • 在UNIX \ Linux终端中的可视化磁盘空间和磁盘使用情况小工具 - Vizex

    在UNIX Linux终端中的可视化磁盘空间和磁盘使用情况小工具 Vizex 背景 什么是Vizex Linux终端上安装方法 如何使用Vizex 1 vezix 2 vizexdf 3 可以通过 help 使用command调用optio
  • 第一章 命题逻辑 1.4 析取范式与合取范式

    1 4 析取范式与合取范式 这一小节内容较多 我们由浅入深的来 首先要明白简单析取式和简单合取式的定义 定义 我们将命题变项及其否定统称作 文 字 red 文字 文字 简
  • c语言中stat函数,C语言:stat,fstat和lstat函数

    这三个函数的功能是一致的 都用于获取文件相关信息 但应用于不同的文件对象 对于函数中给出pathname参数 stat函数返回与此命名文件有关的信息结构 fstat函数获取已在描述符fields上打开文件的有关信息 lstat函数类似于st
  • Seata导致本地事务@Transactional失效解决方案

    原理 把spirng本地事务数据源设置为seata代理数据源 核心代码 在seata配置类中加入 Bean txManager public DataSourceTransactionManager txManager DataSource
  • JAVA中自定义异常方法抛出异常

    开发工具与关键技术 JAVA中的自定义异常 作者 邓崇富 撰写时间 2019 年 4 月 26 日 一 通过throw抛出异常 使用java内置的异常类可以描述在编程时出现的大部分异常情况 除此之外 用户只需要集成Exception类即可自
  • Docker开启远程进程服务以及VSCode、Idea等IDE连接使用远程

    Docker开启远程进程服务以及VSCode Idea等IDE连接使用远程 Docker远程服务 开发环境大多使用的的是windows系统 服务器运行环境一般采用Linux系统 这时候生成镜像时用到远程连接Docker服务 一 开启Dock
  • win10 nvprof的性能分析表

    交叉访问是全局内存中最糟糕的访问模式 因为它浪费总线带宽 使用多个线程块对基于交叉的全局内存访问重新排序到合并访问 https mp weixin qq com s h2XKth1bTujnrxyXTJ2fwg lt lt
  • Spring Boot 学习研究笔记(二十)-docker部署SpringBoot使用nginx配置域名

    Docker发布项目使用Nginx配置域名 步骤如下 第一步 在Docker 中部署SpringBoot JAR 包 详情请查看 Spring Boot 学习研究笔记 十二 Dcoker 中部署SpringBoot jar包 第二步 配置域
  • metric_logger小解

    今天看见这个一个函数metric logger 通过搜索资料发现他是utils中的一个MetricLogger类 可称它为度量记录器 因为这种都是自定义的 那我只说说我遇见的这个趴 我们先来看看他初始化里有什么 def init self
  • VMware14安装虚拟机出错——Intel VT-x处于禁用状态

    解决方法 进入BIOS 模式中 开启Intel VT x 具体步骤 win10 1 打开设置 搜索 高级启动 选择更改高级启动选项设置 然后点击立即启动 2 启动后 在蓝屏界面中选择疑难解答 gt 高级选项 gt UEFI固件设置 gt 选
  • 【matlab图像处理】插值方法

    中国史之 懿王攻犬戎 周懿 yi 王攻打犬戎的战争 周懿王在位时期 西周衰弱 戎族不断入侵周朝 一度打到镐 今陕西西安 岐 今陕西岐县 等地 懿王被迫迁都槐里 今陕西兴平县 周懿王派虢 guo 公率军北伐犬戎 企图收复失地 但不幸战败 来源
  • 抽象类、模板方法

    抽象类理解为一种模板 模板模式 使用 package com example demo author dc version 1 0 date 2023 03 28 12 55 public abstract class DayPlan pu
  • PMOS开关管的选择与电路图

    中心议题 探讨 解决方案 选用N沟道还是P沟道 确定额定电流 确定热要求 首先要进行MOSFET的选择 MOSFET有两大类型 N沟道和P沟道 在功率系统中 MOSFET可被看成电气开关 当在N沟道MOSFET的栅极和源极间加上正电压时 其
  • centos7 配置网络_linux入门系列11--Centos7网络服务管理

    通过前面文章的学习已经掌握了Linux系统配置管理的知识 本文讲解Centos7网络配置知识 Linux要对外提供服务 需要保证网络通信正常 因此需要正确配置网络参数 本文将讲解如何使用Network Manager配置网络参数 管理网络会
  • MATLAB中复数矩阵的转置、共轭及共轭转置

    参考博客 https blog csdn net zhaozhichenghpu article details 79162287 MATLAB中生成一个复数矩阵 MATLAB中复数矩阵的共轭用conj A MATLAB中复数矩阵的转置 A
  • 安卓USB模块源码分析(一)- 准备

    介绍USB服务在Android服务体系中的位置 源码的位置及使用AndroidStudio 查看USB模块FWK的配置方式 Windows环境准备 WSL2安装及AOSP源码下载编译 shimo im 安卓服务概览 Android 主要有如