当前位置: 首页 > news >正文

Android的硬件接口HAL-2 HIDL

没写完哈。

不说废话,直接上干活。

1 创建HAL

mkdir -p vendor/fanged/hidltest/1.0/default
vi vendor/fanged/hidltest/1.0/Ilovefanged.hal
package vendor.fanged.hardware.hidltest@1.0;interface Ilovefanged {add(int32_t a, int32_t b) generates (int32_t result);
};

2 生成桩代码

m hidl-gen
hidl-gen -o vendor/fanged/hidltest/1.0/default -L c++-impl -rvendor.fanged.hardware:vendor/fanged -randroid.hidl:system/libhidl/transport  vendor.fanged.hardware.hidltest@1.0

hidl-gen -o $vendor/fanged/hidltest/1.0/default -Lc++-impl -rvendor.fanged.hardware:vendor/fanged/hardware -randroid.hidl:system/libhidl/transport android.hardware.Lovefanged@1.0

这里有个疑问是包名和路径的关系,待会在板子上再试试吧。

这里专门说一下hidl-gen的参数,-o 没啥问题,生成物路径。可以说的是包名,-L和-r,这几个真的搞得欲仙欲死。

首先是包名,这个是和路径绑定的,Java的玩法。比如说vendor.fanged.hardware.hidltest@1.0,路径就几乎必须是vendor/fanged/hardware/hidltest,中间android或者interface好像可以省。。。我再做做实验。

其次是-r,这个是可选的。对应package:path。中间有一些又是可以省的,容我做做试验。

最后是-L。常用的好像就是-Lc++-impl,-Lhash和-Landroidbp。

3 增加hash

hidl-gen -Lhash  -rvendor.fanged.hardware:vendor/fanged -randroid.hidl:system/libhidl/transport vendor.fanged.hardware.hidltest@1.0 > vendor/fanged/hidltest/current.txt

hidl-gen -Lhash -randroid.hardware.xxx:hardware/interfaces/xxx -randroid.hidl:system/libhidl/transport android.hardware.xxx@1.0 > hardware/interfaces/xxx/current.txt

hash放的位置,我还得看看。

4 生成Android.bp

source system/tools/hidl/update-makefiles-helper.sh

source system/tools/hidl/update-makefiles-helper.sh

do_makefiles_update vendor.xxx.hardware:vendor/xxx android.hardware:hardware/interfaces android.hidl:system/libhidl/transport

hidl-gen -o vendor/fanged/hidltest/1.0/default -L androidbp -rvendor.fanged.hardware:vendor/fanged -randroid.hidl:system/libhidl/transport  vendor.fanged.hardware.hidltest@1.0

5 在default中增加service.cpp

6 hw_get_module

7 在default中增加Android.bp

cc_binary {
    name: "android.hardware.xxx-service",
    defaults: ["hidl_defaults"],
    vendor: true,
    relative_install_path: "hw",
    srcs: [
        "service.cpp",
        "xxx.cpp"
    ],
    init_rc: ["android.hardware.xxx-service.rc"],
    shared_libs: [
        "vendor.xxx.hardware.xxx2@1.0",
        "libhidlbase",
        "libhidltransport",
        "liblog",
        "libutils",
    ],
    vintf_fragments: ["android.hardware.xxx-service.xml"],
}

8 android.hardware.xxx-service.xml

<manifest version="1.0" type="device">

<hal format="hidl">

<name>vendor.xxx.hardware.xxx2</name>

<transport>hwbinder</transport>

<version>1.0</version>

<interface>

<name>Ilogihid</name>

<instance>default</instance>

</interface>

</hal>

</manifest>

9 android.hardware.xxx-service.rc

service android.hardware.xxx-service /vendor/bin/hw/android.hardware.xxx-service

class hal

user system

group system

10 增加client

11 绕开Android12限制。

12 编译

使用mmm

13 兼容性矩阵

adb push compatibility_matrix.device.xml /system/etc/vintf/compatibility_matrix.device.xml
adb push compatibility_matrix.xml /vendor/etc/vintf/compatibility_matrix.xml
adb push android.hardware.tc_uvc-service.xml /vendor/etc/vintf/manifest/android.hardware.xxx-service.xml

14 使用脚本拷贝

scp scm@192.168.1.1:/LINUX/android/out/target/product/kalama/vendor/bin/hw/android.hardware.tc_uvc-service .
adb push android.hardware.xxx-service /vendor/bin/hw
scp scm@192.168.1.1:/LINUX/android/out/target/product/kalama/system/bin/xxx_test .
adb push xxx_test /vendor/bin
#scp scm@192.168.1.1:/LINUX/android/out/target/product/kalama/vendor/lib/hw/vendor.xxx.hardware.xxx2@1.0-impl.so .
#adb push vendor.hardware.test@1.0-impl.so /vendor/lib/hw
scp scm@192.168.1.1:/LINUX/android/out/target/product/kalama/vendor/lib/vendor.xxx.hardware.xxx2@1.0.so .
adb push vendor.xxx.hardware.xxx2@1.0.so /vendor/lib
scp scm@192.168.1.1:/LINUX/android/out/target/product/kalama/vendor/lib64/vendor.xxx.hardware.xxx2@1.0.so .
adb push vendor.xxx.hardware.xxx2@1.0.so /vendor/lib64

15 关闭tee

adb setenforce 0

16 运行

开两个窗口

。。。

相关文章:

Android的硬件接口HAL-2 HIDL

没写完哈。 不说废话&#xff0c;直接上干活。 1 创建HAL mkdir -p vendor/fanged/hidltest/1.0/defaultvi vendor/fanged/hidltest/1.0/Ilovefanged.hal package vendor.fanged.hardware.hidltest1.0;interface Ilovefanged {add(int32_t a, int32_t b) generates (int32_t…...

pygame--坦克大战(二)

加载敌方坦克 敌方坦克的方向是随机的,使用随机数生成。 初始化敌方坦克。 class EnemyTank(Tank):def __init__(self,left,top,speed):self.images = {U: pygame.image.load(img/enemy1U.gif),D: pygame.image.load(img/enemy1D.gif),L: pygame.image.load(img/enemy1L.gi…...

【C语言】标准输入/输出(printf, scanf, gets, puts, getchar, putchar)

标准文件文件指针设备标准输入stdin键盘标准输出stdout屏幕标准错误stderr您的屏幕 标准输入/输出的函数在标准库stdio.h。 #include <stdio.h> 1、printf 输出 printf &#xff1a;格式化输出&#xff0c;输出到标准输出stdout中。 printf&#xff1a; int print…...

C、C++、C#中.vscode下json文件记录

C launch.json {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"name": &quo…...

2013年认证杯SPSSPRO杯数学建模B题(第二阶段)流行音乐发展简史全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 B题 流行音乐发展简史 原题再现&#xff1a; 随着互联网的发展&#xff0c;流行音乐的主要传播媒介从传统的电台和唱片逐渐过渡到网络下载和网络电台等。网络电台需要根据收听者的已知喜好&#xff0c;自动推荐并播放其它音乐。由于每个人喜好…...

使用ARCore深度API实现点云采集

一、深度API 本小节内容摘自ARCore官方文档。 ARCore 深度API Depth API 可助力实现对象遮挡、提升沉浸感和新颖的互动体验&#xff0c;从而增强 AR 体验的真实感。 在下图中&#xff0c;右侧画面是采用深度API进行遮挡后的效果&#xff0c;与左侧图相比更加真实。 深度值 给…...

软考数据库

目录 分值分布1. 事务管理1.1 事物的基本概念1.2 数据库的并发控制1.2.1 事务调度概念1.2.2 并发操作带来的问题1.2.3 并发控制技术1.2.4 隔离级别&#xff1a; 1.3 数据库的备份和恢复1.3.1 故障种类1.3.2 备份方法1.3.3 日志文件1.3.4 恢复 2. SQL语言发权限收权限视图触发器…...

Echarts 自适应宽高,或指定宽高进行自适应

文章目录 需求分析 需求 有一个按钮实现对Echarts的指定缩放与拉长&#xff0c;形成自适应效果 拉长后效果图 该块元素缩短后效果图 分析 因为我习惯使用 ref 来获取组件的 DOM 元素&#xff0c;然后进行挂载 <div ref"echartsRef" id"myDiv" :sty…...

体验报告:为什么Claude-3是码农和学者的新宠?

在这个充斥着海量信息的新时代&#xff0c;人工智能的飞速发展带来了翻天覆地的变化。特别是在编程、学术探索以及专业文案创作等领域&#xff0c;AI的助力显得格外关键。最近&#xff0c;我有机会尝试了一种革命性的人工智能工具——Claude-3&#xff0c;其表现令我震惊&#…...

接口自动化框架搭建(九):接入钉钉消息通知

1&#xff0c;jenkins安装钉钉插件 2&#xff0c;在钉钉群聊设置机器人 3&#xff0c;jenkins配置钉钉 根据情况选择&#xff1a; 除了这些&#xff0c;其他不用配置&#xff0c;配置完成点击确认 4&#xff0c;项目配置 添加后保存 5&#xff0c;测试下效果 构建完成后&a…...

一、点击视频下载(通过视频url实现);二、点击下载视频按钮,视频以压缩包形式下载(但未实现压缩视频)

一、点击视频下载&#xff08;通过视频url实现&#xff09; <div class"video-list" v-for"(item,index) in videoList" :key"index"><span class"video-title" >{{item.title}}</span><span class"video-…...

B树、B+树、哈夫曼树

目录 1. B树2. B树3. 哈夫曼树 1. B树 特点&#xff1a;一个节点当中可以有多个值&#xff0c;节点内部key 值是有序的&#xff0c;节点内部存储的是key-value类型的数据 磁盘中文件存储用B树。 4阶B树一个节点最多三个key值 5阶B树一个节点最多四个key值 B树有很多的分支&…...

评价指标_Precision(精确率)、Recall(召回率)和Accuracy(准确率)区别和联系

Precision&#xff08;精确率&#xff09;、Recall&#xff08;召回率&#xff09;和Accuracy&#xff08;准确率&#xff09;是机器学习和信息检索领域常用的评价指标&#xff0c;它们用于评估分类器或检索系统的性能&#xff0c;但各自关注的方面略有不同。 Precision&#x…...

【React】React AJAX

在React中使用AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种常见的做法&#xff0c;用于从服务器获取数据并在组件中显示。尽管AJAX的名字中包含了XML&#xff0c;但现在更多地使用JSON&#xff08;JavaScript Object Notation&#xff09;作为数据交换格…...

vue 移动端弹窗带滚动效果 滚动到底的时候弹窗下的页面会跟着滑动

<template><div class"wrap" :style"dynamicStyle"><!--dynamicStyle主要是介个 通过computed设置postion的值 弹窗的时候设置为fixed 关闭弹窗的时候设置为unset--><div class"banner-wrap"><img src"/assets/…...

Linux-3 yum和vim

目录 本节目标&#xff1a; Linux 软件包管理器 yum 什么是软件包 1.yum是什么&#xff1f;软件包&#xff1f; 2.Linux(centos)的生态 3.yum的相关操作 我怎么知道我应该安装什么软件&#xff1f; 4.yum的本地配置 关于 rzsz 查看软件包 Linux编辑器-vim使用 1.v…...

什么是计算机视觉?计算机视觉:从基础到前沿

引言 计算机视觉&#xff0c;作为人工智能的一个重要分支&#xff0c;致力于赋予机器“看”的能力——即从图像或视频中理解和解释视觉信息的能力。这项技术的发展为自动驾驶汽车、面部识别、机器人导航等多种应用开辟了道路&#xff0c;正在逐步改变我们的工作和生活方式。本…...

Java中的可变字符串

Java中的可变字符串 一、什么是可变字符串二、可变字符串的使用场景以及使用步骤1.新建一个可变字符串2.可变字符串的一系列方法 一、什么是可变字符串 可变字符串是Java.lang包下的 在我们学习到JDBC的时候需要将原有的sql语句根据不同的差异添加一段新的关键字或者单词&…...

C++多线程:单例模式与共享数据安全(七)

1、单例设计模式 单例设计模式&#xff0c;使用的频率比较高&#xff0c;整个项目中某个特殊的类对象只能创建一个 并且该类只对外暴露一个public方法用来获得这个对象。 单例设计模式又分懒汉式和饿汉式&#xff0c;同时对于懒汉式在多线程并发的情况下存在线程安全问题 饿汉…...

康耐视visionpro-CogAcqFifoTool工具详细说明

CogAcqFifoTool操作说明&#xff1a; ① 打开工具栏&#xff0c;双击或点击鼠标拖拽 添加CogAcqFifoTool ②.从图片采集设备/图像采集卡列表里选择对应的相机&#xff0c;视频格式选择图像格式。 Mono表示黑白图像&#xff0c;RGB表示彩色相机。点击初始化取相初始化相机。 ③…...

收藏!AI技能进化全解析:从聊天搭子到行业专家的成长之路

本文回顾了AI技能的演进过程&#xff0c;从最初只能进行简单对话的聊天机器人&#xff0c;到如今能够理解行业规范、执行复杂任务的智能体。文章详细介绍了AI技能发展的五个阶段&#xff1a;初级聊天机器人、通过函数调用实现工具交互、通用接口MCP规范、智能体引擎赋予环境感知…...

CentOS 7下OnlyOffice离线部署全攻略:从依赖包下载到一键配置(避坑指南)

CentOS 7下OnlyOffice离线部署全攻略&#xff1a;从依赖包下载到一键配置&#xff08;避坑指南&#xff09; 在企业内网或安全隔离环境中部署文档协作平台时&#xff0c;OnlyOffice凭借其开源特性和丰富的编辑功能成为首选方案。本文将深入探讨如何在CentOS 7系统中实现完全离线…...

法律文书助手:OpenClaw+Qwen3-32B的合同条款审查与风险提示

法律文书助手&#xff1a;OpenClawQwen3-32B的合同条款审查与风险提示 1. 为什么需要本地化的法律文书助手&#xff1f; 去年处理一份股权投资协议时&#xff0c;我经历了传统法律AI工具的典型痛点&#xff1a;上传合同到第三方平台后&#xff0c;法务团队突然发现协议中涉及…...

3步打造你的专属阅读系统:开源工具如何重构数字阅读体验

3步打造你的专属阅读系统&#xff1a;开源工具如何重构数字阅读体验 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 你是否曾遇到这样的困扰&#xff1a;阅读APP充斥广告弹窗、书源受限无法找到心仪内…...

MATLAB图表美化指南:xlabel/ylabel上标下标的5种高级用法

MATLAB图表美化指南&#xff1a;xlabel/ylabel上标下标的5种高级用法 在数据可视化领域&#xff0c;MATLAB作为一款强大的科学计算软件&#xff0c;其图表绘制功能一直被科研人员和工程师广泛使用。然而&#xff0c;许多用户在基础绘图之外&#xff0c;往往忽略了坐标轴标签这一…...

别再乱改文件夹权限了!深入理解IIS应用程序池标识与ASP.NET临时目录的权限管理

深入解析IIS应用程序池权限管理&#xff1a;从临时目录到生产环境的最佳实践 当你在IIS中部署ASP.NET应用时&#xff0c;是否遇到过这样的错误&#xff1a;"当前标识(IIS APPPOOL\DefaultAppPool)没有对Temporary ASP.NET Files的写访问权限"&#xff1f;这个看似简单…...

LVGL字体扩展避坑指南:freetype缓存管理导致的内存泄漏问题排查实录

LVGL字体扩展深度解析&#xff1a;如何规避freetype缓存管理中的内存泄漏陷阱 在嵌入式GUI开发中&#xff0c;LVGL结合freetype的动态字体加载功能为多语言支持提供了强大支持&#xff0c;但这也带来了内存管理的复杂性。本文将深入探讨一个典型场景&#xff1a;当项目需要频繁…...

STM32标准库项目如何用VSCode一键编译下载?详解tasks.json与Makefile的联动配置

STM32标准库项目在VSCode中实现一键编译下载的终极指南 1. 为什么选择VSCode进行STM32开发&#xff1f; 传统嵌入式开发往往依赖于Keil、IAR等商业IDE&#xff0c;但这些工具存在几个明显痛点&#xff1a; 高昂的授权费用&#xff1a;商业IDE的许可证价格让个人开发者和小团队望…...

实测有效方案:星图平台一键部署Qwen3-VL:30B,接入飞书提升办公效率

实测有效方案&#xff1a;星图平台一键部署Qwen3-VL:30B&#xff0c;接入飞书提升办公效率 1. 为什么选择Qwen3-VL:30B作为办公助手 1.1 办公场景中的图文处理痛点 在日常办公中&#xff0c;我们经常遇到需要同时处理图片和文字的场景。比如会议结束后&#xff0c;群里堆满了…...

YOLOv5实战:如何用Inner-IoU提升小目标检测效果(附完整代码)

YOLOv5实战&#xff1a;用Inner-IoU解决小目标检测痛点的工程指南 无人机镜头下的蚂蚁、CT扫描中的微小结节、卫星图像里的车辆——当目标尺寸小于3232像素时&#xff0c;传统检测器的性能往往会断崖式下跌。我们团队在医疗影像分析项目中就曾遇到这样的困境&#xff1a;常规Io…...