浅谈HAL
参考:http://blog.csdn.net/mr_raptor/article/details/8074549
代码实现:http://blog.csdn.net/mr_raptor/article/details/8082360
HAL:
至于为什么使用HAL,简单说为了死守自家的代码(个人利益,不让人抄袭)。
直观点说HAL是一个c中的interface,就是说用一个structure中的pointer一直向下指,最终指向一个设备(/dev/led)。
具体流程:

也就是说:
1。app(应用层)代码
2. serveice(framework层,此层是给应用层提供服务的)
3. JNI(java不能访问C/CPP,所以就得使用这个楼,jni中的C/CPP文件编译后就生成一个.so文件(libled_runtime.so),jni还会引用hal中头文件来获取hal中一些函数or变量)
4. HAL(jni中会调用hal中的interface,hal中的代码编译后也会生成一个.so文件(led.default.so))
5. device & driver(硬件设备)
HAL 代码结构:
HAL stub的框架比较简单,三个结构体、两个常量、一个函数,简称321架构。
@hardware/libhardware/include/hardware/hardware.h
@hardware/libhardware/hardware.c
1. 三个结构体


0) 三个结构体指的是:hw_module_t, hw_module_methods_t,hw_device_t
1) led_module_t继承hw_module_t,也就是说led_module_t结构体中有hw_module_t成员变量。每个某块都需要继承hw_module_t。
2) 每一个模块都有各自独特的函数,led_device_t中的setON之类的。led_device_open中定义led_device_t
重新整理一下的话:

2. 两个变量
#define HAL_MODULE_INFO_SYM HMI
#define HAL_MODULE_INFO_SYM_AS_STR "HMI"
这个就是led_module_t 的名字罢了,就是为了统一,就是HAL Stub的固定名字。
注册时有用会加载HMI地址。
3. 一个函数
int hw_get_module(const char *id, const struct hw_module_t **module);
通过module id(led.default.so中的led)获取hw_module_t。
4. HALStub是怎么注册的
在前面中HAL编译后会生成led.default.so,
其中led是硬件ID。可参考hardware.c文件,此文件中进行注册。
1)hardware.c中会查找有没有*.prop.so或*.default.so文件,
2)有的话就进行注册,打开此文件,在so代码里有定义的函数名或变量名为HMI,
dlsym返回其地址hmi,将该地址转化成hw_module_t类型,即,硬件对象。
浅谈HAL的更多相关文章
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- Linux特殊符号浅谈
Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...
- 浅谈Angular的 $q, defer, promise
浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00 博客园-原创精华区 原文 http://www.cnblogs.com/big-snow/ ...
随机推荐
- Eclipse User Library Add/Edit/Remove
1:前文 近来开发项目采用的技术是AngularJS+Bootstrap+Spring Boot+SpringMvc+JPA 的方式,创建的项目是 Java Project,对应的JAR文件需要添加到 ...
- 洛谷P1461 海明码 Hamming Codes
P1461 海明码 Hamming Codes 98通过 120提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 给出 N,B 和 ...
- ios delegate 代理模式 观察者模式 不同视图间的通信
delegate,在ios中比比皆是,NSURLConnection(网络请求有),tableView, connectionView,等系统自带 的常见代理.甚至,自己写代码的时候,随意间敲打出了p ...
- DedeCMS中function='Html2Text(@me)的用法分析
本文实例讲述了DedeCMS中function='Html2Text(@me)的用法.分享给大家供大家参考.具体分析如下: 在使用dedecms建站网站时候,需要用到过滤html代码,调出纯文本的代码 ...
- pcap文件格式及文件解析
第一部分:PCAP包文件格式 一 基本格式: 文件头 数据包头数据报数据包头数据报...... 二.文件头: 文件头结构体 sturct pcap_file_header { DWORD ...
- Unieap3.5Java端常用公用方法
String OrgId = McssComMethod.getDimensionID(); Date systemDate = DataStoreUtil.getOracleSystemDate( ...
- Android IOS WebRTC 音视频开发总结(四七)-- 深度解读国内首届WebRTC大会背后的真相
本文主要解读国内首届WebRTC大会背后的真相,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help -------------------------- ...
- C#常用的正则表达式
using System.Text.RegularExpressions; 英文Regex.IsMatch("字符串", @"^[a-zA-Z0-9_\u4e00-\u9 ...
- javaSE第二十二天
第二十二天 312 1:登录注册IO版本案例(掌握) 312 2:数据操作流(操作基本类型数据的流)(理解) 313 (1)定义: 313 (2)流对象名称 313 (3 ...
- Wpf实现图片自动轮播自定义控件
近来,公司项目需要,需要写一个自定义控件,然后就有下面的控件产生.样式没有定义好,基本功能已经实现.1.创建为自定义控件的XAML页面.下面为后台代码 using System; using Syst ...