Android Camera驱动开发入门必备知识

camera驱动开发所需要具备基础知识,如果你还没有了解过camera模块,那么这些基础必备的知识,将会对你比较有用,俗话说“磨刀不误砍柴工”,基本功配置好了,相信你在做camera驱动开发过程中肯定得心应手。

1. 硬件相关

首先,要学会看datasheet,datasheet文档包含了IC芯片的工作原理。在porting驱动之前,你总得了解IC芯片的时序图,传输数据的一些协议接口和时序图,大概有几路电压,GPIO管脚和clk时钟控制之类的吧。

其次,driver工程师不需要去专研很深的硬件知识,驱动工程师最重要的是要懂得简单的数字电路,毕竟硬件工程师画好的原理图,你能根据电路找到相应Camera硬件连接的GPIO,并根据芯片手册配置GPIO为相应的模式;比如GPIO模式,输入IO或输出IO;或配置成PWM模式;不同的模式这个GPIO的工作方式是不同的;还有Camera DVDD AVDD IOVDD上电控制,和I2C配置这些。

2. Camera驱动

现在市面上,大厂商,像三星,sony,ov一般都会提供对应的驱动文件。但是对应特定项目,我们根据产品的定义,会做专门的定制,所以你得去理解和修改驱动,你要能够修改驱动的能力,那么你就得了解linux驱动最基本的知识。比如ov5640;你要找本Linux驱动相关的书看看,比如《linux设备驱动程序》知道简单的linux设备驱动写法;当然工作中Camera驱动不需要你写的,有参考的可以使用,但是参考驱动一般支持实现录像、拍照功能,别的白平衡、对焦等都需要你去自己调试;camera setting需要你经常根据效果去配置和修改,当发生问题的时候,你得熟悉驱动流程,去debug,这样子你才能够成为一名合格的驱动工程师。

3.V4L2架构

V4L2英文缩写video for linux version 2.

目前高通和三星、MTK和全志这些平台,camera驱动架构都是V4L2架构,但是MTK平台除外,MTK camera驱动架构采用的是自己一套字符设备驱动架构的方式。

从通用性来讲,你要学习V4L2协议,因为驱动导出/dev/video0接口是通过V4L2协议的;上层C的应用也是通过V4L2协议访问/dev/video0的;实际V4L2协议就是通过一些标志linux ioctl()函数和底层驱动通信的;V4L2协议是为了屏蔽各种Camera驱动的不同(比如usb摄像头,mipi接口摄像头)而提供的统一和摄像头驱动通信的规范;

如果,有机会你接触到mtk方案,其实看他们字符设备驱动也比较简单。

4. C++语言

你要知道C++的class的相关知识,最好能看到C++的代码,既然你有C的知识,那把C++的面向对象看懂,知道C++的class就可以了;为什么要懂C++呢?因为Android Camera HAL访问/dev/video0都是用C++写的,二十几个个xxxx.cpp不同的类相互继承实现的;而且你要懂Android HAL层的写法,至少查查资料知道用哪里看;一般都是CameraModule.cpp或CameraHal.cpp;

5. Framework JNI调用

JNI的写法最好知道一些,至少可以抄就可以,因为这些写法都是固定的,因为调试的过程中有时候你一个人要从java层跟踪代码到HAL层再到驱动;

6. Linux系统

你要会用Linux,因为所有的Android源码都是在Linux下编译的;你要知道ARM架构,交叉编译器;比如arm-linux-gcc;知道怎么编译Android和kernel源码;怎么刷机;怎么调试;最好买块带Camera的Android开发板;

 

  • 8
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值