Android Camera 驱动开发入门必备知识有哪些?

Android Camera 驱动开发入门必备知识有哪些?,第1张

1:硬件相关:简单的数字电路要懂,看的懂电路图(这个很简单),简败早能根据电路找到相应Camera硬件连接的GPIO,并根据芯片手册配置GPIO为相应的模式;比如GPIO模式,输入IO或输出IO;或配置成PWM模式;不同的模式这个GPIO的工作方式是不同的;

2:Camera驱动:比如ov5640;你要找本Linux驱动相关的书看看,比如《linux设备驱动程序》知道简单的linux设备驱动写法;当然工作中Camera驱动不需要你写的,有参考的可以使用,但是参考驱动一般支持实现录像、拍照功能,别的白平衡、对焦等都需要你去自己调试;

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

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

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

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

内核中驱动我想硬件商会提供一个实现了基础功能的代码包(纯 C),你可能需要做些移植或 debug 工作。但像 HTC 的连拍功能,很可能是 HTC 开发人员自己实现的,而不是高通(至今未在高通内核源 Codeaurora 中见到过连拍补丁的提交)。相机资源在 Android 内核中是在主板驱动(board-xxx.c)中定义的,搏正比如一些属性,io 地址,内存映射段(这是内核预分配的一段连续地址,为了提高载入速度,比如高通的 PMEM_ADSP),指定驱动模块名基携悔等。这些定义会在相机驱动加载时用到。因为你比较熟悉 C 语言,如果有 Linux 内核调试经验的话,相信理解这部分内容并不太困难。

而 HAL 驱动库通常也都有蓝本可参考,需要实现的接口与细节在 Google Android 开发者文档中都有说明呢,基本上是将 frameworks 中关于相机头文件中定义的函数一一实现;这部分一般是 C++ 完成的。HAL 与内核相机模块通讯用得最多的是 ioctl 直接申请资源,所以你可能需要找份内核驱动开发文档学习下如何添加自己的 ioctl 函数。关于相机启动时 HAL 中函数的调用关系,网上可找到很多分析博文。

我所知道的大隐肆概就这些,细节没法说也没能力说清楚了。

像荣品电子的6818开发板、胡绝4418开发板都属于中低端,5260开发板属于中高端。当然,要更高端的开发板也有,不过一般做研发、自学这些都已经够了。主要是根据你的学习目的和要求来选择,还有费用水平。

驱动开发的技巧:

驱动物枝开发有套路的不管是用户态驱动还是内核态驱动,基本按照这个套路走,就不会有大问题。特别是初级用户态驱动,是一层很薄的软件,就像一个洋葱剥几层就看到最里面的东西,没太多技术。大部分驱动由于主要做控制和初始化,涉及不裤蚂姿到复杂的算法,所以其实编码阶段大部分都不会太难。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8242415.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存