首页 技术 正文
技术 2022年11月18日
0 收藏 365 点赞 3,999 浏览 1323 个字

参考: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)。

具体流程:

浅谈HAL

也就是说:

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. 三个结构体

浅谈HAL

浅谈HAL 浅谈HAL

  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

重新整理一下的话:

浅谈HAL

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类型,即,硬件对象。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898