Android硬件抽象层(HAL)_第1页
Android硬件抽象层(HAL)_第2页
Android硬件抽象层(HAL)_第3页
Android硬件抽象层(HAL)_第4页
Android硬件抽象层(HAL)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android硬件抽象层Agenda Android硬件抽象层概述 Android硬件驱动程序开发 Android硬件驱动程序验证 Android硬件抽象层模块开发 Android硬件访问服务开发Android应用程序开发Android硬件抽象层概述设备駆动分为内核空间和用户空间两部分-保护厂商利益(出发点)-内核空间主要负责硬件访问逻辑(GPL)-用户空间主要负责参数和访问流程控制(Apache License)用户空间部分设备驱动即为HAL Module- HAL Module通过设备文件访问内核空间部分设备驱动系统服务通过HAL Module对硬件进行管理-系统服务通边NI访问HAL M

2、odule应用程序通过系统服务对硬件进行访问-应用程序通过Binder IPC访问系统服务Android硬件抽象层概述(续)User SpaceKernel SpaceLinux Device Driver(kernel space part of device driverAndroid硬件驱动程序开发与传统的Linux硬件驱动程序开发是一样的 -实现驱动程序包括源代码文件、编译脚本文件、编译配置文件提供proc、devfs和sysfs三种文件系统访问接口-修改根Kconfig文件-修改根Makefile文件-编译驱动程序Android硬件驱动程序验证验证proc文件系统访问接口-通过cat

3、和echo命令验证验证sysfs文件系统访问接口-通过cat和echo命令验证验证devfs文件系统访问接口-编写C程序通过open、read和write系统调用验 证Android硬件抽象层模块开发模块文件命名规范/* There are a sec of variant filename for modules The form of rhe filenaire* is n<MODULE_ID>. variant mo計 so for the led module the Drearr. variants* of base duct.board11 z f,ro

4、boaL:rci ©1311:£0工优,and Flro .azcN" vould be :* led.trout.so* led.msm7k.so* led MlRMV6.so* led.default.soscacic consc char *variant_keys = r,ro.hardwarenF /* This goes first so that it can pick up a different file on the emulato工.*/r,ro product. boardn. r,ro board. placforrnp,. nro.ar

5、chnAndroid硬件抽象层模块开发(续)定义模块ID定义设备ID定义模块结构体-第一个成员变量必须是标准的hw_module_t结构体-相当于是定义一个hw_module_t字类定义设备结构体-第一个成员变量必须是标准的hw_device_t结构体-相当于是定义一个hw_device_t了晏定义符号HAL MODULE INFO SYM,类型为自定义的模块结构 体-实现设备打开接口(必须)实现设备关闭接口(必须)实现设备访问接口(可选)Android硬件抽象层模块开发(续)模块加载过程:hw_get_module-依次在/system/lib/hw和/vendor/lib/hw目录屮检查是

6、否 存在相应的“vMODULE_ID.variant.so”文件。其中, variant分别等于属性 u ro.hardware v、u duct.board "、ro.board.platform " 和"ro.arch"的值。只要其中一个存在,即停止查找。-如果上述文件均不存在,则继续在/svstem/lib/hw 录 中检查“vMODULED>variantso”文件是否存在。-调用dlopen打开上址找到的so文件。-调用dlsys获得上述打开的so文件里面的符号HAL_MODULEJNFO_SYMo-将符号HAL_MODULE

7、_INFO_SYM强制转换为一个 hw moudle t结构体。Android硬件抽象层模块开发(续)修改设备文件访问权限-设备文件在默认情况下只有root用户可以访问-设备文件一般是在非root用户进程中访问的-修改ueventd.rc文件赋予设备文件非root用户访问权 限修改ueventd.rc文件的方法-解压ramdisk.img文件,得到ramdisk.img.gz归档文件-解除ramdisk.img.gz文件归档,得到ramdisk目录-修改ramdisk目录下的ueventd.rc文件-重新打包ramdisk.img镜像文件Android硬件访问服务开发定义硬件访问接口 IXXX-使用AIDL语言定义-编译后会生成一个IXXX.Stub类实现硬件访问服务XXX-从IXXX.Stub类继承-实现便件访问接口 IXXX-通过JNI访问硬件抽象层模块实现硬件访问服务XXX的JNI接口-调用函数hw_get_module加载硬件抽象层模块-打开硕件设審启动硬件访问服务-在System Server进程中创建一个XXX实例-调fflServiceManager.addServic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论