安卓机器开机会先加载kernel驱动,上层是先启动CameraProvider加载camerahal。
之后cameraservice会获取cameraprovider。应用调用的时候camera2 api会获取cameraservice,然后通过cameraprovider访问hal,hal最终访问到驱动。
后续文章会说明
cameraprovider启动hal
hal3加载过程
cameraserver如何连接cameraprovider
为了介绍CameraProvider启动过程,有必要简单说下HwServiceManager进程,因为CameraProvider会注册到HwServiceManager中,是各个硬件进程服务的管理器。
HwServiceManager 进程由 init 进程启动脚本hwservicemanager.rc
目录在system/hwservicemanager/hwservicemanager.rc
我们直接看服务main函数,在system/hwservicemanager/service.cpp
int main() {
configureRpcThreadpool(1, true /* callerWillJoin */);//1
sp<ServiceManager> manager = new ServiceManager();
setRequestingSid(manager, true);
if (!manager->add(serviceName, manager)) {
//2
ALOGE("Failed to register hwservicemanager with itself.");
}
TokenManager *tokenManager = new TokenManager();
if (!manager->add(serviceName, tokenManager)) {
ALOGE("Failed to register ITokenManager with hwservicemanager.");
}
// Tell IPCThreadState we're the service manager
sp<BnHwServiceManager> service = new BnHwServiceManager(manager);//3
IPCThreadState::self()->setTheContextObject(service);
// Then tell the kernel
ProcessState::self()->becomeContextManager(nullptr, nullptr);
int rc = property_set("hwservicemanager.ready", "true");
if (rc) {
ALOGE("Failed to set \"hwservicemanager.ready\" (error %d)

最低0.47元/天 解锁文章
884

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



