为Android添加HAL模块

2023-10-28

1.每个硬件抽象层模块在内核中都对应一个驱动程序,硬件抽象层模块就时通过这些驱动程序来访问硬件设备的,它们是通过读写设备文件来进行通信的。

硬件抽象层中的模块接口源文件一般保存在hardware/libhardware目录中,为了方便起见,我们将虚拟硬件设备freg在硬件抽象层中的模块名称定义为freg,目录结构如下:
hardware/libhardware/include/hardware/freg.h
hardware/libhardware/modules/freg/Android.mk
hardware/libhardware/modules/freg/freg.cpp

上述三个文件分别对应模块的头文件、makefile文件、源文件。下载地址如下:

http://download.csdn.net/detail/getnextwindow/9017755

2.HAL层的编译步骤
首先要修改hardware/libhardware/modules下面的Android.mk文件,如下:

hardware_modules := gralloc hwcomposer audio nfc nfc-nci local_time \
    power usbaudio audio_remote_submix camera consumerir sensors vibrator \
    tv_input fingerprint freg
include $(call all-named-subdir-makefiles,$(hardware_modules))

修改点:将freg加入到hardware_modules变量当中

编译:mmm ./hardware/libhardware/modules
结果:会生成一个HAL层的动态库,比如freg.default.so

3.查看freg.default.so
使用linux的nm工具可以查看动态库的符号表,我们查看out/target/product/XXXX/symbols/system/lib/hw
目录下面的freg.default.so动态库文件,命令如下:

nm freg.default.so

输出:

00000549 t _ZL12freg_get_valP13freg_device_tPi
0000059d t _ZL12freg_set_valP13freg_device_ti
000004b9 t _ZL16freg_device_openPK11hw_module_tPKcPP11hw_device_t
000004ad t _ZL17freg_device_closeP11hw_device_t
00002084 d _ZL19freg_module_methods

我们就可以看到确实是有HAL层的函数被编入。

4.加载硬件抽象层模块
上面我们生成了硬件抽象层对应的.so文件,那么怎么加载.so呢?Android系统中的硬件抽象层是由系统统一加载的,当调用者需要加载这些模块时,只要指定ID就可以了,在Android硬件抽象层中,负责加载硬件抽象层的函数是hw_get_module函数,原型如下:

int hw_get_module(const char *id, const struct hw_module_t **module);

比如我们传入参数FREG_HARDWARE_MODULE_ID,即”freg”,函数内部找到相应的.so文件,然后,最后调用load加载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为Android添加HAL模块 的相关文章

  • android 4.4中的流媒体渲染过程

    第一次写blog 只是为了记下学习的过程 android中东西很多 架构和流程都很复杂 经常发现以前学习过的很多东西 即使当时看明白没多久就忘记了 只能重新拾起再看 于是想起blog这个东东 写下来总不会忘记 也和别人一起共享 以下基于an

随机推荐

  • 多种马尔可夫链预测方法

    一 基于绝对分布的马尔可夫链预测 步骤1 对历史数据进行分组 步骤2 确定观测值的状态 写出频数矩阵 nij i j E和一步转移概率矩阵 fij i j E 其中fij nij n 1 其中n为样本容量 当n 时 可用频数估计概率 从而得
  • tensorflow2.0(三)----循环神经网络(RNN)

    class DataLoader def init self path tf keras utils get file nietzsche txt origin http s3 amazonaws com text data with op
  • 排序子序列

    问题描述 将一段数组分为若干个排序子序列 排序子序列就是非递增或非递减的排序序列 然后输出至少可以分为几个排序子序列 解决方法 输入数组之后 开始遍历数组 如果数组满足非递增或者非递减 就进入对应的条件判断 然后此时如果i 1的元素依然满足
  • javascript构造函数如果没有形参允许省略圆括号

    javascript构造函数如果没有形参允许省略圆括号 var o new Object var o new Object 两条语句完全等价
  • element-ui表单校验

    默认表单校验 在最外层
  • 【业务功能篇82】微服务SpringCloud-ElasticSearch-Kibanan-docker安装-Nginx安装-进阶实战

    四 ElasticSearch进阶 https www elastic co guide en elasticsearch reference 7 4 getting started search html 1 ES中的检索方式 在Elas
  • ubuntu重装NVIDIA显卡(经过记录)遇到问题到卸载ubuntu再到成功安装

    2019 3 10 本来准备升级英伟达官方驱动下载搭配合适CUDA cuDNN GPU tensorflow 网上教程很多 按照教程下载了显卡匹配的最新驱动 卸载了安装ubuntu后在附加驱动里面自动下载的官方驱动390版本 准备禁止X W
  • 准确记录用户观看视频内容时长

    文章目录 问题的产生 一 从最简单的开始 二 天真可爱法 三 录点法 四 打点法 五 暴力打点法 六 小结 七 大结 问题的产生 to be or not to be that is a question 不是问题解决不了 只是你自己不够努
  • 事件派发代码

    bool QCoreApplication sendEvent QObject receiver QEvent event Q TRACE QCoreApplication sendEvent receiver event event gt
  • 没有扩容机器,抗住了70多倍的流量增长

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 作者 黄希彤 腾讯云专家工程师 从2012年开始 我们就吧腾讯公司内各个业务的404页面导流给宝贝回家 从2013年开始 我们更开放了404寻亲接入给第三方网站 这些导流给宝贝回家论坛
  • 第14节 在VS中关闭安全周期检查sdl

    项目 gt 属性 gt C C gt 常规 gt SDL检查 gt 否
  • C语言中符号表示什么意思?

    C语言中 gt gt lt lt 分别表示什么意思 举例说明 1 C语言中的 gt gt 意思为 右移后赋值 代码示例为 x 8 x gt gt 3 右移后结果为 00000000 00000000 00000000 00000001 2
  • OPenCV入门学习笔记(5)人脸检测

    检测的一般步骤 加载xml级联分类器 读入图片 灰度化处理图片 进行检测 加载xml级联分类器 face detector cv2 CascadeClassifier haarcascade frontalface default xml
  • 2023华为OD机试真题-狼羊过河(JAVA、Python、C++)

    题目描述 一农夫带着m只羊 n只狼过河 农夫有一条可载x只狼 羊的船 农夫在时或者羊的数量大于狼时 狼不会攻击羊 农夫在不损失羊的情况下 运输几次可以完成运输 返程不计入次数 输入描述 输入参数为 m n x m 为羊的数量 n为狼的数量
  • 乐高ev3编程 c语言,乐高ev3编程软件下载-乐高EV3机器人编程软件lego mindstorms ev31.0 官方版 - 极光下载站...

    LEGO MINDSTORMS EV3是乐高EV3机器人编程软件 乐高ev3编程软件是乐高头脑风暴EV3机器人配套的编程软件 包含多个有趣的机器人编程任务 拥有简单易用的编程界面 让您您轻松探索并操纵乐高EV3机器人 让机器人服从您的命令
  • 51单片机(硬件结构)并行I/O端口

    I O端口结构及功能 1 MCS 51单片机有4个8位并行I O端口 P0 P1 P2 P3 2 每个口包含 锁存器 输出驱动器 输入缓存器 3 具有字节寻址和位寻址功能 4 在访问片外扩展存储器时 低8位地址和数据由P0口 分时传送 高8
  • DDR3总结笔记

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 完整的参考工程源码在某宝有售 https item taobao com item htm ft t id 6832
  • JAVA形参可变数量参数

    public class test public void info int nums for int num nums System out println num public static void main String args
  • linux /etc/profile bashrc bash_profile

    文件 etc profile bashrc 和 bash profile 的使用区别 etc profile 全局 环境变量等 在机器重启后执行一次 用于设置环境变量 更改一些内核参数等命令 etc bashrc 全局登陆 变量 如 ali
  • 为Android添加HAL模块

    1 每个硬件抽象层模块在内核中都对应一个驱动程序 硬件抽象层模块就时通过这些驱动程序来访问硬件设备的 它们是通过读写设备文件来进行通信的 硬件抽象层中的模块接口源文件一般保存在hardware libhardware目录中 为了方便起见 我