完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、移植步骤
1. 添加驱动文件HM2057和HM5065到以下路径: hardware/rockchip/camera/siliconImage/isi/drv 2.添加编译规则,将驱动文件编译进系统,修改camera/Cnfig目录下的user.mk以及android.mk文件,有些.mk文件时默认编译此文件夹下所有文件,而有些需要手动添加,代码如下: ifeq ($(strip $(TARGET_BOARD_PLATFORM)), rk3288) PRODUCT_PACKAGES += libisp_isi_drv_GC2145 3.配置cam_board.xml文件,将摄像头名称改成自己需要移植的,其他需要修改的参数根据原理图,规格书来决定,主要是配置电源使能脚Pwen和Pwdn,复位脚Rst,以及马达的pin脚,拍照分辨率,预览分辨率等等 4.局部编译: $:cd hardware/rockchip/camera $:mm 注意:编译之前要配置编译环境,参考编译下载笔记。 5.局部更新 adb root adb remount adb push cam_board.xml /system/etc/ adb push camera.rk30board.so libisp_isi_drv_HM2057.so libisp_isi_drv_HM5065.so /system/lib/hw/ adb shell sync adb reboot 这里有一点需要注意,cam_board.xml文件更新到/etc/目录下后,/data/camera/目录下的media_profiles.xml要删除(暂时还不清楚原因) 6.logcat输出日志 输出到文本以及查看实时打印: adb shell logcat > logcat.txt adb shell $:logcat -c $:logcat 7.当修改的是cam_board_rk3288.xml文件时,需要生成大固件才能烧进机器 $:mm $:./mkimage.sh 二、移植和调试时遇到的问题及解决方法 1..调试摄像头时,预览的图片会发生左右或者上下偏转。修改驱动代码中orientation的值就好,一般值为90或者270(角度),实际修改中这个度数与机器的sensor偏转角度有关,相关原理自行百度。 (1)方法一:直接修改驱动代码中orientation的值 if (hwrotation == 0) { gCamInfos[0].facing_info.orientation = 270; //该值为旋转角度 gCamInfos[1].facing_info.orientation = 270; } (2)修改cam_board.xml配置文件 2.I2C通信失败,logcat查看打印出现以下打印: CameraHal: WARNING:HGT retry i2c times:0 CameraHal: WARNING: HM5065 soft reset by i2c failed!, please check follow information: CameraHal: Slave_addr: 0x3e 0x0 CameraHal: Soft reset reg: 0x0 val: 0x3 CameraHal: Power/PowerDown/Reset/Mclk/I2cBus CameraHal: HM5065 device register failed! 以上打印信息提示I2C复位失败,设备注册失败,导致这个问题的原因是什么?如何解决这个问题? 原因以及解决方法:cam_board.xml文件中pwdn脚以及rst复位脚配错,导致I2C通讯失败(以后出现camera驱动I2C通讯失败,可检查是否是slave_addr,soft reset reg定义错误,以及引脚配置出错) 3.由于是前置和后置双摄像头驱动移植,解决了I2C通信问题之后,发现HM5065摄像头设备注册成功,虽然 HM2057没有报I2C通讯失败,但还是device register failed,logcat查看hardware层打印可看到: CameraHal: Check HM2057 ID: reg: 0x1 val: 0x20 default: 0x20 CameraHal: Check HM2057 ID: reg: 0x2 val: 0x56 default: 0x56 CameraHal: Check HM2057 ID: reg: 0x3 val: 0x19 default: 0xf9 CameraHal: HM2057 device register failed 通过以上打印发现val: 0x19 default: 0xf9两者并不匹配,回到HM2057驱动代码,发现以下宏定义: #define HM2057_CHIP_ID_HIGH_BYTE_DEFAULT (0x20) // r - #define HM2057_CHIP_ID_MIDDLE_BYTE_DEFAULT (0x56) // r - #define HM2057_CHIP_ID_LOW_BYTE_DEFAULT (0x19) // r – 第三个值设置为0x19,通过追驱动代码发现驱动中设置的值与实际值不一样导致的(同事说可能是驱动代码在android5.1上,现在移植到7.1上导致,该值的作用现在也不知道,汗颜),将宏定义的值改为0xf9则设备注册成功。 4.驱动注册成功之后,打开相机APP,发现弹出app错误,此时先把出错提示关掉,通过adb调试: adb shell $logcat -c $logcat 再点击进入相机app,实时打印中可以查找到报错的地方如下: AndroidRuntime:java.lang.RuntimeException:Unable to start activity ComponentInfo{com.android.camera.camera.CameraActivity}: java.lang.IllegalArgumentException:Could not find supported video qualities. 该错误是找不到支持的拍摄视频分辨率 发现是cam_board.xml定义HM2057中某些属性与驱动中的定义并不一致,原来是以下属性: 但是在驱动中并没有定义,追踪驱动代码,在函数static RESULT HM2057_IsiGetCapsIssInterna()中定义的摄像头的像素: switch (pIsiSensorCaps->Index) { case 0: { pIsiSensorCaps->Resolution = ISI_RES_1600_1200P7; break; } case 1: { pIsiSensorCaps->Resolution = ISI_RES_SVGAP15; break; } default: { result = RET_OUTOFRANGE; goto end; } } 查看ISI_RES_SVGAP15的宏定义可以看到: #define ISI_RES_SVGAP15 0x1e320258 /**< 16 800x600@15*/ 需要将DV属性值改成如下: 发现可以正常进入相机APP,两个摄像头正常工作,说明驱动移植成功了。 5.正常进入相机apk后,发现原本HM5065S摄像头是500W的像素,但是相机分辨率设置那里只显示30W。 解决方法:进入kernel先make clean,再编译内核,重新烧录全部.img文件。 6.摄像头预览分辨率获取逻辑为先调用HM5065_IsiGetCapsIssInternel函数,看switch函数里面是否有要和设置的分辨率一致; 有一致则获取这个分辨率,否则会取switch的最后一个分辨率,比如HM_5065之前是ISI_RES_TV720P30,然后调用HM5065_SetOutputWindow函数设置HM5065的输出分辨率; 之所以会有裁剪的情况出现,有两个原因: (1)摄像头寄存器设置有问题,本身就是裁剪的图像输出。 (2)在第二步中上层设置的分辨率不在switch里面,就会造成摄像头输出为1280x720,而实际只需要800x600,具体函数为setupPreview(width_sensor,height_sensor,width_sensor,height_sensor,mZoomVal); 如果出现裁剪的情况,可以优先检查是否出现第二种情况,再检查第一种情况。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
487 浏览 0 评论
759 浏览 1 评论
654 浏览 1 评论
1884 浏览 1 评论
3131 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 12:05 , Processed in 0.458611 second(s), Total 72, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号