海思处理器sensor驱动调用过程与源码解析与实战
准备知识:
在mpp/sample/makefile.param
/*gcc 的 -D选项作用要注意*/
CFLAGS += -Wall -g $(INC_FLAGS)
-D$(HIARCH)
-DHICHIP=$(HICHIP)
-DSENSOR_TYPE=$(SENSOR_TYPE)
-D$(HIDBG)
-D$(HI_FPGA) -lpthread -lm -ldl -D$(ISP_VERSION)
编译器通过 -D 选项将SENSOR_TYPE 作为宏传入源代码
ifeq ($(SENSOR_TYPE), SMARTSENS_SC2235_CMOS_1080P_20FPS)SENSOR_LIBS += $(REL_LIB)/libsns_sc2235.a
endif
通过上面的指令确定连编哪一个lib!!!!!!
每个lib里面都是一样的函数 就是实现了
File Name : hi_sns_ctrl.h 中定义好的
void sensor_init();
void sensor_exit();void sensor_prog(int *rom);
int sensor_write_register(int addr, int data);
int sensor_read_register(int addr);
int sensor_write_register_bit(int addr, int data, int mask);
c
int sensor_unregister_callback(void);
int sensor_set_inifile_path(const HI_CHAR *pcPath);
然后通过int sensor_register_callback(void)函数注册给驱动程序,通过晚绑定机制被驱动程序调用
海思的sensor驱动大部分工作在应用层,即应用层驱动(非ko形式存在),这样一来在对sensor改动时,就不需要重新编译内核了。
缺点是,不稳定,效率会比较低。纯应用层驱动是没办法操作硬件的,所以需要调用底层i2c驱动。
1、驱动源码路径
Hi3518E_SDK_V1.0.3.0\package\mpp\mpp\component\isp\sensor目录下。sample_common.h 头文件 中SAMPLE_VI_MODE_E中定义了mpp支持的sensor类型,根据你的sensor添加(最好的办法就是找一个存在的替换 比如新的sensor sc2235p 直接替换sc2235 即可 这个enum就不用改了)
2、sensor驱动调用
sensor驱动编译完之后会生成xxx.a和xxx.so两个库,一个是静态链接用的,一个是动态链接用的。
这两个文件会被放到Hi3518E_SDK_V1.0.3.0\package\mpp\mpp\lib目录下。
3、sensor驱动文件命名规则
xxxx_cmos.c中定义回调和上层函数。
xxxx_sensor_ctl.c中定义底层硬件相关的寄存器值配置函数。
4、sensor驱动在哪被调用
从之前的sample_venc开始看,在第三部分step 3: start vi dev & chn to capture
SAMPLE_COMM_VI_StartVi()
SAMPLE_COMM_VI_StartIspAndVi()
SAMPLE_COMM_ISP_Init()
sensor_register_callback()
sensor_register_callback这个函数就在sensor驱动里面,这里会调用到kernel内的i2c驱动对sensor进行硬件操作。
5、sensor_register_callback
这个函数就是对整个sensor初始化,内部封装了操作sensor所需要的函数,(ISP、AE(自动曝光)、AWB(白平衡))
其中的cmos_init_sensor_exp_function函数将sensor操作时所需要的函数一一挂接起来,例如初始化调用的sensor_init。
6、sensor_init
初始化sensor,初始化的方式就是调用i2c函数接口来实现操作sensor内部寄存器。
7、黑电平
黑电平(Black Level Correction)也就是黑色的最低点,以8bit数据来说,指在经过一定校准的显示装置上,没有一行光亮输出的视频信号电平。定义图像数据为0时对应的信号电平。
sensor中的黑电平是可以调节的,就相当于标准值,就像零摄氏度这种概念。
8、sensor驱动编译实战
(1)修改驱动源码
以AR0130为例,修改mpp\component\isp\sensor\ar0130目录下的应用驱动源码。
如果是调整黑电平,就修改ar0130目录下的ar0130_coms.c文件里面的cmos_get_isp_black_level函数中的au16BlackLevel数组。
(2)清除,并重新编译
首次编译需要在mpp\component\isp目录下将整个isp进行编译。
执行make clean指令。
再执行make
(3)确认mpp中lib目录下的libsnsxxx.a/so已经被更新。
(4)重新编译sample并运行查看效果。
9、AR0130sensor寄存器
参考AR0130_RR_C.pdf文档的Register Behavior寄存器章节,了解各寄存器用途。
海思处理器sensor驱动调用过程与源码解析与实战相关推荐
- Android开发知识(二十二)LayoutInflater装载xml布局过程的源码解析
文章目录 前言 LayoutInflater实例 LayoutInflater的装载过程 include 标签解析 merge 标签解析 attachToRoot参数解析 View创建过程 (1)判断 ...
- CenterNet 后处理过程及源码解析
目录 1.写在前面 2.后处理源码解析 2.1 CenterNet推理过程 2.2 后处理源码解析 2.2.1 NMS 2.2.2 Top K 2.2.3 提取reg和wh 2.2.4 是否对每一类分 ...
- js怎么调用wasm_Long.js源码解析
基于现在市面上到处都是 Vue/React 之类的源码分析文章实在是太多了.(虽然我也写过 Vite的源码解析 所以这次来写点不一样的.由于微信这边用的是 protobuf 来进行 rpc 调用.所以 ...
- 海思3559A上编译OpenCV4.1.0源码操作步骤
1. 从https://github.com/opencv/opencv/releases 下载opencv源码opencv-4.1.0.zip并解压缩: 2. 修改最顶层的CMakeLists.tx ...
- BigInteger类实例的构造过程——JDK源码解析
最近看了下JDK1.6版本的BigInteger类,仔细研究了下大整数实例的构造过程,现在把自己的所得所想分享给大家. 首先,为什么需要大整数类?简单的说就是因为内部的数据类型能表示的最大数是64位长 ...
- Spring源码解析:自定义标签的解析过程
2019独角兽企业重金招聘Python工程师标准>>> spring version : 4.3.x Spring 中的标签分为默认标签和自定义标签两类,上一篇我们探究了默认标签的解 ...
- dubbo(5) Dubbo源码解析之服务调用过程
来源:https://juejin.im/post/5ca4a1286fb9a05e731fc042 Dubbo源码解析之服务调用过程 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与 ...
- docker push 过程 distribution源码 分析
docker push 过程 distribution源码分析 承接上一篇"distribution structure and start up 分析"本文分析一下distrib ...
- Spring MVC源码解析——HandlerMapping(处理器映射器)
Sping MVC 源码解析--HandlerMapping处理器映射器 1. 什么是HandlerMapping 2. HandlerMapping 2.1 HandlerMapping初始化 2. ...
最新文章
- .NET/C#中对自定义对象集合进行自定义排序的方法
- EOSRAM那么火,BANCOR协议白皮书了解一下?
- 流水线经典讲解!!!!!
- python学习day-8 迭代器 生成器 装饰器
- cout的输出格式初探3
- 冒泡排序法:一维数组 (最费内存资源的排序法)
- php定时任务管理,Zebra-Crontab
- CrashLoopBackOff问题排查
- 小程序wx.showActionSheet 调起转发、分享
- Java商城项目实战
- 任务栏管理器无法结束任务 taskkill也无法结束任务 pchunter加载驱动失败
- 7. 敏捷软件开发框架 - 极限编程XP
- 白盒测试方法之条件组合覆盖测试
- IP地址 A\B\C类
- 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV
- Android动画中Interpolator 详解和演示
- 基于Spring Boot 2.5.1 微服务框架发布(Eurynome Cloud )
- 什么是GMS、CDMA、GPRS、EDGE、WCDMA、TD-CDMA、HSPA+、LTE?
- 瑞利分布理论和近似概率密度函数
- 无线电能传输LCL-S拓扑/WPT MATLAB/simulink仿真模型 (模型左边为两电平H桥逆变器,LCL-S串联谐振,右边不可控整流结构)