具体的说来,高通msm系列的android方案中,camera子系统有一个mm-camera-daemon的服务进程是开机自动运行的。它也是很多人诟病的一个东西:太耗电了。为什么要这么设计在(https://www.mail-archive.com/linux-media%40vger.kernel.org/msg26091.html)有明确的答案,摘抄其关键部分如下:
For MSM camera IC, significant portion of image processing and optimization codes are proprietary, so they cannot sit in kernel space. This plays an important role when making design decisions.
其大致意思是,daemon是介于应用和驱动之间翻译ioctl的中间层(委托处理),其目的是将VFE/ISP具体操作策略的私有化代码封闭,所以才会弄出这么一个感觉怪怪的东东。
在驱动设计中,存在msm-config和msm-camera两种model的media controller,前者用于获取事件通知v4l2驱动信息,后者用于获取sensor操作v4l2驱动信息。一个完整的调用流程大致是:app==>v4l2(stream)==>daemon==>v4l2(control)==>app
说明:
1、app到daemon主要是在v4l2(stream)中事件通知方式进行的,对于map/unmap则直接通过domain socket方式进行
2、daemon到app是通过v4l2(control)的事件通知机制进行的
3、v4l2(stream)是通过msm-camera获取到相关信息的,v4l2(control)是通过msm-config获取到相关信息的
分析:
在android中,其实完全可以将私有代码封闭在HAL中,而不用再弄那么一个daemon出来。之所以这样,估计是因为金窝银窝不如自己的狗窝吧。
For MSM camera IC, significant portion of image processing and optimization codes are proprietary, so they cannot sit in kernel space. This plays an important role when making design decisions.
其大致意思是,daemon是介于应用和驱动之间翻译ioctl的中间层(委托处理),其目的是将VFE/ISP具体操作策略的私有化代码封闭,所以才会弄出这么一个感觉怪怪的东东。
在驱动设计中,存在msm-config和msm-camera两种model的media controller,前者用于获取事件通知v4l2驱动信息,后者用于获取sensor操作v4l2驱动信息。一个完整的调用流程大致是:app==>v4l2(stream)==>daemon==>v4l2(control)==>app
说明:
1、app到daemon主要是在v4l2(stream)中事件通知方式进行的,对于map/unmap则直接通过domain socket方式进行
2、daemon到app是通过v4l2(control)的事件通知机制进行的
3、v4l2(stream)是通过msm-camera获取到相关信息的,v4l2(control)是通过msm-config获取到相关信息的
分析:
在android中,其实完全可以将私有代码封闭在HAL中,而不用再弄那么一个daemon出来。之所以这样,估计是因为金窝银窝不如自己的狗窝吧。