Android学习6 -- HAL-2 HIDL

本文详细描述了如何使用HIDL(HardwareInterfaceDefinitionLanguage)进行系统级硬件接口的开发,包括创建HAL、生成桩代码、添加hash、生成Android.bp文件、服务编译和兼容性矩阵设置等步骤。开发者在面对Android系统架构时面临的包名规则和参数选择也做了说明。
摘要由CSDN通过智能技术生成

没写完哈。

不说废话,直接上干活。

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 运行

开两个窗口

。。。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值