**
1.环境依赖
**
1.按照Hi3559A╱C V100 开发环境用户指南.pdf文档,搭建基于乌班图的开发环境、安装交叉编译工具链。最好安装推荐的乌班图版本,否者在编译过程中会提示缺失很多组件,需要手动安装或修改比较多的东西,太麻烦。
2.搭建NFS服务器。海思的驱动程序是通过应用程序调用IO control的方式实现的,在修改/适配驱动程序的时候不需去动内核。在开发/调试过程中,开发板通过NFS Mount乌班图服务器,直接执行对应的应用程序,十分方便。在程序定版后,再将应用集成到文件系统中。NFS搭建网上很多教程,不再详述。
2.修改的关键代码梳理
1.修改sys_config.c,主要改动点有两个:
第一个:在sensor列表中添加ov9734,在执行脚本
./load3559av100_multicore -i -sensor0 ov9734加载ko时,会将ov9734这个字符串作为参数传递给sensor_list数组,通过该参数可选择使用的总线类型、引脚初始化、时钟配置等。
第二个:修改输出给ov9734的时钟配置。Ov9734规格书中提到ov9734的输入时钟为6-27Mhz,我这里使用开发板上的clk_a,将其配置成12Mhz。参考文档:Hi3559A╱C V100 ultra-HD Mobile Camera SoC 用户指南.pdf,寄存器PERI_CRG69低4位配置0xc,第4位配置1使能时钟输出。
2.在目录…/mpp/component/isp/user/sensor/hi3559av100中新增ov9734文件夹,其中文件以 IMX344作为base,主要修改ov9734_sensor_ctl.c中的寄存器配置。除了时钟寄存器外,其它寄存器配置在使用其它平台时可直接复用。上述以说明,clk输入为12Mhz,需修改0x3080、0x3081寄存器,使得经过VCO的时钟频率为720Mhz。当前为12/1.590 = 720Mhz。当前视频格式为1280720p 30帧每秒。
3.mpp\component\isp\include\hi_sns_ctrl.h中新增声明:
4.mpp\sample\common\sample_comm.h中新增ov9734的类型
5.mpp\sample\common\sample_comm_isp.c中增加9734的各种配置结构体:
注意此处:
Ov9734的视频格式配置成BAYER_GRBG,此处之前未配置正确导致图像颜色不正常。具体的调试方法:将ov9734配置成测试模式,使其输出测试视频流,对比屏幕显示的图片和ov9734规格书中的图片,如果二者不一致则调整视频格式。将ov9734_sensor_ctl.c中宏OV9734_TEST_PATTERN_ENABLE置1可以打开测试模式。
6.sample\common\sample_comm_vi.c中注意下边这一项配置,使用硬件Dev0、输入类型mipi、data采用时钟单边沿发送,图片大小1280*720,raw类型为10bit、无WDR模式、采用1lan的连接方式且sensor的lane0连接到HI3559的lane0。
具体参考MIPI使用指南1.3及FAQ:
7.修改mpp\sample\Makefile.param
其中SENSOR1_TYPE改不改都行
8.修改mpp\sample\vio\sample_vio.c中图像的大小及输出的图像大小,增加case 7在执行应用程序时输入参数7
3.操作步骤
1.编译mpp及其依赖包
1)在Hi3559AV100_SDK_V2.0.2.0/drv/interdrv目录下执行make clean命令
2)在Hi3559AV100_SDK_V2.0.2.0/drv/interdrv目录下执行make命令
3)在Hi3559AV100_SDK_V2.0.2.0/mpp/component/isp/user目录下执行make clean命令
4)在Hi3559AV100_SDK_V2.0.2.0/mpp/component/isp/user目录下执行make命令
5)在Hi3559AV100_SDK_V2.0.2.0/mpp/sample目录下执行make linuxclean命令
6)在Hi3559AV100_SDK_V2.0.2.0/mpp/sample目录下执行make linux命令
2.编译完成后将Hi3559AV100_SDK_V2.0.2.0/mpp目录下out和sample文件夹整体拷贝到你的NFS共享目录下,并赋777权限。
3.设置ip,使开发板与乌班图虚拟机处于同一网段可以ping通,通过开发板mount乌班图虚拟机的NFS目录。
4.目前我将开发板中原有的启动脚本进行了修改,注释掉了一些启动流程,否则会对vio例程的执行造成影响。
5.Mount成功后进入目录…/out/linux/multi-core/ko,执行脚本./load3559av100_multicore -i -sensor0 ov9734
6.进入目录…/sample/vio,运行应用程序./sample_vio 0 7
7.上述操作结束后显示器成功出图
4.分辨率及帧率问题
当前输出视频流格式已更改为1080P 60FPS,运行sample_vio应用程序后若仍然无法输出视频,输入cat /proc/umap/hdmi_sink命令,查看对端hdmi设备(显示器)支持的分辨率及帧率,修改当前代码输出中的分辨率及帧率。例如: