camera驱动移植
平台:rk3288  Android 7.1
一、移植步骤
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配置文件

<SensorOrientation orientation="270"></SensorOrientation>

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中某些属性与驱动中的定义并不一致,原来是以下属性:

<DV_VGA name="480p" width="640" height="480" fps="10" support="1"></DV_VGA>

但是在驱动中并没有定义,追踪驱动代码,在函数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属性值改成如下:

<DV_VGA name="SVGA" width="800" height="600" fps="15" support="1"></DV_VGA>

发现可以正常进入相机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);
  如果出现裁剪的情况,可以优先检查是否出现第二种情况,再检查第一种情况。

RK3288 camera(HM2057+HM5065)驱动移植相关推荐

  1. 高通平台开发系列讲解(外设篇)高通平台Camera摄像头驱动移植

    文章目录 一.高通平台摄像头软件框架 二.相关代码目录 三.驱动移植 3.1.新增camera节点 3.2.配置相关的GPIO 沉淀.分享.成长,让自己和他人都能有所收获!

  2. MTK Camera驱动移植

    对于MTK Camera驱动移植一般分为四部分: 1.硬件IO口配置: 2.Camera驱动移植: 3.上电时序: 4.修改i2c控制器: 硬件电路: 1.GPIO配置 打开 mediatek\dct ...

  3. 基于rk3288平台的gt9xx 触摸驱动移植

                                              基于rk3288平台的gt9xx 触摸驱动移植 一.硬件介绍:     1 core-rk3288j 核心板     ...

  4. MTK6735 Android之Camera驱动移植篇

    MTK6735 Android之Camera驱动移植篇 首先我们需要向sensor原厂拿到我们对应平台型号的驱动hal层和kernel层的代码. 1.拷贝hal层代码到\vendor\mediatek ...

  5. 基于RK3288安卓Android5.1平台移植RTL8152驱动

    请忽略我的排版,抱歉. 项目上需要实现网络功能,就在现有的基础上添加一个RTL8152芯片,实现USB转网口. 据说Linux上有现成的8152驱动,以为一切会很顺利,没想到等板子焊好之后懵逼了,不能 ...

  6. 基于MT6752/32平台 Android L版本驱动移植步骤

    基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Mediatek Turnkey架构 ...

  7. WK2124 linux 驱动移植

    WK系列 SPI扩展 UART驱动移植参考 1.WK系列SPI扩展UART芯片简介 1.1  WK系列简介 目前WK系列能实现SPI扩展uart的芯片包括 WK2124.WK2204.WK2168.W ...

  8. 嵌入式linux usb wifi驱动移植

    文档名称:嵌入式linux usb wifi驱动移植 版本历史 版本号        时间        内容 v1.0b001        2012-6-18        初始版本,介绍在嵌入式 ...

  9. 基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Medi

    基于MT6752/32平台 Android L版本驱动移植步骤 根据MK官网所述,在Android L 版本上Turnkey ABS 架构将会phase out,而Mediatek Turnkey架构 ...

最新文章

  1. .Net Remoting 1
  2. HDU1237 简单计算器
  3. 推荐16款最棒的Visual Studio插件
  4. android 百分比loading,牛逼的loading加载效果
  5. 《中国人工智能学会通讯》——4.40 什么是类人概念学习?
  6. LINUX上使用命令ln新建,修改链接
  7. Android特色开发之语音识别
  8. windows 控制台cmd乱码的解决办法 chcp 65001
  9. java 填数独_java – 数独求解方法
  10. 360度全景视频拍摄小技巧,这些方法你要知道
  11. 跟着猫哥学Golang 16 - Channel
  12. 谷歌掐架甲骨文:揭秘 Java 侵权案始末
  13. Rstudio 更改工作路径和安装包的路径
  14. python+selenium高级教程
  15. 销售即是一门艺术,更是一门科学?(一)
  16. qdialog 圆角_QT 使用QSS实现圆角对话框
  17. 矿宝无盘服务器,矿宝首发“精简版无盘镜像”,带机数提升10倍!
  18. BZOJ 4380 Myjnie 区间DP
  19. 项目中成功的运用proxool连接池
  20. 被冲击的2022届普通毕业生

热门文章

  1. LCAMV06-TCD1304线阵CCD模组
  2. Security中PasswordEncoder讲解
  3. sim卡热插拔检测原理
  4. CDR X8中的图框精确剪裁不见了,怎么找回?
  5. 日期小写转大写的函数
  6. 【已实现】如何一个小程序实现支付给不同主体的商户号?
  7. OA系统通知管理设计
  8. Centos | 官网下载Centos7详细教程
  9. JAVA-session共享
  10. 考研总分多少能去辽师_一个分数擦线过辽师大心理学考生的考研心得体会