原帖地址:http://www.hzlitai.com.cn/article/ARM11/SYSTEM/Android_USB_develop_lx.html
这是关于USB Mass Storage的架构图。
上图关系为:
StorageManager为Client,MountService是Server,通过AIDL进行进程间通信。
MountService是一个Android Service,由systemserver启动。
Volume Daemon(Vold)是一个Native Service,有Init.c读取init.rc后启动。
MountService和Vold之间通过Socket通信。
NativeDaemonConnector帮助MountService取得Vold的socket,建立通信。
Vold通过NetLink读取Kernel的uevent.
NetLinkManager帮助Vold建立与kernel间的通信
注:对于上图,我准备分以下几个方面阐述:
1. 《AIDL之Jave Framework层实现》
2. 《AIDL之 Native Framework层实现》
3. 《AIDL之Kernel层实现:Binder机制》
4. 《Vold 通信详解》
5. 《Vold Framework层分析》
IPC:进程间通信,就是在不同进程之间传播或交换信息。进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是
共享内存区。但是,系统空间却是“公共场所”,所以
内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的
普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。(
百度百科)
两种解释,WIKI侧重定义;百度百科侧重应用。进程的实体是线程,进程间的通信说到根本就是线程间的通信。这包括以下几个应用场合
l 同一计算机,进程内的多线程通信。(同步、互斥、锁等技术和概念)这点我们一般不做IPC,仅仅按多线程技术处理。
l 同一计算机,进程间的通信。
l 不同计算机,进程间的通信。
RPC:远程过程调用。在计算机科学领域,RPC被认为是IPC的一种。RPC可以在PC内或者通过网络在PC间进行function call。程序员可以将一些核心的API集中到一个程序中,通过RPC,其他需要该核心API的程序可以直接调用,提高代码的共享程度。(
WIKI)
Android中的Service大概有如下三种(据我所知):
Android Application Service:在Android AP开发中常常用到的一种概念。从最直白的视角来看,就是剥离了界面的Activity,它们在很多Android的概念方面比较接近,都是封装有一个完整的功能逻辑实现,只不过Service不抛头露脸,只是默默无声的做坚实的后盾。概括说,这一组件是利用Framework中的AIDL,采用拿来主义实现RPC其更详尽的原理请参看
《深入Android 【三】-组件入门》。
Native Service:在Native Framework这一层中提供支持的一种服务。系统启动阶段解析Init.rc过程中启动Native Service(包括各种用户空间的Daemon),即在Init第一阶段启动。
Android Service:在Java Framework这一层为系统提供支持的一种服务,又称Java Service。由SystemServer启动。即在Init第二阶段启动。
本节中关注是Native service和Android Service。下面介绍他们的启动过程
在system/core/init中init.c读取init.rc等系列配置文件:
启动Native Service:
启动Zygote,Zygote启动sytemserver建立Android service:
SystemServer启动Android Service:
Android
所谓Android 中Service架构指的是Android Service、Native Service是如何联系起来,以及如何与底层进行通信。
在android中,各种××××Manager为AP提供支持,管理系统的运行。××××Manager充当一个Client,××××ManagerService充当Server为××××Manager提供支持。简单,经典的C/S架构。这里的各种××××ManagerService 就是指Android Service,都在Java Framework空间,且都在systemserver进程中。Native Service通过socket或者直接JNI,Android Service提供支持。Native Service在Native Framework(C/C++空间)中。以上有所元素全部在android用户空间中。
至于Native Service与Kernel的通信主要有Function call、poll、select、NetLink等几种
采用Service架构方式是比较标准的做法,即图上蓝色线的部份;红色线的部份为非Service架构式的做法。Service在Android框架里的角色是「存取底层硬件」,往上层的话,可以和应用程序沟通。因此,采用标准的Service做法,好处是在数据存取(data communication)的处理较为系统化。这方面,Android提供了标准的处理架构。图上的「core libraries」即是Service程序代码的实现,也就是,Android应用程序透过JNI(Dalvik)来到Service这一层,再透过Service加载*.so文件;而非标准做法则是让应用程序直接透过JNI来加载*.so文件。
红色的过程,因为不使用Service架构,因此「框架整合」的工作量比较小,甚致大部份的实现都不需要改动框架本身。这样的做法,就有点像是「跳过framework」的方式;相对的,此时应用程序开发者需要考虑的设计议题就比较多。
未来的Android发展趋势,应会以第二种做法为主,即Manager API直接与Native Service沟通,以达到更好的效能表现。
Android AIDL通常每个应用程序都在它自己的进程内运行,但有时需要在进程间传递对象,你可以通过应用程序UI的方式写个运行在一个不同的进程中的service。在Android平台中,一个进程通常不能访问其他进程中的内存区域。所以,他们需要把对象拆分成操作系统能理解的简单形式,以便伪装成对象跨越边界访问。编写这种伪装代码相当的枯燥乏味,好在我们提供了AIDL工具可以来做这件事。
AIDL(Android接口描述语言)是一个IDL语言,它可以生成一段代码,使在一个Android设备上运行的两个进程使用内部通信进程进行交互。如果你需要在一个进程中(例如:在一个Activity中)访问另一个进程中(例如:一个Service)某个对象的方法,你就可以使用AIDL来生成这样的代码来伪装传递各种参数。
AIDL IPC的机制是基于接口的,和COM或Corba类似,但它是轻量级的。它使用代理类在客户端和实现层间传递值。
AIDLAndroid USB Mass Storage
打个比方,你到自动取款机上去取款;你就是客户,取款机就是你的代理;你不会在乎钱具体放在那里,你只想看到足够或更多的钱从出口出来(这就是com的透明性)。你同银行之间的操作完全是取款机代理实现。你的取款请求通过取款机,传到另一头,银行的服务器,他也没有必要知道你在哪儿取钱,他所关心的是你的身份,和你取款多少。当他确认你的权限,就进行相应的操作,返回操作结果给取款机,取款机根据服务器返回结果,从保险柜里取出相应数量的钱给你。你取出卡后,操作完成。取款机不是直接同服务器连接的,他们之间还有一个“存根”,取款机与存根通信,服务器与存根通信。从某种意义上说存根就是服务器的代理。(
AIDLFramework层的架构,如下图:
换而言之,Android就是在传统的C/S架构中加入了一层,实现IPC。图中表明,AIDL类似COM的Proxy/Stub架构。不过是现在android自己的序列化类Pacel。
zwxu2010_764023650 2015-5-21 14:44
用户1634838 2013-10-31 13:55
用户1653723 2013-8-9 15:35
用户1658524 2013-5-14 14:38
用户1658524 2013-5-8 15:36
用户1658524 2013-3-29 11:40
适合驾培、驾考、物流管理系统的车载一体机终端设备形成系列化 立宇泰推出的车载一代(型号)、车载二代(型号)目前已经大批量使用在各大城市的驾培终端升级中,在实际使用场合考验下,工作稳定、可靠,受到用户的好评。车载一代:ARM9处理器+WINCE5.0操作系统,480x272像素4.3寸液晶屏,电阻式触摸屏,支持GPS定位,2G/3G拨号,RFID(TypeA/B)卡的读写,指纹采集(上层实现算法),支持1路串口摄像头,内置2~4GTF存储卡,支持音频播放。车载二代:ARM Cotex-A8处理器+Android2.3操作系统,800x480像素7寸液晶屏,电容式触摸屏,支持GPS定位,2G/3G拨号,RFID(TypeA/B)卡读写,接触式IC卡读写,指纹采集模块(已经实现算法),支持2路模拟摄像头(支持拍照、录像),内置8GTF存储卡,提供外置TF卡接口(最大),支持录音、放音,具备陀螺仪和加速度传感器。 通过与软件方案商、集成商的合作,实现了全新的驾培管理软、硬件体系,促进各大城市的驾培管理变得更加成熟、规范、公平、公正。 http://www.hzlitai.com.cn/product/Tablet-PC/1840.html
用户1658524 2012-11-12 10:23