码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Android硬件服务访问(2):HAL中添加接口支持访问硬件


    Android硬件服务访问2:HAL中添加接口支持访问硬件

      • 一、编写HAL C
      • 二、编译进Android system镜像中
      • Bug解决
      • 完整代码
        • led_hal.h
        • led_hal.c

    如何在硬件抽象层中增加硬件模块来和内核驱动程序交互。

    这一小节中我们在Android系统为我们自己的硬件增加了一个硬件抽象层模块,但是现在Java应用程序还不能访问到我们的硬件。我们还必须编写JNI方法和在Android的Application Frameworks层增加API接口,才能让上层Application访问我们的硬件。在接下来的文章中,我们还将完成这一系统过程,使得我们能够在Java应用程序中访问我们自己定制的硬件。

    在这里插入图片描述

    一、编写HAL C

    添加led_hal.h和led_hal.c文件再Android指定目录下:

    hardware/libhardware/include/hardware/led_hal.h
    hardware/libhardware/modules/led/led_hal.c
    
    • 1
    • 2

    HAL在运行时是在user space。

    在led_hal.h中定义led_device_t结构体:

    #include 
    #include 
    #include 
    #include 
    
    __BEGIN_DECLS
    
    struct led_device_t {
       
        struct hw_device_t common;
    
    	int (*led_open)(struct led_device_t* dev);
    	int (*led_ctrl)(struct led_device_t* dev, int which, int status);
    };
    __END_DECLS
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    led_hal.c中的步骤如下:

    /* 1. 实现一个名为HMI的 hw_module_t 结构体 */

    struct hw_module_t HAL_MODULE_INFO_SYM = {
       
    	.tag = HARDWARE_MODULE_TAG,
        .id = "led",
        .methods = &led_module_methods,
    };
    
    static struct hw_module_methods_t led_module_methods = {
       
        .open = led_device_open,
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    /* 2. 实现一个open函数, 它返回 led_device_t 结构体 */

    static int led_device_open(const struct hw_module_t* module, 
    • 相关阅读:
      【JVM调优实战100例】03——JVM堆调优四例
      Transformer推理性能优化技术很重要的一个就是K V cache,能否通俗分析,可以结合代码?
      2022“杭电杯”中国大学生算法设计超级联赛(6)
      vue实现CBC加密/解密
      【Linux】进程通信 | 信号
      JDK API
      selenium窗口切换
      InceptionNext:当Inception遇到ConvNeXt
      axios 请求拦截器&响应拦截器与router的导航守卫
      怎么使用股票委托下单接口?
    • 原文地址:https://blog.csdn.net/qq_34740116/article/details/127715261
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号