2.3 设 备管理守护进程层
设备管理守护进程位于 Android 系统中的 HAL 层(即硬件抽象层),介于设备管理服务和设备功能动态库之间,通过Android Local Socket 与上层的设备管理服务 进 行数 据 通 信,向下层则调用相应设备功能动态库提供的接口,起着信息枢纽的作用。通过对整个设备管理框架的功能划分,设备管理守护进程需要实现如下功能:
1)通过 Local Socket 与上层的设备管理服务层进行Socket数据通信,通过发送心跳包检测链路机制监测和更新上层客户端的连接情况,准确接收设备管理服务层发送的命令包并解析命令格式。
2)根 据设备管理服务中规定的命令格式,从接收到的命令中解析得到调用的目标设备名称,这里假设是“GPIO”设备,如果是第一次调用该设备,则首先加载该设备的功能动态库,然后调用设备功能动态库中的初始化接口 XXX_init(其 中“XXX” 是 从 命 令 中 解 析 得 到 的 设 备 名 称),例 如GPIO_init,进 行初始化工作,否则直接调用该设备功能动态库 的 命 令 处 理 接 口 XXX_process Cmd,例 如 GPIO_processCmd,进 行处理。
3)由 于有些功能接口存在获取响应数据的需求,这要求设备管理守护进程能够接收来自设备功能动态库的响应数据并向设备管理服务层进行传递,传递的数据封装格式定义为:设 备 名 称
+'@' + 功 能 接 口 名 称 +'#' + 有 效 数 据。以
“AUDIO@Get Main Volume#80” 为 例, “AUDIO” 表 示 音 频 管 理设备名称,“Get Main Volume”表示功能接口名称,即获取系统主音量,“80”表示有效数据,即音量值。
4) 能稳定地为设备管理服务层提供 Socket 连接的服务端,数据处理及时、可靠。
2.4 设备功能动态库层
在 Linux 系统中,Linux 内核提供了用户空间与内核空间进行交互的一组接口,即系统调用。这些系统调用接口允许应用程序受限地访问硬件设备。系统调用是应用程序访问内核空间的唯一手段;除了异常和陷入以外,它们是访问内核唯一的合法入口[5].
设备管理框架中采用设备功能动态库和设备管理守护进程分离的设计思想。设备功能动态库主要封装与内核设备驱动进行交互的接口,应用程序向硬件模块传递的命令也将到达设备功能动态库。即设备功能动态库向上层提供接口给设备管理守护进程调用,通过 Linux 系统调用向下层调用内核设备驱动。
设备功能动态库层向下层调用内核设备驱动的基本过程如下:
1)在 设备命令处理函数(即 XXX_process Cmd,其 中 XXX代表设备名称)实现中,获取守护进程传递下来的功能接口名称和参数;
2) 根 据功能接口名称查找设备动态库中的功能接口名称与功能接口函数指针映射表;
3) 根 据查找到的功能接口函数指针调用对应的功能接口函数;
4)在 功能接口函数实现中,调用 Linux 操 作系统提供的系统调用接口,实现对内核设备驱动的调用。同时,接收内核设备驱动返回的数据,并将数据返回给守护进程。数据上报给守护进程的格式定义为:“功能接口名称+'#'+有效数据”.
2.5 内 核设备驱动层
内核设备驱动直接与底层硬件打交道,并按照硬件设备的具体工作方式,驱动硬件设备进行工作。内核设备驱动作为应用空间和硬件之间的纽带,使得应用空间只需通过调用系统调用接口就可以让硬件完成要求的工作[6].
Linux 内 核通过系统调用接口,如 open、read、write、ioctl、close 等接口,与上层的设备功能动态库进行通信[7],并通过设备驱动代码操作下层的设备硬件,完成硬件操作功能。
2.6 设 备硬件层
设备硬件接收来自内核设备驱动的操作命令[8],执行硬件功能实现,并在必要时返回响应数据给应用程序。
3 设备管理框架的基本操作流程
设备管理框架的基本操作流程为:
1)Android 应用程序通过绑定服务接口绑定设备管理服务,绑定之后,通过设备管理服务的 AIDL 接口文件,即可获得设备管理服务中 DVD、GPIO、音频管理等所有设备提供的功能接口。
2)应 用程序调用设备管理服务 AIDL 接 口文件中提供的功能接口。
3)设 备管理服务感知应用程序的调用操作,将应用程序的 调 用 转 化 为 命 令 格 式[9],并 将 该 命 令 通 过 Android LocalSocket 方 式发送给设备管理守护进程。
4)设备管理守护进程接收到调用命令,根据已定义的命令格式,对接收到的命令进行解析,得到调用的设备名称。如果是第一次调用该设备[10],则首先加载该设备的功能动态库,并调用动态库中的初始化接口 XXX_init 进行初始化工作,否则 直 接 调 用 该 设 备 功 能 动 态 库 的 命 令 处 理 接 口XXX_process Cmd 进 行命令处理。
5)设备功能动态库接收守护进程传递下来的功能接口名称和参数,并通过 Linux 操作系统提供的系统调用接口调用设备内核驱动。
6)设备内核驱动通过操作设备硬件寄存器等方式实现向下层调用硬件操作功能。
7)设备硬件接收内核设备驱动的硬件操作命令,执行硬件功能实现并在必要时返回响应数据。
4 结 论
根据 Android 车载终端设备的特点,本文提出了设备管理框架的概念,设计并实现了专门针对 Android 车载终端的设备管理框架,将系统中非 Android 原生的设备进行统一控制和管理。
通过设计、实现及使用该设备管理框架,为应用程序开发提供了统一的接口,降低了应用程序开发的难度,提高了应用程序的代码复用和可移植性;通过对设备的统一控制和管理,避免了多个应用同时对同一硬件进行操作存在的安全等隐患,有效地提高了系统的安全性。设备管理框架采用标准而又灵活的体系结构设计,非常易于后续扩展,同时易于在 Android 平台的不同项目之间推广和复用,给设备系统带来了多方面的显着有益效果,达到了设计要求。
参考文献:
[1]宋 滟泓。 Android独 大引二次开发潮中国厂商少积累难有作为[J]. IT时代周刊, 2012(6): 51-52.
[2] 百 度 百 科 . Android [EB/OL]. [2015 -01 -25].
[3] 韩 超,梁泉 . Android 系 统原理及开发要点详解 [M]. 北 京 :电子工业出版社,2010.
[4] 阿 耀 . JNI:使 用 Java 调 用 本 地 C 代 码 [EB/OL].(2011-09-16) [2015 -01 -25].
[5] ( 美)拉 芙(Love,R) 着;陈 莉君,康华译 . Linux 内 核 设计与实现[M]. 3版。北京: 机械工业出版社,2011.
[6] 宋 宝华。 Linux设 备驱动开发详解 [M]. 2版 .北 京 : 人 民邮电出版社,2010.
[7] 李 先妹。 数 字化变电站网络通信技术的研究[J]. 陕 西电力,2011(6):37-40.
[8] 徐 进,徐荣森,梅正茂。 基 于1394b总 线仿真设备的WDM驱动开发[J]. 电子设计工程,2015(2):63-66.
[9] 李刚。 基于SOA的Web GIS系统框架设计分析[J]. 陕西电力,2011(2):38-41.
[10]张 银勇,吴剑,李向党 . 某 推进系统气路启动特性研究 [J].火箭推进,2012(6):20-23,51.