linux的驱动程序移植的精髓在于移植而不是编写,移植不代表简单了。
驱动程序包一般有几个或者几十个文件,另外有设备树进行配置资源,一个驱动的整个框架构成、加载过程、调试方法的掌握很关键了。

进入正题,记录一次rp3399驱动ov4689过程,后续抽时间针对这个摄像头做一些优化和应用层app的编写。
没有无源之水,知识也是一样。先看看原生的应用信息。内容见链接。

http://wiki.t-firefly.com/zh_CN/Firefly-RK3399/driver_camera.html

首先,原理图
mipi接口:
在这里插入图片描述
有front和back之分,如果要支持2个以上摄像头,要去camera的硬件层驱动里面更改。
我这边的ov4689是通过一个mipi转接板链接到开发板的,由于板子原生支持ov13850,同时,板级支持包有ov4689的驱动,只需要更改xml文件和安卓层的.mk文件,用ov4689取代ov13850即可驱动摄像头。

在hardware/rockchip/camera/Config/cam_board_rk3399.xml 中13850改为4689
在 hardware/rockchip/camera/Config/user.mk文件中增加ov4689
在 hardware/rockchip/camera/Config/rk32xx_camera.mk 中增加
hardware/rockchip/camera/SiliconImage/isi/drv/OV4689/calib/OV4689.xml:system/etc/OV4689.xml
删除out文件中的lib中的ov13850的.so库文件,重新编译内核和安卓,新生产的库中有了ov4689.so
烧写开发板,用安卓自带的camra app打开摄像头,YES,启动正常。唯一图像有些不自然,回头调一下参数。

这是最简单的操作,如果用其他mipi接口,要看设备树文件是不是要重配,rst和clk,pwd引脚要注意按照实际电路要求进行配置。
纸上得来终觉浅,共勉之。

Logo

更多推荐