高通camera daemon進程
1.概述
高通在Android的camera架構中,依舊沿用了其傳統的方式,將其自身的一些處理放在一個daemon進程中。這部分內容出於應用於driver之間,是為了保護自身及硬件廠商的利益而專門弄出來的一個東東。其它各家平台也采用類似的方式將這部分的處理放在HAL層處理。
2.進程的入口
做為一個單獨的進程,那肯定是有其main函數入口的。在vendor\qcom\proprietary\mm-camera\mm-camera2\server-imaging\server.c文件中可以看到這個main函數。在這個函數中主要做了以下幾件事情。
1.找到服務節點的名字並打開此節點
get_server_node_name(serv_hal_node_name)
......
hal_fd->fd[0] = open(dev_name, O_RDWR | O_NONBLOCK); //這里dev_name為節點名如"/dev/serv_hal_node_name"
2.初始化模塊。目前有sensor、iface、isp、stats、pproc及imglib六個模塊(見筆記一)
server_process_module_init();
3.進入主循環來處理來自HAL及MCT的事件及消息,處理完之后的結果反饋給kernel(msm.c)
RD_FD_HAL
----> server_process_hal_event(&event)。此函數如果返回真,表示事件消息已經傳給了MCT,這時不需要發送CMD ACK給kernel,因為MCT處理結束后會發出通知。如果返回假,表示沒有傳到MCT,此時需要立即發送CMD ACK到kernel,以便HAL發送此消息的線程阻塞住。
RD_DS_FD_HAL —— 通過domain socket傳自HAL的消息
----> server_process_hal_ds_packet(fd_info->fd
RD_PIPE_FD_MCT —— 來自media controller的消息