深入浅出 - Android系统移植与平台开发(十) - led HAL案例分析.pdfVIP

深入浅出 - Android系统移植与平台开发(十) - led HAL案例分析.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入浅出 - Android系统移植与平台开发(十) - led HAL案例分析

本文由兰州白癜风医院/收集,转载请注明出处 深入浅出 - Android 系统移植与平台开发(十) - led HAL 案例分析 通过前两节HAL 框架分析和JNI 概述,我们对Android 提供的Stub HAL 有了比较详细的 了解了,下面我们来看下led 的实例,写驱动点亮led 灯,就如同写程序,学语言打印 HelloWorld 一样,如果说打印HelloWorld 是一门新语言使用的第一声吆喝,那么点亮led 灯就是我们学习HAL 的一座灯塔,指挥我们在后面的复杂的HAL 代码里准确找到方向。 LedHAL 实例架构 上图描述了我们Led 实例的框架层次: l LedDemo.java:是我们写的Android 应用程序 l LedService.java:是根据Led HAL 封装的Java 框架层的API ,主要用于向应用层提供框 架层API,它属于Android 的框架层 l libled_runtime.so:由于Java 代码不能访问HAL 层,该库是LedService.java 对应的本 地代码部分 l led.default.so:针对led 硬件的HAL 代码 LedDemo 通过LedService 提供的框架层API 访问Led 设备,LedService 对于LedDemo 应用程序而言是Led 设备的服务提供者,LedService 运行在Dalvik 中没有办法直接访问Led 硬件设备,它只能将具体的Led 操作交给本地代码来实现,通过JNI 来调用Led 硬件操作 的封装库libled_runtime.so,由HAL Stub 框架可知,在libled_runtime.so 中首先查找注册 本文由兰州白癜风医院/收集,转载请注明出处 本文由兰州白癜风医院/收集,转载请注明出处 为led 的硬件设备module,找到之后保存其操作接口指针在本地库中等待框架层 LedService 调用。led.default.so 是HAL 层代码,它是上层操作的具体实施者,它并不是一 个动态库(也就是说它并没有被任何进程加载并链接),它只是在本地代码查找硬件设备 module 时通过ldopen”杀鸡取卵”找module,返回该硬件module 对应的device 操作结构 体中封装的函数指针。 其调用时序如下: Led HAL 实例代码分析 我们来看下led 实例的目录结构: 本文由兰州白癜风医院/收集,转载请注明出处 本文由兰州白癜风医院/收集,转载请注明出处 主要文件如下: com.hello.LedService.cpp :它在frameworks/services/jni 目录下,是的Led 本地服务代码 led.c:HAL 代码 led.h:HAL 代码头文件 LedDemo.java :应用程序代码 LedService.java :Led 框架层服务代码 在Android 的源码目录下,框架层服务代码应该放在frameworks/services/java/包名/ 目录 下,由Android 的编译系统统一编译生成system/framework/services.jar 文件,由于我们的 测试代码属于厂商定制代码,尽量不要放到frameworks 的源码树里,我将其和LedDemo 应用程序放在一起了,虽然这种方式从Android 框架层次上不标准。 另外,本地服务代码的文件名要和对应的框架层Java 代码的名字匹配(包名+类文件名, 包目录用“_“代替)。有源码目录里都有对应的一个Android.mk 文件,它是Android 编译系 统的指导文件,用来编译目标module。 1) Android.mk 文件分析 先来看下led 源码中①号Android.mk : include $(call all-subdir-makefiles) 代码很简单,表示包含当前目录下所有的Android.mk 文件 先来看下led_app 目录下的③号Android.mk : # 调用宏my-dir,这个宏返回当前Android.mk 文件所在的路径 LOCAL_PATH:= $(call my-dir) # 包含CLEAR_VARS 变量指向的mk 文件build/core/clear_vars.mk,它主要用来清除编 译时依赖的编译变量 include $(CLEAR_VARS) # 指定当前目

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档