android vendor接口,HIDL众多service在那启动的--/vendor/etc/init/android.hardware.*@2.0-service.rc...

优化开机速度--抓log发现不少用不着的servicejava

[ 22.577559] c3 init: Parsing directory /vendor/etc/init...

[ 22.583263] c3 init: Parsing file /vendor/etc/init/android.hardware.audio@2.0-service.rc...

[ 22.592402] c3 init: Parsing file /vendor/etc/init/android.hardware.biometrics.fingerprint@2.1-service.rc...

[ 22.603000] c3 init: Parsing file /vendor/etc/init/android.hardware.bluetooth@1.0-service.rc...

[ 22.612471] c3 init: Parsing file /vendor/etc/init/android.hardware.camera.provider@2.4-service.rc...

[ 22.622456] c3 init: Parsing file /vendor/etc/init/android.hardware.cas@1.0-service.rc...

[ 22.631375] c3 init: Parsing file /vendor/etc/init/android.hardware.configstore@1.0-service.rc...

[ 22.640973] c3 init: Parsing file /vendor/etc/init/android.hardware.drm@1.0-service.rc...

[ 22.650100] c3 init: Parsing file /vendor/etc/init/android.hardware.dumpstate@1.0-service.rc...

[ 22.659732] c3 init: Parsing file /vendor/etc/init/android.hardware.gatekeeper@1.0-service.rc...

[ 22.669427] c3 init: Parsing file /vendor/etc/init/android.hardware.gnss@1.0-service.rc...

[ 22.678653] c3 init: Parsing file /vendor/etc/init/android.hardware.graphics.allocator@2.0-service.rc...

[ 22.689081] c3 init: Parsing file /vendor/etc/init/android.hardware.graphics.composer@2.1-service.rc...

[ 22.699269] c3 init: Parsing file /vendor/etc/init/android.hardware.health@1.0-service.rc...

[ 22.708675] c3 init: Parsing file /vendor/etc/init/android.hardware.keymaster@3.0-service.rc...

[ 22.718172] c3 init: Parsing file /vendor/etc/init/android.hardware.light@2.0-service.rc...

[ 22.727480] c3 init: Parsing file /vendor/etc/init/android.hardware.media.omx@1.0-service.rc...

[ 22.737140] c3 init: Parsing file /vendor/etc/init/android.hardware.memtrack@1.0-service.rc...

[ 22.746312] c3 init: Parsing file /vendor/etc/init/android.hardware.sensors@1.0-service.rc...

[ 22.755606] c3 init: Parsing file /vendor/etc/init/android.hardware.usb@1.1-service.rc...

[ 22.764512] c3 init: Parsing file /vendor/etc/init/android.hardware.vibrator@1.0-service.rc...

[ 22.773805] c3 init: Parsing file /vendor/etc/init/android.hardware.wifi@1.0-service.rc...

想着之前都是在init.rc中把这些脚本import解析执行,搜了一大圈没找到,又去SystemServer.java中找,也没找到,回过头分析log,“Parsing directory”  找到python

./core/init/init_parser.cpp: LOG(INFO) << "Parsing directory " << path << "...";

bool Parser::ParseConfig(const std::string& path) {

if (is_dir(path.c_str())) {

return ParseConfigDir(path);

}

return ParseConfigFile(path);

}

继续搜索android

std::string bootscript = GetProperty("ro.boot.init_rc", "");

if (bootscript.empty()) {

parser.ParseConfig("/init.rc");

parser.set_is_system_etc_init_loaded(

parser.ParseConfig("/system/etc/init"));

parser.set_is_vendor_etc_init_loaded(

parser.ParseConfig("/vendor/etc/init"));

parser.set_is_odm_etc_init_loaded(parser.ParseConfig("/odm/etc/init"));

} else {

parser.ParseConfig(bootscript);

parser.set_is_system_etc_init_loaded(true);

parser.set_is_vendor_etc_init_loaded(true);

parser.set_is_odm_etc_init_loaded(true);

static void import_late(const std::vector<:string>& args, size_t start_index, size_t end_index) {

Parser& parser = Parser::GetInstance();

if (end_index <= start_index) {

// Fallbacks for partitions on which early mount isn't enabled.

if (!parser.is_system_etc_init_loaded()) {

parser.ParseConfig("/system/etc/init");

parser.set_is_system_etc_init_loaded(true);

}

if (!parser.is_vendor_etc_init_loaded()) {

parser.ParseConfig("/vendor/etc/init");

parser.set_is_vendor_etc_init_loaded(true);

}

if (!parser.is_odm_etc_init_loaded()) {

parser.ParseConfig("/odm/etc/init");

parser.set_is_odm_etc_init_loaded(true);

}

那请问 /vendor/etc/init 是在上面蓝色仍是红色出解析的呢?c++

接口和软件包

HIDL 是围绕接口进行编译的,接口是面向对象的语言使用的一种用来定义行为的抽象类型。每一个接口都是软件包的一部分。git

软件包

软件包名称能够具备子级,例如 package.subpackage。已发布的 HIDL 软件包的根目录是 hardware/interfaces 或 vendor/vendorName(例如 Pixel 设备为 vendor/google)。软件包名称在根目录下造成一个或多个子目录;定义软件包的全部文件都位于同一目录下。例如,package android.hardware.example.extension.light@2.0 能够在 hardware/interfaces/example/extension/light/2.0 下找到。shell

下表列出了软件包前缀和位置:ubuntu

软件包前缀

位置

android.hardware.*

hardware/interfaces/*

android.frameworks.*

frameworks/hardware/interfaces/*

android.system.*

system/hardware/interfaces/*

android.hidl.*

system/libhidl/transport/*

软件包目录中包含扩展名为 .hal 的文件。每一个文件均必须包含一个指定文件所属的软件包和版本的 package 语句。文件 types.hal(若是存在)并不定义接口,而是定义软件包中每一个接口能够访问的数据类型。架构

如今删除部分serveiceapp

hidl-gen工具

在Treble架构中,常常会提到HIDL,首先介绍和HIDL相关的一个工具hidl-gen,系统定义的全部的.hal接口,都是经过hidl-gen工具转换成对应的代码。好比hardware/interfaces/power/1.0/IPower.hal,会经过hidl-gen转换成out/soong/.intermediates/hardware/interfaces/power/1.0/android.hardware.power@1.0_genc++/gen/android/hardware/power/1.0/PowerAll.cpp文件,为了深刻了解,介绍相关原理,首先分析hidl-gen。composer

hidl-gen源码路径:system/tools/hidl,是在ubuntu上可执行的二进制文件。

使用方法:hidl-gen -o output-path -L language (-r interface-root) fqname

例子:

hidl-gen -Lmakefile -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transpor

diff --git a/update-base-files.sh b/update-base-files.sh

index 1eb6b51..b5b1a99 100755

--- a/update-base-files.sh

+++ b/update-base-files.sh

@@ -22,9 +22,9 @@ options="-Lexport-header \

hidl-gen $options \

-o hardware/libhardware/include/hardware/sensors-base.h \

android.hardware.sensors@1.0

-hidl-gen $options \

- -o hardware/libhardware/include/hardware/nfc-base.h \

- android.hardware.nfc@1.0

+#hidl-gen $options \

+# -o hardware/libhardware/include/hardware/nfc-base.h \

+# android.hardware.nfc@1.0

hidl-gen $options \

-o hardware/libhardware/include/hardware/gnss-base.h \

android.hardware.gnss@1.0

参考:

https://source.android.com/devices/architecture/hidl/interfaces

https://blog.csdn.net/xiaosayidao/article/details/75577940

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值