Qualcomm 8X camera daemon进程浅析
一个camera的守护进程在init进程中,开启的一个service
此线程与具体的sensor相关联,负责对sensor进行具体细节的操作
此为daemon进程的主线程,从server node收集事件,纷发给mctl thread,根据config的name,与server节点进行队列,不断轮询其事件队列,获取command,进行全局处理
mctl_pp_poll_thread
mctl thread
main daemon thread
Daemon
此线程与kernel中config节点进行通信,轮询节点的消息队列中获得command,进行全局处理
(每一个config节点都对应一个mctl thread)

抽象层到内核层的大致流程:
抽象层主要通过server node和config node将command下到内核,对应的节点驱动将command通过事件队列进行管理。
而daemon进程通过开启对应的线程,不停的对事件队列进行轮询,处理上层下的command
在main daemon thread中重要的任务:
一:将sensor操作关联的硬件组件加载进来,还要加载一些必备的库,为camera的正式工作铺垫环境:
① AXI_comp_create
② sensor_comp_create
③ flash_led_comp_create
④ flash_strobe_comp_create
⑤ CAMIF_comp_create
⑥ VFE_comp_create
⑦ ACTUATOR_comp_create
⑧ eeprom_comp_create
⑨ mctl_load_stats_proc_lib
⑩ mctl_load_frame_proc_lib
二.线程的循环工作
线程,顾名思义,肯定有一个封闭的循环体,在循环体中做一些核心的操作
而Daemon进程的主线程轮询服务节点的event queue,获取事件,纷发给各自的mctl thread
Daemon进行的主线程主要处理一下基类事件“
① MSM_GES_RESP_V4L2 :
Open:主要进行初始化,铺垫环境,开启处理camera细节活动的线程
Close:进行一些善后工作
② MSM_CAM_RESP_V4L2:处理open和colse
Open:主要进行初始化,铺垫环境,开启处理camera细节活动的线程
Close:进行一些善后工作
③ 其他一些事件都是通过pipe通信直接写入到①②两点创建的线程中(send command through pipe and wait for config to return)
在mctl thread中重要的任务:
一. 打开confing节点文件
二. 调用create_camfd_receive_socket猜测是与硬件抽象层进行直接通信的
三. 创建mctl_pp_poll_thread线程,
四. 初始化camera的几个feature:
①zoom_init_ctrl
②bestshot_init
③hdr_init
五.通过pipe通信获取server节点的控制事件,事件由Daemon进程的主控线程获取并且通过pipe传递过来
六.通过监测config节点的事件获取config节点对应的控制command
主要监测三类事件:
① MSM_CAM_RESP_DIV_FRAME_EVT_MSG
② MSM_CAM_RESP_MCTL_PP_EVENT
③ MSM_CAM_RESP_STAT_EVT_MSG
将这三个事件以command的形式,通过pipe通信发送到(一)中创建的PP线程中
在mctl_pp_poll_thread中重要的任务:
一:对几个pipe文件进行监测,与其他线程进行交互
几种事件:
①/* Events on pipe between mctl thread - mctl pp thread */
②/* Events on user created socket */
③/* Events on mctl pp node */
④/* Events on pipe between mctl pp thread and c2d thread */