准备知识

在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驱动调用过程与源码解析与实战相关推荐

  1. Android开发知识(二十二)LayoutInflater装载xml布局过程的源码解析

    文章目录 前言 LayoutInflater实例 LayoutInflater的装载过程 include 标签解析 merge 标签解析 attachToRoot参数解析 View创建过程 (1)判断 ...

  2. 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 是否对每一类分 ...

  3. js怎么调用wasm_Long.js源码解析

    基于现在市面上到处都是 Vue/React 之类的源码分析文章实在是太多了.(虽然我也写过 Vite的源码解析 所以这次来写点不一样的.由于微信这边用的是 protobuf 来进行 rpc 调用.所以 ...

  4. 海思3559A上编译OpenCV4.1.0源码操作步骤

    1. 从https://github.com/opencv/opencv/releases 下载opencv源码opencv-4.1.0.zip并解压缩: 2. 修改最顶层的CMakeLists.tx ...

  5. BigInteger类实例的构造过程——JDK源码解析

    最近看了下JDK1.6版本的BigInteger类,仔细研究了下大整数实例的构造过程,现在把自己的所得所想分享给大家. 首先,为什么需要大整数类?简单的说就是因为内部的数据类型能表示的最大数是64位长 ...

  6. Spring源码解析:自定义标签的解析过程

    2019独角兽企业重金招聘Python工程师标准>>> spring version : 4.3.x Spring 中的标签分为默认标签和自定义标签两类,上一篇我们探究了默认标签的解 ...

  7. dubbo(5) Dubbo源码解析之服务调用过程

    来源:https://juejin.im/post/5ca4a1286fb9a05e731fc042 Dubbo源码解析之服务调用过程 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与 ...

  8. docker push 过程 distribution源码 分析

    docker push 过程 distribution源码分析 承接上一篇"distribution structure and start up 分析"本文分析一下distrib ...

  9. Spring MVC源码解析——HandlerMapping(处理器映射器)

    Sping MVC 源码解析--HandlerMapping处理器映射器 1. 什么是HandlerMapping 2. HandlerMapping 2.1 HandlerMapping初始化 2. ...

最新文章

  1. .NET/C#中对自定义对象集合进行自定义排序的方法
  2. EOSRAM那么火,BANCOR协议白皮书了解一下?
  3. 流水线经典讲解!!!!!
  4. python学习day-8 迭代器 生成器 装饰器
  5. cout的输出格式初探3
  6. 冒泡排序法:一维数组 (最费内存资源的排序法)
  7. php定时任务管理,Zebra-Crontab
  8. CrashLoopBackOff问题排查
  9. 小程序wx.showActionSheet 调起转发、分享
  10. Java商城项目实战
  11. 任务栏管理器无法结束任务 taskkill也无法结束任务 pchunter加载驱动失败
  12. 7. 敏捷软件开发框架 - 极限编程XP
  13. 白盒测试方法之条件组合覆盖测试
  14. IP地址 A\B\C类
  15. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV
  16. Android动画中Interpolator 详解和演示
  17. 基于Spring Boot 2.5.1 微服务框架发布(Eurynome Cloud )
  18. 什么是GMS、CDMA、GPRS、EDGE、WCDMA、TD-CDMA、HSPA+、LTE?
  19. 瑞利分布理论和近似概率密度函数
  20. 无线电能传输LCL-S拓扑/WPT MATLAB/simulink仿真模型 (模型左边为两电平H桥逆变器,LCL-S串联谐振,右边不可控整流结构)

热门文章

  1. xml文件的解析与其使用方法
  2. 为什么手机里的小爱音响app里搜不到家里的小爱音箱_教你500元用小米米家网关+小爱音箱尝鲜最AI智能生活...
  3. 网络安全人才出现结构性短缺 实战能力超学历成企业用人首要标准
  4. 如何开始人工智能之旅: 改弦更张不合算,别忽视既有平台
  5. ctfshow--网络迷踪
  6. 一个人不成熟,有三大表现
  7. IP数据报---首部校验和的计算方法
  8. 第十六章 快速锁定功能项进行爆破,从而达到跳过网络机制
  9. TensorFlow详解猫狗识别(一)--读取自己的数据集
  10. DVD常识及伺服解码