海思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调用过程了。