【IVI】VehicleService启动

android12-release
Android Automotive OS知识体系

1、rc文件android.hardware.automotive.vehicle@2.0-service.rc

VehicleService进程名:vendor.vehicle-hal-2.0
bin文件:/vendor/bin/hw/android.hardware.automotive.vehicle@2.0-service
对应启动入口:hardware/interfaces/automotive/vehicle/2.0/default/VehicleService.cpp

hardware/interfaces/automotive/vehicle/2.0/default/android.hardware.automotive.vehicle@2.0-service.rc

service vendor.vehicle-hal-2.0 /vendor/bin/hw/android.hardware.automotive.vehicle@2.0-serviceclass haluser vehicle_networkgroup system inet

hardware/interfaces/automotive/vehicle/2.0/default/android.hardware.automotive.vehicle@2.0-service.xml

<manifest version="1.0" type="device"><hal format="hidl"><name>android.hardware.automotive.vehicle</name><transport>hwbinder</transport><version>2.0</version><interface><name>IVehicle</name><instance>default</instance></interface></hal>
</manifest>

2、VehicleService.cpp#main()启动

  • EmulatedVehicleConnector继承VehicleHalClient、VehicleHalServer(即是IVehicleServer、IVehicleClient
  • hal = std::make_unique<impl::EmulatedVehicleHal>(store.get(), connector.get(), userHal)与VehicleHal通行,EmulatedVehicleHal最终继承VehicleHal
  • configureRpcThreadpool、joinRpcThreadpool 组队出现的东西,libhidl 库,用于自动生成HIDL语言,并辅助服务添加到 hwbinder域
  • VehicleHalManager 继承IVehicle ,再查看service->registerAsService()注册到 /dev/hwbinder 并添加到 defaultServiceManager()
int main(int /* argc */, char* /* argv */ []) {auto store = std::make_unique<VehiclePropertyStore>();auto connector = std::make_unique<impl::EmulatedVehicleConnector>();auto userHal = connector->getEmulatedUserHal();auto hal = std::make_unique<impl::EmulatedVehicleHal>(store.get(), connector.get(), userHal);auto emulator = std::make_unique<impl::VehicleEmulator>(hal.get());auto service = std::make_unique<VehicleHalManager>(hal.get());connector->setValuePool(hal->getValuePool());configureRpcThreadpool(4, true /* callerWillJoin */);ALOGI("Registering as service...");status_t status = service->registerAsService();if (status != OK) {ALOGE("Unable to register vehicle service (%d)", status);return 1;}ALOGI("Ready");joinRpcThreadpool();return 1;
}

2.1 libhidl、libhwbinder路径

Binder 域
system/libhidl/transport/HidlTransportSupport.cpp
system/libhidl/transport/include/hidl/HidlTransportSupport.h
system/libhidl/transport/ServiceManagement.cpp
system/libhidl/transport/include/hidl/ServiceManagement.h

system/libhwbinder/ProcessState.cpp
system/libhwbinder/IPCThreadState.cpp

2.2 hidl-gen自动生成代码文件Bp、Bn端:types.hal、IVehicle.hal、IVehicleCallback.hal


参考:

// This file is autogenerated by hidl-gen -Landroidbp.package {// See: http://go/android-license-faq// A large-scale-change added 'default_applicable_licenses' to import// all of the 'license_kinds' from "hardware_interfaces_license"// to get the below license kinds://   SPDX-license-identifier-Apache-2.0default_applicable_licenses: ["hardware_interfaces_license"],
}hidl_interface {name: "android.hardware.automotive.vehicle@2.0",root: "android.hardware",srcs: ["types.hal","IVehicle.hal","IVehicleCallback.hal",],interfaces: ["android.hidl.base@1.0",],gen_java: true,
}

3、时序图

4. 上层调用

packages/services/Car/service/src/com/android/car/CarService.java

private static IVehicle getVehicle() {final String instanceName = SystemProperties.get("ro.vehicle.hal", "default");try {return android.hardware.automotive.vehicle.V2_0.IVehicle.getService(instanceName);} catch (RemoteException e) {Slog.e(CarLog.TAG_SERVICE, "Failed to get IVehicle/" + instanceName + " service", e);} catch (NoSuchElementException e) {Slog.e(CarLog.TAG_SERVICE, "IVehicle/" + instanceName + " service not registered yet");}return null;
}

【IVI】VehicleService启动相关推荐

  1. 【IVI】车载设备硬件抽象层VHAL

    [IVI]车载设备硬件抽象层VHAL android12-release Android Automotive OS知识体系 Android 知识体系 1.概要   车载硬件抽象层 (HAL) 接口会 ...

  2. 【IVI】CarService启动

    [IVI]CarService启动 android12-release Android Automotive OS知识体系 Android 知识体系 1.CarServiceHelperService ...

  3. 【IVI】CarServiceHelperService启动

    [IVI]CarServiceHelperService启动 android12-release Android Automotive OS知识体系 Android 知识体系 1.SystemServ ...

  4. android x86启动卡死,[更新]Android-x86启动成功,但是还有点小问题。

    在放着4个版本的MeeGo优盘上再加上一个android-x86-2.2-generic.iso.方法跟MeeGo的一样的操作过程,同时对启动参数也做了一些小修改.结果如下: android-x86- ...

  5. 【IVI】Car.java获取Car相关服务和对应管理器

    [IVI]Car.java获取Car相关服务和对应管理器 android12-release Android Automotive OS知识体系 Android 知识体系 1.获取Car对象方式 pa ...

  6. 01-座舱IVI关键技术点

    背景 针对座舱/IVI领域,个人汇总了关键技术点. 1. 快速启动 1.1 BLCR技术 1.2 STD/STR(休眠技术) 1.3 开机速度优化 2. 快速倒车 2.1 快速显示 2.2 标定 2. ...

  7. linux环境下nacos的安装+启动,阿里云服务器安装nacos

    nacos安装+启动(linux环境): 基础:安装java环境 官网下载压缩包:如 nacos-server-1.2.1.tar.gz 放在自定义目录下 # 解压 tar -xvf nacos-se ...

  8. 两步完成项目定时启动,java项目定时启动

    两步完成项目定时设置: 在需要定时启动或运行的方法上面加上注解@Scheduled //当天只跑一次 @Scheduled(cron = "0 40 21 * * ?") 在启动类 ...

  9. Solr部署如何启动

    Solr部署如何启动 Posted on 一月 10, 2013 in: Solr入门|评论关闭 我刚接触solr,我要怎么启动,这是群里的朋友问得比较多的问题, solr最新版本下载地址: http ...

最新文章

  1. 码农新机会!2019-2020行业调查报告出炉,这个领域程序员缺口很大!
  2. poj1018 Communication System (有道翻译完全拯救不了)
  3. 【HBase从入门到精通系列】如何避免HBase写入过快引起的各种问题
  4. 虚拟机网络驱动(共享文件夹)不见了的解决方案-适用于win7~win10 and Windows Server 2008~Windows Server 2012R2
  5. 是时候了!网易首谈AI加持的AR
  6. linux下看io等待时间,Linux下用iostat探测IO使用情况
  7. Abaqus: 云图设置
  8. .netcore获取微信openid与unionid方法
  9. wps右键失效_鼠标点击右键没有反应怎么办
  10. 无盘服务器吃鸡卡,无盘新手必备知识
  11. 每日一犬 · 哈瓦那犬
  12. Android 应用(5)——android10.0升级webview浏览器内核版本
  13. *皮亚诺关于公理4的一段语录解析 皮亚诺读后之六
  14. org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing
  15. 《人月神话》8 胸有成竹(Chaptor 8.Calling the Shot -The Mythical Man-Month)
  16. 高效持续交付的7大原则
  17. 视频H265格式压缩,软件压缩方法,硬件的没有条件,没法测试。
  18. [J2EE][shiro][授权和认证框架]
  19. 使用RDO Packstack在CentOS 8上安装OpenStack Victoria
  20. 水果网上销售平台_新闻和完美的推销平台

热门文章

  1. 蓝桥杯 基础练习 字母图形c++
  2. 英语情景对话计算机的优缺点,实用型英语日常对话分享
  3. python风格代码荟萃
  4. 用qt做网易云音乐--搜索框实现
  5. spring cloud gateway [DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144]
  6. ucenter avatar.php,UCenter版本Discuz!头像转换工具详解
  7. 谷歌音乐批量下载利器 ubuntu
  8. 为什么中国人的发音和老外的不一样
  9. STRUTS2核心控制器 FilterDispatcher
  10. ssl 客户端证书验证_SSL客户端身份验证:这是信任的问题