准备知识

在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. centos7 locale 区域语言设置
  2. POJ1422 最小路径覆盖
  3. JavaScript实现permutate With Repetitions重复排列算法(附完整源码)
  4. 模拟操作网页 webBrowser
  5. Java的Excel导出方案介绍
  6. Speed Up YUM!
  7. 统计长整数n的各位上出现数字1、2、3 的次数
  8. 1 linux下tcp并发服务器的几种设计的模式套路,Linux下几种并发服务器的实现模式(详解)...
  9. layer弹出层笔记
  10. 关于vue脚手架cli3.0版本的一篇有关配置的文章,可以借鉴
  11. python网络编程 交互式游戏设计——吹牛(RemoteBet)(无封帧)
  12. 微信小程序常见的几种UI组件库
  13. (转)用Scintilla让程序支持语法高亮
  14. 微信小程序——1、搭建自己的Https服务器
  15. c语言用星号编写矩形,c语言星号打印矩形三角形菱形等图案.doc
  16. android电话录音没有声音,Android通话录音未录制来电语音(示例代码)
  17. 程序员颈椎病康复指南
  18. 电脑怎么录屏,什么录屏软件最好
  19. VsCode同步配置到另一台设备
  20. WPF 编程入门 --WPF概述

热门文章

  1. WordPress 后台禁用Google Open Sans字体,加速网站
  2. python渐变色代码_Python 生成纯色或渐变色图片
  3. TDengine助力京东云IoT数据统计改造
  4. adobe pdf 启用下划线快捷键
  5. Simplescalar安装流程
  6. LeafletJS 简单使用1 - 地图标点 L.marker()、清除标点 layerGroup.clearLayers() 【SuperMap iClient for Leaflet】超图的使用
  7. 打开共享计算机很慢,局域网中,查看一台电脑的共享文件夹,打开很慢(电脑达人进)...
  8. 2021-2027全球及中国电能质量监测与治理行业研究及十四五规划分析报告
  9. 网络连接正常,浏览器出现网页无法显示的问题
  10. 如何判断数据恢复软件能恢复数据呢