Android 深入系统完全讲解(12)

news2024/12/23 23:15:45

11 跟踪一个服务,直接找到驱动实现

如果说我自己学习整个系统,直到底层驱动的方法,我想说的就是我常用的就是跟踪震动这个模块,而为什么是这个,主要是简单,但是又是从上到下都具备,对于学习系统框架是最好的路径。

于是今天我们跟踪下这个代码,震动在 APP 中的使用方式。

在这里插入图片描述
代码中这样使用:
private Vibrator vibrator;
vibrator=(Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
vibrator.vibrate(2000);
我们跟踪 getSystemService 代码,找到对应服务

在这里插入图片描述
这样子我们就要找初始化服务的地方,找下 SystemServiceRegistry 里面的静态代码块,可以看到有这段:

在这里插入图片描述
然后我们看 SystemVibrator 文件实现,
在这里插入图片描述
这个代码就是找到震动服务的代理,于是我们找下服务即可 VibratorService.java,这个就是我
们调用的时候真正实现的地方。
在这里插入图片描述
然后跟下去,找到往下走的代码:
在这里插入图片描述
调用到这个,就知道走下去了,因为标记了 native,说明是个本地方法,我们去找下:在这里插入图片描述
我们通过检索找到代码:
在这里插入图片描述
在这里面又想讲下,观察这个 cpp 文件,找到注册方法,然后搜索这个注册方法:在这里插入图片描述
会检索到这个/frameworks/base/services/core/jni/onload.cpp,这个是在虚拟机启动的时候,初
始化的所有系统相关的 jni 对应表,这个可以多看看。在这里插入图片描述
要找它编译到哪里,从它目录往上找,找到一个 bp 或者 mk 即可。这里是

在这里插入图片描述
我们找到具体的实现地方,一般而言文件名或者函数名是一致的,我们这里可以看到是
hardware\libhardware\modules\vibrator 的 vibrator.c,我们打开看看这个代码:
定义了挂载位置:
static const char THE_DEVICE[] = “/sys/class/timed_output/vibrator/enable”;

最后我们就要找到真正驱动编写的地方,实际中能够通过这个路径,定位到驱动实现,这里
我用老代码演示,手头没有驱动代码:
static int __init vibrator_init(void)
{
return creat_vibrator_sysfs_file(); 这块会注册操作节/sys/class/timed_output/vibrator/enable";
}

static void __exit vibrator_exit(void)
{
remove_vibrator_sysfs_file();
}
module_init(vibrator_init);
module_exit(vibrator_exit);
此处在 creat_vibrator_sysfs_file 则会去进行注册设备,将设备的处理函数和设备进行绑定,
此时 open(THE_DEVICE, O_RDWR);
nwr = sprintf(value, “%d\n”, timeout_ms);
ret = write(fd, value, nwr);
这样子处理是,write 函数会对应到此设备进行注册的写入函数,这时向文件设备写入不同
的值,设备处理函数则会直接引起硬件操作,使得硬件真正跑起来。
这里简单说下__init 这个编译配置属性,这个代表把后面的方法编译到这个段里面,系统启
动后会找到这个段,这个段里面全部是驱动的初始化方法,可以直接遍历,执行系统的驱动
初始化。
这块定位的路线在 kernel 里面。https://www.bbsmax.com/A/qVdeaEY8dP/

在这里插入图片描述
简单说下就是找到这个段里面的方法,依次执行,完成驱动的初始化,系统层是通过 HAL
的统一接口去调用,然后这个 HAL 是 C 代码,然后使用注册 JNI 的方式提供给服务,然后服
务对应有客户端,使用 Binder 进行跨进程调用,完成使用这个驱动的整个回路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OpenCV】拾遗

前言 本篇博客主要是总结OpenCV使用过程中遇到的一些问题,便于以后参考。 以下所有内容均基于VS2015 OpenCV_v4.5.1 及 VS Code MinGW_v4.3.5 CMake_v3.20.0 OpenCV_v4.5.1,前者的配置教程可以参考这个链接,后者的配置教程可以参考这个链…

2022年衣物清洁行业市场报告:洗衣液等四大高增长类目分析

随着人们经济水平的提高以及消费观念的升级,当前个护家清用品逐渐朝品质化、精细化、个性化的方向发展,类目衍生更替更频繁、迭代速度更快。 得益于庞大的人口规模,个护家清产品规模巨大,衣物清洁行业虽增速放缓但仍在个护家清行…

OpenFoam收缩扩张喷管(拉瓦尔喷管)边界条件的设置

简介 收缩扩张喷管(也成拉瓦尔喷管)广泛应用于火箭推进。将其流动特性定性描述如下: (1)当入口流量较小时,不出现雍塞,流速先增大后减小,全程为亚声速。出口压力即为大气压&#x…

金融数学建模——2022年大湾区杯金融数学建模B题(解题思路及部分python代码)

目录 一、概述 二、赛题及解读 1.赛题详情 2.赛题解读 三、解题方法 1.第一问 第一问部分代码 2.第二问 第二问部分代码 3.第三问: 第三问部分代码 4.第四问 三、总结 一、概述 这次比赛是我们队伍第一次参加金融数学建模,尽管在比赛前用2020年…

数据结构与算法4—队列

队列 队列的定义 队列(Queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。队列的修改是依先进先出的原则进行的。队列的基本操作 1.初始化队…

Vue前后端页面下载功能实现演示,Python+flask提供后台下载服务

Vue前后端页面下载功能实现效果图后台下载服务实现前台简单实现[ 文章推荐 ] Python 地图篇 - 使用 pyecharts 绘制世界地图、中国地图、省级地图、市级地图实例详解 效果图 首先看下演示效果。 点文档的话是 html 文档,跳转的预览,点下载的话是压缩包…

pycharm python 程序打包相关

前言 终于入门了python打包这个大话题,将目前学到的技能分享一下。 pycharm启动虚拟环境pipenv 缩小打包 和很多博客说的一样,打包那么大是因为打包了多余的库,因此想要缩小就需要一个干净的,没有多余的库的环境进行打包。也就是…

一文读懂内容生态驱动的“菌落式”增长

健康的内容生态对文娱行业极为重要。本文详细介绍了用内容生态建设驱动用户“菌落式”增长的路径。点击文末“阅读原文”立即观看完整直播回放,并下载演讲文档。内容生态与用户增长内容生态建设与用户增长互为因果。一方面,出圈的内容直接带来用户增长。…

《2022大数据产业年度创新服务企业》榜重磅发布丨金猿奖

‍年度金猿榜单/奖项本届“数据猿年度金猿策划活动——2021大数据产业创新服务企业榜单/奖项”由金猿&数据猿&上海大数据联盟共同推出。‍数据智能产业创新服务媒体——聚焦数智 改变商业2022年下半年度,由数据猿、金猿组委会共同推出的第五届 “年度金猿季…

通过usb利用adb实现android手机和pc机通信

1、 adb forward 原理概述 adb forward 的功能是建立一个转发 如:adb forward tcp:8000 tcp:9000 的意思是,将PC端的 8000 端口收到的数据,转发给手机中的 9000 端口。 但是光执行这个命令还不能转发数据,还需要完成下面两个步骤才…

【主色提取】HSV 颜色空间与 RGB 颜色空间互相转化的公式和代码

系列文章目录 第二章 主色提取之颜色空间转化 目录 系列文章目录 文章目录 前言 一、HSV 和 RGB 颜色空间 二、颜色转化 1. RGB to HSV 2. HSV to RGB 三、 完整代码 前言 HSV 颜色空间和 RGB 颜色空间的转化。 一、HSV 和 RGB 颜色空间 RGB颜色使用的最多&#xff0…

C语言详解【通讯录的实现】

前言: 在之前的学习中我们已经了解了结构体的一些知识,有了之前的知识的储备,在这里我们就可以尝试通讯录的实现。 目录问题描述基本流程前期的准备工作实现过程第一阶段第二阶段第三阶段1.增加联系人2.删除联系人3.打印通讯录4.查找指定联系…

高等数学(第七版)同济大学 习题11-7 个人解答

高等数学(第七版)同济大学 习题11-7 函数作图软件:Mathematica 1.试对曲面Σ:zx2y2,x2y2≤1,Py2,Qx,Rz2验证斯托克斯公式.\begin{aligned}&1. \ 试对曲面\Sigma:zx^…

yolov5+车道线检测

目标检测与车道线检测在自动驾驶以及车辆定位中起着重要的辅助作用,是环境感知中不可缺少的一个部分。基于深度学习的车道线检测方法近年来也在不断的提升,比如论文:Ultra Fast Deep Lane Detection with HybridAnchor Driven Ordinal Classi…

Allegro如何Wavie DRC操作指导

Allegro如何Wavie DRC操作指导 在做PCB设计的时候,会因为规则设置的原因,导致出现很多DRC,不方便检查,Allegro支持直接Waive掉正常DRC,方便检查,如下图 芯片中心需要打过孔方便散热,但是这些过孔的DRC是不需要显示的 具体操作如下 选择Display选择 Waive DRCs

数据结构与算法3—栈

1. 栈的定义 栈,也叫堆栈,是最常用也是最重要的数据结构之一。栈(Stack)是限定仅在表的一端进行插入或删除操作的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。栈操作的特点&am…

【服务器数据恢复】StorNext文件系统数据恢复案例

服务器数据恢复环境: 昆腾系列存储,9个磁盘柜,每个磁盘柜配置24块硬盘。其中8个磁盘柜用于存储数据,1个磁盘柜用于存储元数据。上层使用的是StorNext文件系统。 存储元数据的磁盘柜中24块磁盘的分配情况:8组RAID1阵列1…

1361. 验证二叉树

目录题目思路代码题目 二叉树上有 n 个节点,按从 0 到 n - 1 编号,其中节点 i 的两个子节点分别是 leftChild[i] 和 rightChild[i]。 只有 所有 节点能够形成且 只 形成 一颗 有效的二叉树时,返回 true;否则返回 false。 如果节点…

开发小程序遇到的问题

1、小程序授权定位时报错 原因: 需要授权 scope.userLocation、scope.userLocationBackground 时必须配置地理位置用途说明。 解决: 在app.json中,根据开发文档的提示,将下面的代码添加在与pages同级下 "permission": {…

16年经验的通信行业测试人,后悔入错行了吗?

屏幕前的读者对于一个行业的兴衰有什么看法呢?非常很现实的说,我们所处的行业直接关系着每个人的收入,处于行业的不同生命周期内,我们拿到的钱也会不一样。下面用本人所处的行业举个例子。工作经历初入通信行业从我进入通信行业的…