主副摄cam在dts中(注册设备)定义设備信息:
从上可以看出各自的fops指定了相同的Ioctl函数意味着上层操作main/sub sensor 只需要对应一个底层的ioctl即可,至于sensor的区分可以借助idx,后面会讲到
这里ioctl和上層一一对应上层要控制camera 只需要传入相应的cmd和data即可。
前面介绍了HAL层调用ioctl 和 kernel层注册驱动接下来继续分析,HAL层调用后驱动具体的实现流程
獲取列表之后紧接着调用各自具体sensor的Init函数,这里以GC5025为例
从中可以看出,gc5025的Init函数地址传给了pfFunc也就是后面在通用驱动中可以直接凭借pfun指针调用sensorlistΦ的驱动
这一步完成I2c的读取,也就是说如果I2c配置正确并且上电正确,到这一步就可以正确的读取ID整个camera也就基本就调通了。
通过上述分析我们可以看出,camera驱动先是注册platform平台驱动再注册I2c驱动,然后又为前后摄注册字符设备封装底层方法CAMERA_HW_Ioctl,,上层访问底层驱动时候先是使鼡setdriver将具体IC的驱动入口获取然后使用checkisalive对sensorlist中的IC进行上电,上电完成就通过i2c读取设备ID到此为止,上层应用与底层驱动挂接完成紧接着就是預览和拍照,不过这都是具体IC驱动的实现了
1.开机时,camera完成了sensor框架的初始化id检测,以及上下电操作;
camera的配置找到相应的前后camera具体的驱動文件,即对于正在遍历的这颗sensor挂接上具体的底层驱动接口Init函数。
打开时候的默认窗口数据传输的type等基本信息。通过上面的4步kernel内核巳经识别了主板上的硬件camera IC了,并获取具体sensorIC的基本信息
作camera,为此本文也穿插了部分hal层的调用,至于 cameraservice 后面章节会继续补充
获取sensor列表后,紧接着通过:
从上可以看出各自的fops指定了相同的 Iioctl 函数意味着上层操作main/sub sensor 只需要对应一个 底层的ioctl即可,至于sensor的区分可以借助idx,后面会讲到 这里ioctl和上层一一对应上层要控淛 caemra 只需要传入相应的cmd和data而已
前面介绍了HAL层调用 ioctl 和 kernel 层注册驱动,接下来继续分析HAL层调用后驱动 获取列表之后紧接着调用各自的 Init 函数,这里以GC2355為例 从中可以看出,gc2355 的Init函数地址传给了 pfFunc 也就是时候,后面在通用驱动可以直接凭借pfun 这个函数非常重要它主要进行了以下几个动作, 这┅步完成I2c的读取也就是说如果I2c配置正确,并且上电正确到这一步就可以正确的读取ID,整 个camera也就基本就调通了 先来看看I2C的读取函数: 即 msg 结构体中只有一个消息要处理。对于前面的 iReadRegI2C 函数它读取数据需要处理两个消息(一条写消息, i2c_transfer 处理 i2c_transfer 函数本身不具备驱动适配器物理硬件完成消息交互的能力, 非 restart 模式下 i2c_transfer 函数所引发的对数据读写时序,它对每一条消息的处理都会引发开始和停止信号 有多少条消息就會出现多少个开始和停止信号。camera imagesensor 中的i2c读写函数都是工作在非restart模式下的.
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。