自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(369)
  • 收藏
  • 关注

原创 android 系统数据业务---打开

2数据业务打开DcTracker的onTrySetupData调用流程图如下,onTrySetupData方法如下,protected boolean onTrySetupData(String reason) { if (DBG) log("onTrySetupData: reason=" + reason); setupDataOnConnectableAp

2017-07-17 19:19:35 1806

原创 android 系统数据业务---打开/关闭概述

数据业务的打开/关闭一般的app都可以实现数据业务的打开和关闭,例如手机里面的设置,数据业务的打开和关闭都是通过TelephonyManager接口来实现,具体的代码如下,设置默认卡的打开和关闭,public void setDataEnabled(boolean enable) { setDataEnabled(SubscriptionManager.getDefaultD

2017-07-17 19:03:12 4829 2

原创 android 系统数据业务---phone进程启动

前言:电话管理是Android 系统支持的重要的业务之一,提供接听电话,收发短信、电话薄、网络事件监听、读取用户信息、2G/3G/4G信号切换等功能。由上到下分为4层, PHONE应用层,Telephony框架实现层,RIL层。本文基于android 5.1,架构图如下,整个框架的调用流程图如下,整个网络虽然涉及到的进程也比较多,但是仔细分析起来关键点没有多少。本文

2017-07-17 19:02:33 1344 1

原创 EventBus分析--事件分发

2 事件分发事件分发一般调用post方法,调用流程图如下,post方法如下,public void post(Object event) { //获取当前线程的postingState PostingThreadState postingState = currentPostingThreadState.get();

2017-07-10 23:26:18 503

原创 EventBus分析--事件的注册

前言:EventBus定义:是一个发布 / 订阅的事件总线。这么说应该包含4个成分:发布者,订阅者,事件,总线。那么这四者的关系是什么呢?很明显:订阅者订阅事件到总线,发送者发布事件。主要用于进程内部组件之间的通信。EventBus是一个单例模式,在一个进程中只有一个对象, getDefault方法如下,public static EventBus getDefault

2017-07-10 23:21:01 612

原创 LocalBroadcastManager机制分析

前言:在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。BroadcastReceiver设计的初衷是从全局考虑可以方便应用程序和系统、应用程序之间、应用程序内的通信。但是有时候只是给进程内部发送广播也需要绕一大圈,有没有简单的方法呢? LocalBroadcastManager。LocalBroadcastManager是Android Supp

2017-07-10 23:09:30 804

原创 android input子系统分析---事件层

3 核心层核心层主要都是在input.c中处理。这里会处理各种Event,各种sensor,触摸事件,按键事件等等。流程图如下,input_event方法直接调用input_handle_event方法进行处理,void input_event(struct input_dev *dev, unsigned int type, unsigned int code, i

2017-07-10 23:03:18 1516

原创 android input子系统分析---驱动层

前言:Input子系统包括标准Linux,Android核心驱动,Android相关设备驱动,G-sensor的设备驱动程序。传感器作为一种输入设备,也是通过input系统把其数据上报给系统,或者通过input系统得到用户的配置信息。这里以传感器为例学习input driver层。Sensor驱动从通过I2C从寄存器中读取sensor值,然后写入/dev/input/目录下对应的文

2017-07-10 22:55:01 1719

原创 android sensor 框架分析---sensor 总结

7 总结Sensor总的框架图如下,形象一点讲,整个Sensor的软件架构就像是水泵抽水灌溉。Service扮演电机的角色,它不断的产生抽水的动力,并将水输送至目的地(APP),驱动扮演泵的角色,它负责完成抽水的必要准备并抽水,HAL则很像是连接电机和泵的管道。driver可以逻辑上分为三部分,一部分支持它本身的功能,i2c读写,中断或者轮询处理。第二部分为sysfs文

2017-07-06 22:29:42 3172

原创 android sensor 框架分析---sensor native分析

6,sensor native分析获取sensor数据除了android上层进行开发之外,还可以直接进行native开发。6.1 开发说明初始化,sensorManager = ASensorManager_getInstance(); //获取AsensorManager对象 //设置加速度的值accelerometer = ASensorManager_getDefault

2017-07-06 22:27:54 4466

原创 android sensor 框架分析---sensor数据流分析

5,sensor数据流分析前面几章做了很多准备和铺垫,这章终于可以分析sensor数据的传输流程了。主要步骤如下,1,服务端通过HAL从驱动文件节点中获取sensor数据。2,服务端通过管道发送数据。3,客户端通过管道读取数据。4,客户端吐出数据。5.1服务端获取数据启动sensor服务之后,就会调用SensorService.cpp的threadLoop方法,该方法首

2017-07-06 22:25:46 4405

原创 android sensor 框架分析---客户端和服务端的连接

4,客户端和服务端的连接在上一章初始化的过程中论述到, SensorManager.cpp会通过binder机制调用sensor服务的getSensorList方法获取sensor的相关信息。那数据是通过binder机制调用服务端获取的吗?其实, java层的SystemSensorManager.java和SensorManager.cpp是对应的;java层的SensorEve

2017-07-06 22:17:46 1778 1

原创 android sensor 框架分析---客户端

3,客户端分析3.1 客户端开发Sensor开发很容易,因为sensor的值都是底层上报的,不需要上层做其他操作。1,获取SensorManager,并且调用其getDefaultSensor方法获取对应的sensor。2,调用SensorManager的registerListener方法进行注册,监听sensor值的变化。3,继承SensorEventListener接口,

2017-07-06 22:12:05 2188 2

原创 android sensor 框架分析---服务端

前言:相对于其他模块, Sensor的API还是非常简洁的.对Sensor的开发也很简单。Android 6.0 系统支持的传感器多达26种,加速度传感器 (accelerometer)、磁力传感器(magnetic field)、方向传感器(orientation)、陀螺仪(gyroscope)、环境光照传感器(light)、压力传感器(pressure)、温度传感器(tempera

2017-07-06 22:04:17 4796

原创 android QMI机制---modem消息发送

7 modem消息发送一般BP侧处理完请求后,都会回应一个响应给AP,一般是用宏QMI_SVC_PKT_PUSH将要作为响应的消息发送出去。qmi_svc_utils.h中QMI_SVC_PKT_PUSH定义如下,#define QMI_SVC_PKT_PUSH(pkt,val,len) ( len == dsm_pushdown_packed(pkt,\ val,\ l

2017-07-03 23:01:48 7242

原创 android QMI机制---Modem消息接收

6 Modem消息接收3.1 消息初始化初始化:qmi_modem_taskàqmii_init()àqmux_init()。qmux_init方法完成对控制通道的初始化后,通过函数qmuxi_process_rx_sig方法开始从共享内存接收数据。调用流程如如下,(void)qmi_set_sig_handler(QMI_QMUX_RX_SIGNAL, qmuxi_p

2017-07-03 22:53:43 5115

原创 android QMI机制---底层消息发送

5 底层消息发送在linux_qmi_qmux_if_server.c文件的入口main()函数,通过一个select来监听所有从linux_qmi_client端发出的socket,通过for循环调用linux_qmi_qmux_if_server_process_client_msg()处理这些监听的消息。进入到函数linux_qmi_qmux_if_server_process_

2017-07-03 22:43:05 5454

原创 android QMI机制---QCRIL消息发送

4 QCRIL消息发送当ril有请求过来时,就会调用ril库的onRequest()方法,此时就会根据当前Qcril注册的函数列表进入到qcril_request_api的onRequest_rid方法中,因此, onRequest_rid方法是QCRIL中的入口方法。调用的流程如如下,qcril_execute_event首先调用qcril_hash_table_lo

2017-07-03 22:38:44 7268

原创 android QMI机制---Qcril初始化流程

3, Qcril初始化流程rild守护进程的rild.c文件中main方法有关加载动态库代码如下,dlHandle = dlopen(rilLibPath, RTLD_NOW);//加载库•••funcs = rilInit(&s_rilEnv, argc, rilArgv);//初始化 实际调用的是RIL_Init方法s_rilEnv结构体定义如下,也就是qcril.c可以

2017-07-03 22:23:30 6618

原创 android QMI机制---QMUX

2.QMUXQMI Multiplexing Protocol(QMUX):QMI的复用协议消息从控制点经过类似socket的线程传到QMI接口后,QMI负责对数据进行封装,加上QMUX消息的头,发送到QMUX层,再通过QMUX层传到共享内存到BP侧。2.1 QMUX消息的格式:整个QMUX控制信道的结构如上图,  I/FType:QMI将控制点数据封装后,发送

2017-07-03 22:16:42 6364

原创 android QMI机制---概论

前言:Qualcomm MSM Interface,作用用于AP和BP侧的交互,通俗说法就是让设备终端TE(可以是手机,PDA,计算机)对高通BP侧的AMSS系统进行操作,如调用函数,读取数据,设置其中的NV项等。QMI的核心称之为QMI框架(QMI Framework),其主要功能包括以下3点:1,连接MSM模块和设备终端,提供一个正交的控制和数据通道。在QMI的消息用有两种定义

2017-07-03 22:12:13 17700 1

原创 android binder机制,注册系统服务---Java层注册系统服务

6 Java注册系统服务Java获取的ServiceManager代理是ServiceManagerProxy,ServiceManagerProxy的addService如下,public void addService(String name, IBinder service, boolean allowIsolated) throws RemoteExce

2017-06-12 22:15:58 592

原创 android binder机制,注册系统服务---结果返回

5结果返回用户态的Servicemanager进程发送的是BINDER_WRITE_READ命令,需要处理返回的BC_REPLY命令。并且只有写操作,没有读操作,即read_size为0。5.1 servicemanager进程binder驱动1,首先binder驱动的binder_ioctl方法处理BINDER_WRITE_READ命令,前面已经论述了,在此就不赘述。2, b

2017-06-12 22:12:27 692

原创 android binder机制,注册系统服务---服务端servicemanager

4服务端servicemanagerservice_manager.c的svcmgr_handler有关注册和获取服务的处理如下,case SVC_MGR_GET_SERVICE: case SVC_MGR_CHECK_SERVICE: s = bio_get_string16(msg, &len); if (s == NULL) {

2017-06-12 22:07:40 1089

原创 android binder机制,注册系统服务--服务端servicemanager binder驱动

3 服务端servicemanager binder驱动前面分析过Servicemanager进程中的main方法步骤,1,调用binder_open方法打开binder驱动。2,调用binder_become_context_manager方法注册成为binder服务的大管家。3,调用binder_loop方法进入无限循环, 处理binder驱动发来的请求。 其中bind

2017-06-12 22:03:29 767

原创 android binder机制,注册系统服务---客户端Binder驱动

2, 客户端Binder驱动在Binder驱动层,和ioctl()相对的动作是binder_ioctl()函数。binder_ioctl()函数负责在两个进程间收发IPC数据和IPC reply数据。ioctl(文件描述符,ioctl命令,数据类型)(1) 文件描述符,是通过open()方法打开Binder Driver后返回值;(2) ioctl命令和数据类型是一体的,不同的命令

2017-06-12 21:57:51 599

原创 android binder机制,注册系统服务---native客户端

前言:前面的准备工作终于完成差不多了,长舒一口气,看下服务的注册。1,native客户端surfaceflinger是android系统中和图形相关的进程,由init进程通过解析init.rc文件创建,对应的文件目录是frameworks/native/services/surfaceflinger。init.rc启动surfaceflinger配置如下,service

2017-06-12 21:50:28 587

原创 android binder机制---Java层获取ServiceManager

2, Java层获取ServiceManagerbinder在framework层,采用JNI技术来调用native(C/C++)层的binder架构,从而为上层应用程序提供服务。还是直接从方法的注册和获取来解析。Context中的addService方法首先必须获取ServiceManager代理,然后调用代理的addService方法。ServiceManager的addSer

2017-06-12 20:24:44 907

原创 android binder机制---native获取ServiceManager

前言:无论是Java层还是native层,Binder跨进程首先必须获取ServiceManager对象。当然Java层和native层分别有ServiceManager对象。1,native获取ServiceManagerC++(native) 获取Service Manager是通过defaultServiceManager()方法来完成,当进程注册服务(addSe

2017-06-12 20:17:20 1031

原创 android binder机制---Binder驱动

4 Binder驱动binder机制到底是如何从代理对象找到其对应的binder实体呢?其实,在binder驱动层,还有个与之相对的结构,叫做binder_proc。示意图如下,Binder驱动是Android专用的,但底层的驱动架构与Linux驱动一样。binder驱动在以misc设备进行注册,作为虚拟字符设备,没有直接操作硬件,只是对设备内存的处理。主要是驱动设备的

2017-06-12 20:05:40 1402 1

原创 android binder机制---ProcessState和线程池

3, ProcessState和线程池     Android系统启动完成后,ActivityManager, PackageManager等各大服务都运行在system_server进程,app应用需要使用系统服务都是通过binder来完成进程之间的通信。     对于binder线程是如何管理的呢,又是如何创建的呢?其实无论是system_server进程,还是app进程,都是

2017-06-12 19:54:20 9692

原创 android binder机制---servicemanager进程启动

2, servicemanager进程启动ServiceManager是android系统中Binder IPC通信过程中的守护进程,主要负责系统服务的注册和获取。ServiceManager进程是init进程通过init.rc脚本里的配置文件启动的。init.rc有关的配置如下,service servicemanager /system/bin/servicemanager

2017-06-12 19:42:23 790

原创 android binder机制---概述

1,概述简单地说,Binder是Android平台上的一种跨进程交互技术。在Android的应用层次上,基本上已经没有过去的进程概念了。然而在实现层次,它毕竟还是要建构在一个个进程之上的。实际上,在Android内部,那些支撑应用的组件往往会身处于不同的进程,那么应用的底层必然会牵涉大量的跨进程通信。为了保证通信的高效性,Android提供了Binder机制。从进程角度来看IPC机

2017-06-12 19:27:16 732

原创 SEandroid 安全机制---进程安全上下文

3进程安全上下文前面一篇文章分析了文件安全上下文关联过程。但是在SEAndroid中,除了要给文件关联安全上下文外,还需要给进程关联安全上下文,因为只有当进程和文件都关联安全上下文之后,SEAndroid安全策略才能发挥作用。也就是说,当一个进程试图访问一个文件时,SEAndroid会将进程和文件的安全上下文提取出来,根据安全策略规则,决定是否允许访问。     在传统的Linux

2017-06-10 09:23:10 1386

原创 SEandroid 安全机制---文件安全上下文

2文件安全上下文SEAndroid是一种基于安全策略的MAC安全机制。这种安全策略实施在主体和客体的安全上下文之上。这意味着安全策略在实施之前,SEAndroid安全机制中的主休和客体是已经有安全上下文的。在SEAndroid安全机制中,主体一般就是进程,而客体一般就是文件。文件的安全上下文的关联有不同的方式。本文主要分析文件安全上下文的设置过程。虽然android系统中有各种

2017-06-10 09:16:07 1092

原创 SEandroid 安全机制---整体框架

前言:在Java层和native守护进程socket通信 一文中,新建了一个名为myguard的socket。然后修改了5个权限相关的文件,1,在device/qcom/sepolicy/common/ 路径下添加myguard.te文件,内容如下,#myguardallow myguard_socket myguard_socket:sock_file create_file_

2017-06-10 09:03:34 1149 1

原创 android 6.0 Java层和native守护进程socket通信

在android 系统中,有大量的地方使用socket进行通信,例如phone进程的RIL.java和rild守护进程之间的通信。因此,本文实现一个简单的系统apk和native守护进程,实现socket通信。本篇文章基于android 6.0。目标:1,写一个简单的系统apk,native守护进程;2,实现socket通信1, 概念Java主要代码client = n

2017-06-10 08:35:51 2840

原创 android gps机制分析--定位数据传输到Java

7 gps数据从HAL传输到Java上面UlpLocation类型的mLocation作为参数传入,这里传递的还是UlpLocation类型的数据,不是hal层使用的GpsLocation类型,因此我们看一下UlpLocation类型的数据转换成GpsLocation类型的数据的过程:hardware/qcom/gps/loc_api/libloc_api_50001/loc.cp

2017-05-23 18:08:16 2480

原创 android gps机制分析--定位数据HAL处理

6 gps数据在HAL中处理reportPosition的实现,前面提到的包含了position信息的qmiLocEventPositionReportIndMsgT_v02数据类型作为参数传入:解析出qmiLocEventPositionReportIndMsgT_v02里的相应的数据,填充到UlpLocation结构中,以下是经纬度,填充到UlpLocation l

2017-05-21 20:56:05 2890 1

原创 android gps机制分析--之八

5 gps数据从modem到AP从loc_api层的locClientIndCb开始走起:vendor/qcom/opensource/location/loc_api/loc_api_v02/loc_api_v02_client.clocClientIndCb的主要作用是根据indications的类型,将解析出来的数据发给相应的callback处理:首先获取me

2017-05-21 20:32:59 3146

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除