网站首页 > 技术文章 正文
文档说明
本文档以SC806-CN-00(MSM8909平台 / Android 7)为例,说明如何移植GC2145 Camera驱动。
不想看分析的,直接跳到 "调试总结" 章节。
原厂驱动
GC2145是格科微公司的一款CMOS摄像头芯片,从资料上看,输出格式是YUV的。
百度走起,https://www.ccm99.com/resource-cat-71-1.html 能看到格科微GC2145的驱动,但是没有对应msm8909平台的。
找格科微原厂要,据说也没有,不过根据其他平台改了一份对应msm8909平台的驱动给我。 拿到手的代码如下所示:
https://uploader.shimo.im/f/zStVOK53zRIU6XGL.zip?attname=MSM8909_GC2145(1LANE)_Driver.zip&download
其中包含两个文件:
问格科微原厂,两个文件要如何移植,摆放在高通代码哪个路径下,没得到靠谱的答复。
反复通读高通文档,按自己的理解:
gc2145.c 是 kernel驱动部分
gc2145_lib.c 是 vendor驱动部分
相关高通文档:
《80-nu323-2sc_h_multimedia_driver_development_and_bringup_guide_-_camera_(simplified_chinese).pdf》
根据高通架构,在老基线版本上,也就是正在调试的这份源码,YUV摄像头实质上的驱动代码是放在 kernel部分,也就是 gc2145.c里面,包括上电时序、摄像头初始化设置等等。
修改设备树DTS文件
默认的 msm8909-camera-sensor-mtp.dtsi 里面有关camera的定义如下图所示:
qcom,camera@0 表示后摄, qcom,camera@1 表示前摄。
但是,重点来了,作为YUV摄像头,不能套用上面任何一个配置。需要新建一个:
78 和 0x78 表示是gc2145 I2C从器件地址。 qcom,camera@78,这里的78有些资料会提到只要唯一就行,不需要对应实际地址。保险起见,这里还是和从器件地址保持一致。
compatible = "qcom,gc2145";
qcom,sensor-name = "gc2145";
上面两个属性,需增加gc2145的器件名称,不能仅仅只写 "camera"
cell-index 属性不再需要,可删除。
0xf0 表示是寄存器地址,对应camera的sensor_id。
查看GC2145的手册,见下图:
接下来需要逐项核对 vdig / vana / vio / reset / pwdn 管脚的设置,这些管脚和摄像头上电时序相关。
先来看一下SC806模块和摄像头模组之间的连接:
对应关系:
上述原理图 DOVDD和DVDD是短接在一起的,因此 cam_vio-supply 和 cam_vdig-supply设置为同一路电压。
PWDN没有管脚,qcom,gpio-standby随便指定一个,即使设置错了暂时也没发现有什么问题。
gpios = <&msm_gpio n m>的gpio编号,查看SC806模块内部的原理图。
最后设置如下:
不理解的地方慢慢理解, 每个设置项具体含义可以查看:
kernel/Documentation/devicetree/bindings/media/video/msm-cci.txt
新增kernel部分驱动
把格科微给的gc2145.c放在以下路径,不做任何修改:
kernel/drivers/media/platform/msm/camera_v2/sensor/gc2145.c
修改相应的makefile文件
make bootimage -j8
打开kernel部分调试信息
新增vendor部分驱动
把格科微给的gc2145_lib.c放在以下路径,需要新建一个目录:
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor_libs/gc2145
并新建一个Android.mk文件,可以参考源码里面自带的gc0310文件夹。
修改 vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/module/sensor_init.c,我们这里写死为 "gc2145"
gc2145_lib.c代码里面,最重要的两个属性,需要根据实际硬件连接进行设置:
static struct csi_lane_params_t csi_lane_params = {
.csi_lane_assign = 0x0004,
.csi_lane_mask = 0x18,
.csi_if = 1,
.csid_core = {0},
.csi_phy_sel = 0,
};
.csiphy_params = {
.lane_cnt = 1,
.settle_cnt = 0x18,// 100ns 0x14
.combo_mode = 1,
csi_lane_assign 这个值的理解不太清楚,按照高通文档的说法,需要PHY通道号和sensor的数据通道对应。
SC806模块内部的原理图接法如下:
实践证明,以上连接对应关系,应设置 .csi_lane_assign = 0x0004。 理解不太透彻,以后再补充。
手上拿到的各种GC2145的代码,csi_lane_assign 的值一般有如下值: 0x4320 / 0xe4 / 0x0004,遇到问题都试一下吧。
csi_lane_mask 这个 8 位字段用于指示有效和要启用的 MIPI 通道。
SC806是一个PHY硬件连接两个摄像头,高通文档有如下描述:
我们这里使用的是Cam1,那么 csi_lane_mask 应设置为 0x18
其他值的说法如下:
特别要注意的是,SC806是属于两个摄像头共享一个PHY接口,因此 combo_mode 一定要设置为1,否则摄像头无法点亮。
vendor部分以上设置修改完成后,把 msm8909-camera-sensor-mtp.dtsi里面的设置改成一致。
qcom,csi-lane-assign = <0x0004>;
qcom,csi-lane-mask = <0x18>;
vendor编译方法:
vendor/qcom/proprietary/mm-camera/mm
编译生成两个so文件
out\target\product\la0920\system\vendor\lib\libmmcamera2_sensor_modules.so
out\target\product\la0920\system\vendor\lib\libmmcamera_gc2145.so
把这两个文件拷贝到电脑上。
更新gc2145库文件:
adb root
adb remount
adb push d:\libmmcamera2_sensor_modules.so /system/vendor/lib
adb push d:\libmmcamera_gc2145.so /system/vendor/lib
修改显示角度
点亮之后,角度和镜像不太正确,需要修改上下翻转和镜像设置。
修改 gc2145.c:
{0x17 , 0x14}, // mirror
改成
{0x17 , 0x14}, // mirror
修改红蓝反色
刚点亮摄像头时,怀着激动的心情打开一看,好像哪里不对劲,如下所示:
色调似乎偏蓝,一通搜索,这应该算是红蓝反色,修改下寄存器,把输出格式的Cb和Cr交换下。
修改 gc2145.c
{0x84 , 0x03}, //01
改成
{0x84 , 0x02}, //01
再次打开摄像头,色调正常了。
调试总结
- 找原厂要一份对应的YUV Camera驱动代码,*.c放在kernel部分,*_lib.c放在vendor部分
- 修改DTS,需要根据SOC模块和Camera之间连接的原理图 / SOC模块内部的原理图来确定。
- kernel部分驱动代码一般不用做任何修改,点亮之后看效果再做调整。
- vendor部分核对 csi_lane_params 和 csiphy_params ,这里也需要根据SOC模块和Camera之间连接的原理图 / SOC模块内部的原理图来确定。
patch代码
https://uploader.shimo.im/f/5Usl4YEtKZI7sdS4.rar?attname=gc2145_patch.rar&download
猜你喜欢
- 2024-10-27 NDK开发——FFmpeg视频解码 ffmpeg ndk
- 2024-10-27 Camera基本代码架构 camera calibrator
- 2024-10-27 android 功耗分析方法和优化(1) 功耗app
- 2024-10-27 Cocos Creator v2.3.2 发布了!全新 Launcher 效率飞起!
- 2024-10-27 如何androd动态注册编写计算器 淘宝动态评分计算器在线
- 2024-10-27 高通平台OV8856 Camera的bring up总结
- 2024-10-27 《坎公骑冠剑》光炮Android Mk.99技能与背景故事
- 2024-10-27 ubuntu移植libwebp到Android平台 ubuntu移植到arm
- 2024-10-27 步步为营,十分钟学会 Native JNI(附带彩蛋)
- 2024-10-27 高通Android 5.1系统Root方法 高通手机系统
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)