海思SDK的sensor驱动框架

对于海思的SDK之前一直对驱动的框架不清楚,只知道mpp的目录下的一些简单的业务demo,归根结底对这个SDK的框架还是不够了解,研究了一段时间才对该框架有一点认识。SDK是通过Makefile来管理和编译的所以对于Makefile文件需要有一定的理解,再研究就不成问题了。
研究了好几款海思的ISP的SDK发现管理架构还是有一定区别,HI3518ev200、HI3516dv300、HI3559av100的结构大致相同,有部分差异。
关于sensor驱动的框架:
涉及到的驱动有外设接口的驱动,比如i2c,spi,mipi等的驱动,还有具体某种sensor的驱动,比如ov9712、imx335等的驱动;
关于想要新增一款驱动的话需要关注的重点在目录:Hi3518E_SDK_V1.0.4.0\package\mpp\mpp\component\isp
最核心的部分就是:Hi3518E_SDK_V1.0.4.0\package\mpp\mpp\component\isp\sensor\omnivision_ov9712
具体sensor的驱动实现,已经定义好了固定接口

typedef struct hiISP_SNS_OBJ_S {
    HI_S32 (*pfnRegisterCallback)(VI_PIPE ViPipe, ALG_LIB_S *pstAeLib, ALG_LIB_S *pstAwbLib);
    HI_S32 (*pfnUnRegisterCallback)(VI_PIPE ViPipe, ALG_LIB_S *pstAeLib, ALG_LIB_S *pstAwbLib);
    HI_S32 (*pfnSetBusInfo)(VI_PIPE ViPipe, ISP_SNS_COMMBUS_U unSNSBusInfo);
    HI_S32 (*pfnSetBusExInfo)(VI_PIPE ViPipe, ISP_SNS_BUS_EX_S *pstSerdesInfo);
    HI_VOID (*pfnStandby)(VI_PIPE ViPipe);
    HI_VOID (*pfnRestart)(VI_PIPE ViPipe);
    HI_VOID (*pfnMirrorFlip)(VI_PIPE ViPipe, ISP_SNS_MIRRORFLIP_TYPE_E eSnsMirrorFlip);
    HI_S32 (*pfnWriteReg)(VI_PIPE ViPipe, HI_U32 s32Addr, HI_U32 s32Data);
    HI_S32 (*pfnReadReg)(VI_PIPE ViPipe, HI_U32 s32Addr);
    HI_S32 (*pfnSetInit)(VI_PIPE ViPipe, ISP_INIT_ATTR_S *pstInitAttr);
} ISP_SNS_OBJ_S;

需要的是参考Hi3518E_SDK_V1.0.4.0\package\mpp\mpp\component\isp\sensor\下的某一款驱动,提供好相应的接口,应该还有其他需要修改的,还没研究透彻
在这里插入图片描述
提供好后再Hi3518E_SDK_V1.0.4.0\package\mpp\mpp\component\isp目录下执行make即可生成相关的.so和.a驱动文件,并且会复制到mpp的目录下更新相关的lib和ko目录
在这里插入图片描述
具体的实现过程还待研究,需要实践具体移植一遍新增一款sensor才能吃透。
重点还是需要理清楚是如何通过Makefile来管理的,需要读懂Makefile文件,驱动的实现就要去研究mpp/sample下的API调用过程了。

### 海思 Sensor 驱动开发文档与代码示例 #### 应用层驱动特性 海思sensor驱动大部分工作在应用层,这意味着这些驱动程序并非以内核模块的形式存在。因此,在对sensor进行修改或调整时,无需重新编译整个Linux内核,这大大简化了调试和测试的过程[^2]。 #### 提供的Sample Code 为了帮助开发者快速上手,海思提供了相当数量的样本代码,尤其是针对较为复杂的SoC平台。对于那些希望减少定制化工作的团队而言,可以直接利用这些现成的例子来实现基本功能,甚至可以通过`ittb_stream`接口直接传输摄像头捕捉到的画面数据而不需要做太多改动[^1]。 #### ISP支持 图像信号处理(ISP)作为连接前端图像传感器与后续处理环节的关键组件,被集成到了海思的解决方案之中。它能够有效地优化来自各种品牌图像传感器的数据流,确保最终输出的质量满足特定应用场景的需求[^3]。 #### SDK结构中的关键部分 在海思提供的软件开发包(SDK)里,有几个特别重要的目录值得留意: - `ko`: 存放着内部硬件资源所需的底层驱动; - `lib`: 包含了一系列预构建好的库文件,用于加速应用程序的编写。 这两个文件夹的内容通常需要根据具体项目的要求来进行配置和部署[^4]。 ```c // 示例:简单的V4L2用户空间API调用片段 #include <linux/videodev2.h> #include <sys/ioctl.h> int main() { int fd; struct v4l2_capability cap; // 打开视频设备节点... ioctl(fd, VIDIOC_QUERYCAP, &cap); // 查询设备能力 close(fd); } ``` 此段伪代码展示了如何通过Video4Linux2(V4L2) API访问摄像机设备的能力信息,这是理解并操作海思平台上sensor的一个起点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值