
Camera驱动学习
Camera
来自南陵县的平头哥
天下熙熙,皆为利来;天下攘攘,皆为利往。
展开
-
26.学习Camera之——PDAF(相位对焦)的基本原理
在自动对焦的时候总是有一个困惑,知道图像是不清楚的,但是lens应该向前还是向后移动呢?总是要前后移动lens一下才知道,普通的反差法对焦就是这么做的,爬山嘛。PDAF的出现就是为了解决这个lens移动的问题,可以根据图像,预判lens运动的方向。PDAF最早运用在单反上,已经是非常成熟的技术了,原理如下图。左图为CCD在焦后的情况,右图为焦前。当CCD在焦后时,在线阵CCD1和CCD2上会发现聚焦点CCD1的在左,反之,则聚焦点CCD2的在左(图中红色标记的光线)。这种方法需要加.原创 2021-12-06 17:51:00 · 8818 阅读 · 3 评论 -
Camera HAL3的整体架构和流程
Camera的整体架构上图是Google官方的Camera架构,Google封装了HAL层接口:ICameraProvider, ICameraDevice, ICameraDeviceSession。这几个接口的作用如下:ICameraProvider:用于枚举单个设备并管理其状态。ICameraDevice:相机设备接口。ICameraDeviceSession:活跃的相机设备会话接口。MTK HAL3结构主要实现了这几个接口, CameraProviderImpl实现了IC.原创 2022-03-16 11:13:53 · 3117 阅读 · 0 评论 -
Camera 服务启动流程简析
Camera 服务启动流程概览 cameraserver 与 provider 这两个进程启动、初始化的调用逻辑,如下图总体逻辑顺序:provider 进程启动,注册;cameraserver 进程启动,注册,初始化;cameraserver 获取远端 provider(此时实例化 CameraProvider 并初始化)。上图中,实线箭头是调用关系。左边是 cameraserver 进程中的动作,右边则是 provider 进程中的动作,它们之间通过 ICameraPro.原创 2022-03-16 16:42:14 · 1528 阅读 · 0 评论 -
25.学习Camera之——OTP
Camera之OTP随着5Meg 、8Meg、12Meg 等高像素摄像头在手机中的应用越来越广,终端客户对camera的成像效果和品质要求越来越高,如何提升摄像头模组的一致性和各方面的性能已显得尤为重要。今天就为大家介绍在高像素模组中被越来越广泛应用的OTP技术。1. 何谓OTP全称:OTP(One Time Programmable)MCU的一种存储器类型,意即一次性编程。多是采用融丝结构,编程过程是不可逆的破坏活动。2. 优缺点相对于传统的公司采用的eeprom而言,OTP具有价.原创 2021-12-06 17:30:15 · 2352 阅读 · 0 评论 -
24.学习Camera之——高通-Camera多模组兼容方案
一、需求工作中,经常遇到这样的需求:sensor相同模组厂不同(意味着走线、fpc、镜头、组装等不相同)这时候,效果的同事需要做针对不同模组厂同一颗sensor进行效果调试。效果参数是2份,即做兼容!如果你只兼容2个模组厂生产的同一颗sensor,那么直接让2家模组厂区分sensor_id就可以了!然后驱动代码搞2份,sensor_id和效果文件区别一下就行了!但是如果有3家甚至更多的模组厂呢,就无法根据sensor_id来区分了,因为sensor_id的地址只能是2个!(ps:为啥.原创 2021-12-06 17:24:32 · 1308 阅读 · 0 评论 -
16.学习Camera之——V4L2 driver -整体架构
字符设备驱动程序核心:V4L2本身就是一个字符设备,具有字符设备所有的特性,暴露接口给用户空间。V4L2 驱动核心:主要是构建一个内核中标准视频设备驱动的框架,为视频操作提供统一的接口函数。平台V4L2设备驱动:在V4L2框架下,根据平台自身的特性实现与平台相关的V4L2驱动部分,包括注册video_device和v4l2_dev。具体的sensor驱动:主要上电、提供工作时钟、视频图像裁剪、流IO开启等,实现各种设备控制方法供上层调用并注册v4l2_subdev。1 从字符设备开始:熟悉.原创 2021-12-06 14:36:08 · 2909 阅读 · 0 评论 -
19.学习Camera之——相机驱动层–V4L2框架解析
相机驱动层–V4L2框架解析一、概览相机驱动层位于HAL Moudle与硬件层之间,借助linux内核驱动框架,以文件节点的方式暴露接口给用户空间,让HAL Module通过标准的文件访问接口,从而能够将请求顺利地下发到内核中,而在内核中,为了更好的支持视频流的操作,早先提出了v4l视频处理框架,但是由于操作复杂,并且代码无法进行较好的重构,难以维护等原因,之后便衍生出了v4l2框架。按照v4l2标准,它将一个数据流设备抽象成一个videoX节点,从属的子设备都对应着各自的v4l2_su.原创 2021-12-06 15:27:47 · 3312 阅读 · 2 评论 -
17.学习Camera之——Linux V4L2驱动架构解析与开发导引
众所周知,linux中可以采用灵活的多层次的驱动架构来对接口进行统一与抽象,最低层次的驱动总是直接面向硬件的,而最高层次的驱动在linux中被划分为“面向字符设备、面向块设备、面向网络接口”三大类来进行处理,前两类驱动在文件系统中形成类似文件的“虚拟文件”,又称为“节点node”,这些节点拥有不同的名称代表不同的设备,在目录/dev下进行统一管理,系统调用函数如open、close、read等也与普通文件的操作有相似之处,这种接口的一致性是由VFS(虚拟文件系统层)抽象完成的。面向网络接口的设备.原创 2021-12-06 14:58:03 · 2040 阅读 · 0 评论 -
20.学习Camera之——深入理解Android相机体系结构
文章目录及链接文章 链接相机简史 https://blog.youkuaiyun.com/u012596975/article/details/107136261安卓相机架构概览 https://blog.youkuaiyun.com/u012596975/article/details/107136568应用层 https://blog.youkuaiyun.com/u012596975/article/details/107137110服务...原创 2021-12-06 15:32:45 · 2521 阅读 · 0 评论 -
18.学习Camera之——V4L2视频输入框架概述
V4L2框架简介几乎所有的设备都有多个 IC 模块,它们可能是实体的(例如 USB 摄像头里面包含 ISP、sensor 等)、也可能是抽象的(如 USB 设备里面的抽象拓扑结构),它们在 /dev 目录下面生成了多个设备节点,并且这些 IC 模块还创建了一些非 v4l2 设备:DVB、ALSA、FB、I2C 和输入设备。正是由于硬件的复杂性,v4l2 的驱动也变得非常复杂。特别是 v4l2 驱动要支持 IC 模块来进行音/视频的混合/编解码操作,这就更加使得 v4l2 驱动变得异常复杂。.原创 2021-12-06 15:12:11 · 1679 阅读 · 0 评论 -
13.学习Camera之——Android Treble架构解析
本文主要介绍Treble架构下的HAL&HIDL&Binder相关技术原理。1. Treble 简介Android 8.0 版本的一项新元素是 Project Treble。这是 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。Project Treble 适用于搭载 Android 8.0 及后续版本的所有新设备(这种新的架构已经在 Pixel 手机的开发者预览版中投入使用)。1.1 系统.原创 2021-12-03 21:40:38 · 773 阅读 · 0 评论 -
14.学习Camera之——camera基本知识
一 Camera模组 大家都知道,手机背面的那个小小的孔,就叫摄像头。这个小孔幽幽的泛着光泽,深邃又迷人,如同一个含苞待放的小萝莉一样,这个小萝莉还是个傲娇娘,像零之使魔的614一样惹人怜爱,而且在小萝莉身体里面,不对,是在小孔的里面,还有层膜…..哦,这是镀膜。 看了上面一段大家别惊慌,我不是猥琐的宅男,我也有女朋友的……她叫姐崎宁宁……囧! 回到正题来吧。虽然Camera的构成大家都知道很简单,就是镜头+感光芯片而已。不过大家也都知道光学成像是一门非常深奥且尖端的科学,这其.原创 2021-12-06 11:33:20 · 4222 阅读 · 0 评论 -
11.学习Camera之——Android中的常见通信机制和Linux中的通信机制
Android中的常见通信机制和Linux中的通信机制HandlerHandler是Android系统中的一种消息传递机制,起作用是应对多线程场景。将A进程的消息传递给B线程,实现异步消息处理。很多情况是将工作线程中需要更新UI的操作消息传递给UI主线程,而实现更新UI操作。因为工作线程和主线程是共享地址空间,即Handler实例对象mHandler位于线程间共享的内存堆上,工作线程和主线程直接使用该对象,只需要注意多线程的同步问题。工作系统通过mHandler向其成员变量MessageQue.原创 2021-12-03 20:53:02 · 681 阅读 · 0 评论 -
12.学习Camera之——android binder 机制架构
1.Binder通信机制介绍这篇文章会先对比Binder机制与Linux的通信机制的差别,了解为什么Android会另起炉灶,采用Binder。接着,会根据 Binder的机制,去理解什么是Service Manager,在C/S模型中扮演什么角色。最后,会从一次完整的通信活动中,去理解Binder通信的过程。1.1 Android与Linux通信机制的比较虽然Android继承使用Linux的内核,但Linux与Android的通信机制不同。在Linux中使用的IPC通信机制如下:传.原创 2021-12-03 21:03:14 · 551 阅读 · 0 评论 -
15.学习Camera之——camera理论基础和工作原理
导读:一、摄像头模组CCM二、摄像头工作原理 一、摄像头模组(CCM) 1、camera特写 摄像头模组,Camera Compact Module,简写为CCM,是影响捕捉的重要元器件,我的理解就是硬件上的摄像头。如下图:2、摄像头内部分解 摄像头硬件结构图: (1) 、工作原理 光线通过镜头Lens进入摄像头内部,然后经过IR Filter过滤红外光,最后到达sensor(传感器),senor分为按照材质可以分为CMOS和CCD两.原创 2021-12-06 11:59:17 · 5623 阅读 · 0 评论 -
9.学习Camera之——Android系统架构与系统源码目录
1.Android系统架构Android系统架构分为五层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。应用层系统内置的应用程序以及非系统级的应用程序都是属于应用层。负责与用户进行直接交互,通常都是用Java进行开发的。应用框架层(Java Framework)应用框架层为开发人员提供了可以开发应用程序所需要的API,我们平常开发应用程序都是调用的这一层所提供的API,当然也包括系统的应用。这一层的是由Java代码编写的,可以称为Java F..原创 2021-11-29 20:59:55 · 518 阅读 · 0 评论 -
2.学习Camera之——Linux驱动基础
Linux的三大类驱动:STM32裸机开发与嵌入式Linux开发的一些区别:嵌入式Linux的开发方式与STM32裸机开发的方式有点不一样。在STM32的裸机开发中,驱动层与应用层的区分可能没有那么明显,常常都杂揉在一起。当然,有些很有水平的裸机程序分层分得还是很明显的。但是,在嵌入式Linux中,驱动和应用的分层是特别明显的,最直观的感受就是驱动程序是一个.c文件里,应用程序是另一个.c文件。比如我们这个hello驱动实验中,我们的驱动程序为hello_drv.c...原创 2021-11-29 15:53:34 · 2097 阅读 · 0 评论 -
3.学习Camera之——Linux内核及内核编译
要求:了解驱动的一些硬件基础,掌握Linux内核及内核编译的相关知识,本地完成内核配置及编译。一、准备工作准备工作如何做,这里就不详说了。a) 首先,你要有一台PC(这不废话么^_^),装好了Linux。b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、make等工具。c) 下载一份纯净的Linux内核源码包,并解压好。d) 如果你是移植Linux到嵌入式系统,则还要再下载安装交叉编译工具链。例如,你的目标单板CPU可能是arm等cpu,则安装相应.原创 2021-11-29 16:17:56 · 455 阅读 · 0 评论 -
4.学习Camera之——Linux内核中的Kconfig、Makefile、.config
Kconfig、Makefile、.config.原创 2021-11-29 16:30:33 · 350 阅读 · 0 评论 -
8.学习Camera之——Android开机流程
Android系统启动流程要求:掌握Android系统的启动流程,每个阶段的区别和作用。一. android系统架构andorid系统架构从上到下分别有应用层、应用框架层、系统运行时库层、硬件抽象层、Linux内核层。 应用层:包括系统应用比如闹钟、日历等这些在内的以及非系统级别的应用都属于应用层。负责用户交互,也就是我们需要开发的东西。 应用框架层:这一层主要是为咱们开发人员提供用来开发应用程序的API,平常我们开发程序大部分都是调用这部分的API来进行开.原创 2021-11-29 20:45:07 · 5004 阅读 · 0 评论 -
5.学习Camera之——字符设备驱动
要求:掌握Linux内核模块、字符设备驱动作业:创建一个简单的 字符设备驱动这个驱动中,实现 read和write 两个API,其中 write中把传入的内容保存在一块内存中(使用kmalloc()来进行分配,最大1K的大小,如果传入的内容大于1K则报错);当read这个 设备文件的时候,请把这个内存里面的内容打印出来。验证的方法如下,比方说如果你的设备文件是 /dev/kaka写入内容: echo "hello" > /dev/kaka 或者是 cat /sdcard/demo.原创 2021-11-29 18:05:10 · 833 阅读 · 0 评论 -
7.学习Camera之——Linux下0号进程的前世(init_task进程)今生(idle进程)
Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2)idle进程由系统自动创建, 运行在内核态idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。完成加载系统后,演变为进程调度、交换init进程由idle通过kernel_thread创建,在内核空间完成初始化后, 加载init程序, 并最终用户空间由0进程创建,完成系统的初始化. 是系统中所.原创 2021-11-29 19:10:18 · 403 阅读 · 0 评论 -
10.学习Camera之——Android系统通信机制与调用流程
1.1.1 Android 的系统构架 要深入学习 Android,首先需要学习 Android的系统构架。Android的系统构架和其操作系统一样,采用了分层的构架,层次非常清晰,因此要掌握它的构架并不难。下图为为Android 的系统构架图,如果你对该图已经不陌生,并且理解图中所示的构架,那么你可以跳过这部分内容(或者快速浏览) ;如果你是第一次见到该图,建议你详细阅读该部分内容,因为整本书的内容都是以这幅图为基础的。我们会对图中的每一个模块进行详细地分析,让你真正掌握 A..原创 2021-11-29 21:22:28 · 425 阅读 · 0 评论 -
6.学习Camera之——linux内核启动流程
本文以Linux3.14版本源码为例分析其启动流程。各版本启动代码略有不同,但核心流程与思想万变不离其宗。内核映像被加载到内存并获得控制权之后,内核启动流程开始。通常,内核映像以压缩形式存储,并不是一个可以执行的内核。因此,内核阶段的首要工作是自解压内核映像。内核编译生成vmliunx后,通常会对其进行压缩,得到zImage(小内核,小于512KB)或bzImage(大内核,大于512KB)。在它们的头部嵌有解压缩程序。通过linux/arch/arm/boot/compressed目录.原创 2021-11-29 18:58:50 · 378 阅读 · 0 评论 -
1.学习Camera之——C语言和Linux的编程规范
要求:掌握基本的C语言和Linux的编程书写规范,在Linux Kernel中添加自己的驱动模块如何添加驱动模块,请参考下面1. 构建测试模块:hello1.1 在linux-3.4/drivers/下新建目录hellocd linux-3.4/drivers/mkdir hello1.2 在hello/下新建hello.c Makefile Kconfig三个文件------------------------------------------------------------.原创 2021-11-29 15:38:01 · 704 阅读 · 0 评论