本章开始分析camera框架 主要是自己用来加深理解的 内含HIDL的调用流程
camera provider 启动
android.hardware.camera.provider@2.4-service.rc
路径 hardware/interfaces/camera/provider/2.4/default/android.hardware.camera.provider@2.4-service.rc
跟普通服务类似就是以一个rc文件启动的,在之前的文章中我们分析过rc文件是如何启动服务的
android8.1系统启动过程(四) 解析init.rc_we1less的博客-优快云博客
service camera-provider-2-4 /vendor/bin/hw/android.hardware.camera.provider@2.4-service
class hal
user cameraserver
group audio camera input drmrpc
ioprio rt 4
capabilities SYS_NICE
writepid /dev/cpuset/camera-daemon/tasks /dev/stune/top-app/tasks
在android启动的过程中,init进程调用该脚本启动 camera provider 服务。根据该目录下的 Android.bp 可以知道,其实就是运行该目录下 service.cpp 编译的可执行文件
main
路径 hardware/interfaces/camera/provider/2.4/default/service.cpp
驱动可通过vndbinder与其他HAL模块通信,默认创建直通式的camera provider 服务,在Treble架构下,存在了3个binder设备,分别是/dev/binder、/dev/vndbinder、/dev/hwbinder,上层需要通过binder库来访问这些binder设备,而/dev/binder和/dev/vndbinder都是由libbinder来访问,因此需要指定打开的binder设备。
int main()
{
ALOGI("Camera provider Service is starting.");
// The camera HAL may communicate to other vendor components via
// /dev/vndbinder
android::ProcessState::initWithDriver("/dev/vndbinder");
return defaultPassthroughServiceImplementation<ICameraProvider>("legacy/0", /*maxThreads*/ 6);
}
defaultPassthroughServiceImplementation
路径 system/libhidl/transport/include/hidl/LegacySupport.h
配置binder线程个数,然后调用registerPassthroughServiceImplementation
joinRpcThreadpool参考这篇Android Binder 服务端分析_we1less的博客-优快云博客
template<class Interface>
__attribute__((warn_unused_result))
status_t defaultPassthroughServiceImplementation(std::string name,
size_t maxThreads = 1) {
configureRpcThreadpool(maxThreads, true); //配置binder线程

本文详细解析了Android系统中CameraProvider服务的启动流程,包括通过rc文件启动、binder线程池配置、HIDL接口调用和服务注册过程。
最低0.47元/天 解锁文章
298

被折叠的 条评论
为什么被折叠?



