camera驱动开发所需要具备基础知识,如果你还没有了解过camera模块,那么这些基础必备的知识,将会对你⽐较有⽤,俗话说“磨⼑不误砍柴⼯”,基本功配置好了,相信你在做camera驱动开发过程中肯定得⼼应⼿。
1. 硬件相关
qq等级排行榜⾸先,要学会看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开发板;亲情的名言>徐铮个人资料
发布评论