没写完哈。
不说废话,直接上干活。
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 运行
开两个窗口
。。。