安卓虚拟化实战教学(三):深入解析 HAL 层开发与定制

  本章节希望通过对External Camera HAL的介绍,包括如何打包需要的文件到系统rom,如何修改代码和编译Android.bp来达到定制的目的,面向的读者必须拥有一定的HAL经验和ROM经验。老实的说Android15 官方的目标是移除HIDL,全面采用AIDL实现,我还采用之前android13的vendor.camera-provider-2-4-ext不是一个非常好的例子,但是还好目前的Android15还没有移除干净,保留了HAL的核心服务,所以我就继续保持用vendor.camera-provider-2-4-ext做实战说明(省的要重新花大量的时间在AIDL上做适配),接下来进入正题。

ROM定制-HAL服务集成

参考https://source.android.com/docs/core/camera/external-usb-cameras

正常的ROM定制最好是新建一个product,然后有自己的product编译规则,这是另一个专题,所以本文只对关键的几个mk字段做说明:

//新增产品到镜像中,可以支持library,binary等
PRODUCT_PACKAGES 

//拷贝指定的文件到指定目录中,比如/vendor /system or /system_ext...
PRODUCT_COPY_FILES

常用的还有selinux新增,property新增,rro overlay新增等等

以vendor.camera-provider-2-4-ext为例,因为他是基于camera 2.4的版本,模拟器上启用了2.7和AIDL。所以我需要把对应的camera hal服务都移植到android15中:

其中android.hardware.camera.provider@2.4-external-service就是我们想要启动的服务,找到hardware对应目录的Android.bp实现:

其中我修改了compile_multilib,它可以代表是在32位/64位的架构上生效,或者both都编译。

还有一个是新增vintf_fragments: ["android.hardware.camera.provider.external.xml"]。 vintf在HAL里是一个非常重要的概念涉及到FCM lifecycle。

完成我上面的修改后重新编译android系统,启动模拟器后你就可以在android里看到对应的服务已经启动:

HAL调试与定制

这里我不过多的叙述代码之间的逻辑关系,开发者需要注意的核心是rc文件,xml文件,Android.bp编译文件,然后就是对应的一些debug指令比如lshal和logcat等。上面集成我已经对于xml和bp的修改做了说明,这里就重点再说下rc文件。相关的内容推荐开发者去搜索更多的专题来研究这里的知识,这里本身都牵扯到大量的知识点,需要很多内容来辅导学习。以android.hardware.camera.provider@2.4-external-service.rc为例:

我们可以通过vendor.camera-provider-2-4-ext 服务名来关闭和重启它(值得注意的是adb root启动的话它的用户是root,真实的重启过程权限会有所不同),然后通过logcat识别对应的log信息来做深入的二次定制。

结合上一篇文章内核v4l2loopback的定制,我们新增一个/dev/video节点,然后看重启camera hal服务它有怎么样的表现:

其中v4l2识别我们新增的设备没有权限“CamPrvdr@2.4-external: deviceAdded open v4l2 device /dev/video0 failed:Permission denied”,好的考虑到目前只是一个临时项目,那我手动把设备节点改成0777的权限我们再来看一次效果:

我们本身对于v4l2loopback驱动和vendor.camera-provider-2-4-ext没有做过任何代码的修改,所以会出现很多错误信息:

后面就开始要为驱动和HAL做相应的修改满足我们对于需求的定制。

总结

HAL在很多公司都是一个单独的岗位只需要负责这个领域,更具体点只需要focus在具体的某个功能的HAL,如蓝牙,audio,WiFi等等。所以里面牵扯到非常多的知识点和经验积累,这么短的一章不可能把什么内容都解释清楚,但是希望给各位开发者引入HAL开发的概念,如果有丁点帮助那也已经是非常成功了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值