Android学习14 -- VINF和兼容性矩阵

07-17 1758阅读

周末搞这玩意欲仙欲死,没办法只有看看。VINTF是供应商接口对象(VINTF 对象),准确的说,这个是属于兼容性矩阵概念。。。有点想起了以前看过的一个电影,异次元杀阵。。。

1 基础

这个是谷歌官方的图。

Android学习14 -- VINF和兼容性矩阵

本质上其实就是两部分,设备提供什么能力,系统需要什么能力。然后看两者能否兼容匹配上。这两者都是使用xml进行描述。主要是Android8之后,system和vendor分离,为了确保两者的兼容性搞出来的。举例如下:

设备侧是Manifest描述:

device/VENDOR/DEVICE/manifest.xml



    
    
        
            CONFIG_ANDROID
            y
        
        
            CONFIG_ARM64
            y
        
    
    

系统侧是Matrix描述:

/system/libhidl/manifest.xml



    
        android.hidl.allocator
        hwbinder
        1.0
        
            IAllocator
            ashmem
        
    
    
        27
    
    
        27
    

详细图如下(来自VINTF: manifest.xml | Cool Fish In Glacier):

Manifest类型Makefile Target生成文件..input files (源文件)
System Manifestmake system_manifest.xml/system/etc/vintf/manifest.xmlDEVICE_FRAMEWORK_MANIFEST_FILE + system/libhidl/vintfdata/manifest.xml
Product Manifestmake product_manifest.xml/product/etc/vintf/manifest.xmlPRODUCT_MANIFEST_FILES
Device Manifestmake device_manifest.xml/vendor/etc/vintf/manifest.xmlDEVICE_MANIFEST_FILE
ODM Manifestmake odm_manifest.xml/odm/etc/vintf/manifest.xmlODM_MANIFEST_FILES

我看说的一般是在/vendor/etc/vintf下面增加。一般是device_manifest和device_framework_compatibility_matrix这两个xml文件。

2 服务构建

就实践来说,要增加一个AIDL服务,大的有两个步骤。

1 服务编写

首先是在BP文件中增加对应的XML。vintf_fragments: ["android.hardware.xxx-service.xml"],

在代码中增加该xml,内容如下:

    
        android.hardware.xxx
        1
        Ixxx/default
    

之后正常编译。

2 运行环境搭建

主要是三个文件。

增加系统需要的能力和设备提供的能力。

adb push compatibility_matrix.device.xml /system/etc/vintf/compatibility_matrix.device.xml
adb push compatibility_matrix.xml /vendor/etc/vintf/compatibility_matrix.xml

内容和上面的xml稍微有点区别:

    android.hardware.xxx
    1
    
        Ixxx
        default
    

然后拷贝之前构造服务时候的xml到板子上/vendor/etc/vintf/manifest/中

adb push android.hardware.xxx.xml /vendor/etc/vintf/manifest/android.hardware.xxx.xml

运行服务如果报错的话会说Android servicemanager.cpp: servicemanager: Could not find in the VINTF manifest。

一般就是xml没有拷贝对。

3 验证

在设备端查看提供的能力(HAL):

/system/bin/lshal --init-vintf

在设备端查看提供的能力(AIDL)

service list

4 参考资料

VINTF: manifest.xml | Cool Fish In Glacier

https://source.android.com/docs/core/architecture/vintf/resources?hl=zh-cn

VINTF简介-CSDN博客

清单  |  Android 开源项目  |  Android Open Source Project

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]