news 2026/5/30 12:19:43

android-hardware/interfaces/automotive和hardware/libhardware/include/hardware区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
android-hardware/interfaces/automotive和hardware/libhardware/include/hardware区别

Android Automotive HAL 框架对比

1.整体架构层次

应用层 ↓ Framework (CarService, CarManager) ↓ HIDL/AIDL ↓ hardware/interfaces/automotive/ ← 接口定义 ↓ hardware/libhardware/include/hardware/ ← 传统 HAL ↓ 供应商实现 ↓ Linux Kernel

2.hardware/interfaces/automotive/

位置和用途

# Android 代码树位置hardware/interfaces/automotive/ ├── vehicle/ │ ├──2.0/# HIDL 接口定义│ │ ├── IVehicle.h │ │ ├── types.h │ │ └── IVehicleCallback.h │ └──1.0/ ├── can/ │ └──1.0/# CAN 总线接口├── audiocontrol/ │ └──1.0/# 音频控制接口└── sv/ └──1.0/# 共享内存接口

主要特点

  1. 基于 HIDL/AIDL:Android 8.0+ 的新 HAL 架构
  2. 进程隔离:HAL 运行在独立进程
  3. 版本化接口:支持接口版本升级
  4. Binder IPC:跨进程通信

示例代码结构

// IVehicle.h (HIDL 接口) package android.hardware.automotive.vehicle@2.0; interface IVehicle { // 获取车辆属性 get(PropValue prop, get_cb _hidl_cb); // 设置车辆属性 set(PropValue prop); // 订阅事件 subscribe(IVehicleCallback callback, SubscribeOptions options); };

3.hardware/libhardware/include/hardware/

位置和用途

# 传统 HAL 位置hardware/libhardware/include/hardware/ ├── hardware.h# HAL 核心头文件├── sensors.h# 传感器 HAL├── gps.h# GPS HAL├── camera.h# 相机 HAL├── audio.h# 音频 HAL└── hw_module_t.h# 模块定义

主要特点

  1. 传统 HAL 架构:Android 8.0 之前的标准
  2. 动态库形式:.so 库直接加载
  3. C 语言接口:兼容性好
  4. 进程内调用:HAL 在应用进程内运行

示例代码结构

// hardware.htypedefstructhw_module_t{uint32_ttag;uint16_tmodule_api_version;constchar*id;constchar*name;constchar*author;structhw_module_methods_t*methods;}hw_module_t;// 音频 HALstructaudio_hw_device{structhw_device_tcommon;int(*set_voice_volume)(structaudio_hw_device*dev,floatvolume);int(*set_master_volume)(structaudio_hw_device*dev,floatvolume);// ... 更多音频操作};

4.详细对比表

特性hardware/interfaces/automotive/hardware/libhardware/include/hardware/
接口语言HIDL (.hal) / AIDLC 语言
通信方式Binder IPC直接函数调用
进程模型独立进程进程内库
版本管理内置版本控制手动版本管理
安全性SELinux 策略隔离依赖进程边界
兼容性向前兼容二进制兼容
构建系统Android.bpAndroid.mk
调试难度较高(跨进程)较低

5.实际使用示例对比

新架构示例 (Vehicle HAL 2.0)

// Java 层调用IVehiclevehicle=IVehicle.getService();vehicle.get(VehicleProperty.INFO_VIN,(status,value)->{Log.d("VIN: "+value.stringValue);});// 服务端实现 (C++)classVehicleHal:publicIVehicle{Return<void>get(constVehiclePropValue&prop,get_cb _hidl_cb){// 从车辆总线读取数据int32_t value=readCanBus(prop.prop);_hidl_cb(StatusCode::OK,{prop,value});returnVoid();}};
<!-- 权限配置 --><halformat="hidl"><name>android.hardware.automotive.vehicle</name><transport>hwbinder</transport><version>2.0</version><interface><name>IVehicle</name><instance>default</instance></interface></hal>

传统 HAL 示例

// 定义传统 HALstructvehicle_module_t{structhw_module_tcommon;int(*get_vin)(structvehicle_device_t*dev,char*vin,size_tlen);int(*get_speed)(structvehicle_device_t*dev,float*speed);};// 加载和使用intload_vehicle_hal(){consthw_module_t*module;interr=hw_get_module(VEHICLE_HARDWARE_MODULE_ID,&module);vehicle_device_t*dev;err=module->methods->open(module,"vehicle",(hw_device_t**)&dev);charvin[32];dev->get_vin(dev,vin,sizeof(vin));return0;}

6.迁移示例:从传统到新架构

// 传统 HAL (旧)structlegacy_vehicle_device{structhw_device_tcommon;int(*get_property)(intprop,void*value);};// 新架构 HAL (新)#include<android/hardware/automotive/vehicle/2.0/IVehicle.h>using namespace android::hardware::automotive::vehicle::V2_0;class ModernVehicleHal:public IVehicle{public:Return<void>get(constVehiclePropValue&prop,get_cb _hidl_cb){VehiclePropValue result=prop;// 兼容旧接口if(mLegacyHal!=nullptr){intlegacyValue;mLegacyHal->get_property(prop.prop,&legacyValue);result.value.int32Values[0]=legacyValue;}_hidl_cb(StatusCode::OK,result);returnVoid();}private:legacy_vehicle_device*mLegacyHal=nullptr;};

7.在汽车场景的具体应用

车辆属性服务对比

// 新架构:通过 Vehicle HAL 2.0publicclassCarPropertyManager{privateIVehiclemVehicle;publicintgetSpeed(){VehiclePropValuerequest=newVehiclePropValue();request.prop=VehicleProperty.PERF_VEHICLE_SPEED;mVehicle.get(request,(status,value)->{if(status==StatusCode.OK){returnvalue.value.floatValues[0];}});}}// 传统方式:通过 libhardwarepublicclassLegacyCarManager{static{System.loadLibrary("vehicle_hal");}publicnativeintgetSpeed();// 通过 JNI 调用 C HAL}

8.开发建议和选择

何时使用 hardware/interfaces/automotive/

推荐使用新架构的情况

  1. 新项目开发
  2. 需要更好的安全性隔离
  3. 需要接口版本控制
  4. 多供应商集成
  5. Android Automotive OS 开发
  6. 需要与 Framework Service 深度集成

何时使用传统 HAL

可能使用传统 HAL 的情况

  1. 维护旧有代码
  2. 性能要求极高的场景
  3. 简单的硬件抽象
  4. 资源受限的设备
  5. 没有 IPC 开销需求

9.实际项目结构示例

# 现代汽车 HAL 项目结构 packages/services/Car/ ├── service/ │ └── CarService.java ├── vehicle/ │ └── 2.0/ │ ├── default/ │ │ └── Vehicle.cpp │ ├── vts/ │ │ └── VtsHalAutomotiveVehicleTest.cpp │ └── Android.bp └── Android.mk # 传统 HAL 项目结构 hardware/ ├── libhardware/ │ ├── include/hardware/ │ │ └── vehicle.h │ └── modules/vehicle/ │ ├── vehicle.c │ └── Android.mk └── interfaces/automotive/vehicle/1.0/ └── IVehicle.h

10.总结

方面hardware/interfaces/automotive/hardware/libhardware/include/hardware
设计理念现代、安全、可扩展传统、简单、直接
适用场景汽车信息娱乐系统、复杂功能简单硬件抽象、嵌入式系统
发展趋势主推方向,持续更新维护模式,新项目不推荐
学习曲线较陡,需要了解 Binder/HIDL较平缓,C 语言为主
社区支持Google 官方支持,文档丰富社区维护,逐渐淘汰

建议:新项目优先使用hardware/interfaces/automotive/架构,特别是 Android Automotive OS 相关开发。传统 HAL 主要用于维护旧代码或特殊性能需求场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 0:07:27

用Comsol探索水力压裂:井眼应力场与多分支缝应力分布的奥秘

应用comsol分析水力压裂对井眼附近应力场的影响应用comsol分析多分支缝压裂应力分布 在各种应力作用下&#xff0c;井眼围岩会发生应力集中现象&#xff0c;也会发生一定规律下的压缩和拉伸。 具体分析了岩石弹性模量、地应力和井眼液柱压力对应力场的影响。 具体算例如下。 正…

作者头像 李华
网站建设 2026/5/30 22:03:12

Langchain-Chatchat如何优化Embedding计算效率?批处理与GPU加速

Langchain-Chatchat如何优化Embedding计算效率&#xff1f;批处理与GPU加速 在构建企业级本地知识库问答系统时&#xff0c;一个常被忽视却至关重要的环节浮出水面&#xff1a;Embedding 计算的性能瓶颈。当你上传一份百页PDF准备构建私有知识库时&#xff0c;理想中的“秒级响…

作者头像 李华
网站建设 2026/5/30 22:03:06

直驱风机+储能并网实战手记

风力发电&#xff0b;储能并网协同运行模型【含个人笔记、参数选择参考资料】 包含永磁风机发电机、储能系统、单极单相并离网逆变器及其各自控制系统(也可以按照需求改为三相并网) 永磁直驱风机:机侧变流器采用转速外环电流内环的双闭环控制策略&#xff0c;爬山搜索法实现最大…

作者头像 李华
网站建设 2026/5/30 2:35:11

Comsol 实现 IGBT 电热力多物理场仿真探索

comsol建模与仿真 焊接性IGBT、压接型IGBT单芯片、压接型IGBT模块导通的电热力多物理场仿真 累积循环次数仿真 模块截止时的电场仿真在电力电子领域&#xff0c;IGBT&#xff08;绝缘栅双极型晶体管&#xff09;因其出色的性能被广泛应用。而 Comsol 作为一款强大的多物理场仿真…

作者头像 李华
网站建设 2026/5/30 22:03:08

Langchain-Chatchat如何实现跨语言检索?中英文混合文档处理

Langchain-Chatchat如何实现跨语言检索&#xff1f;中英文混合文档处理 在跨国企业、科研机构和法律事务所中&#xff0c;一个常见的痛点是&#xff1a;员工用中文提问&#xff0c;却需要从成百上千页的英文技术文档、年报或论文中查找答案。传统搜索依赖关键词匹配&#xff0c…

作者头像 李华
网站建设 2026/5/30 1:17:22

Langchain-Chatchat支持Markdown格式解析:技术文档处理利器

Langchain-Chatchat 支持 Markdown 格式解析&#xff1a;技术文档处理利器 在现代软件开发和企业知识管理中&#xff0c;技术文档的数量与复杂性正以前所未有的速度增长。从 API 说明到项目 README&#xff0c;从内部 Wiki 到设计草案&#xff0c;信息分散、查找困难已成为团队…

作者头像 李华