平台 | 内核版本 | SDK版本 |
RV1126 | Linux4.19 | RV1126_RV1109_LINUX_SDK_V2.1.0_20210512 |
1. 添加DTS驱动
配置dts之前需要检查原理图,查看摄像头是接在哪个总线下的。本例中是I2C1:
此外还要注意reset引脚和原理图一一对应。本方案中power硬件配置的常供电方式,所以可以不配。
Linux4.19自带IMX415的驱动。如果使用的其他版本。可以先在driver下搜索有没有imx415.c,没有的话去其他项目上拷贝一份过来。
/****************************************
* camera
***************************************/
&i2c1 {
/delete-node/ ar0230@10;
/delete-node/ os04a10@36;
imx415: imx415@1a {
compatible = "sony,imx415";
reg = <0x1a>;
clocks = <&cru CLK_MIPICSI_OUT>;
clock-names = "xvclk";
power-domains = <&power RV1126_PD_VI>;
pinctrl-names = "rockchip,camera_default";
pinctrl-0 = <&mipicsi_clk0>;
avdd-supply = <&vcc_avdd>;
dovdd-supply = <&vcc_dovdd>;
dvdd-supply = <&vcc_dvdd>;
/* reset is always pulled high in v10 */
reset-gpios = <&gpio1 RK_PD6 GPIO_ACTIVE_LOW>;
// power-gpios = <&gpio1 RK_PD4 GPIO_ACTIVE_HIGH>;
rockchip,camera-module-index = <1>;
rockchip,camera-module-facing = "front";
rockchip,camera-module-name = "YT10092";
rockchip,camera-module-lens-name = "IR0147-60IRC-8M-F20";
// ir-cut = <&cam_ircut0>;
// flash-leds = <&flash_ir>;
port {
ucam_out0: endpoint {
remote-endpoint = <&mipi_in_ucam0>;
data-lanes = <1 2 3 4>;
};
};
};
};
寄存器地址需要找摄像头厂商提供。即imx415: imx415@1a 和reg = <0x1a>;
配置成功运行
i2cdetect -y 1
可以看到摄像头已经挂在在i2c1总线下了。地址是1a。
需要注意寄存器地址的基地址偏移。
2.V4L2抓图
显示拓扑结构,执行:
media-ctl -p -d /dev/media0
查看是否有IMX415 的输出,有则驱动注册成功。
- entity 31: m01_f_imx415 1-001a (1 pad, 1 link)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev3
pad0: Source
[fmt:SGBRG10_1X10/3864x2192@10000/300000 field:none
crop.bounds:(12,16)/3840x2160]
-> "rockchip-mipi-dphy-rx":0 [ENABLED]
抓图指令:
v4l2-ctl -d /dev/video0 \
--set-fmt-video=width=3840,height=2160,pixelformat=NV12 \
--stream-mmap=3 \
--stream-skip=3 \
--stream-to=/tmp/nv0.bin \
--stream-count=1 \
--stream-poll
抓到图之后导出到PC,用7YUV软件打开
选择与刚刚抓图相同的参数。
如果看到图像颜色不对、充满条纹等情况。像这样:
先别慌,至少有图像了不是。到这一步了至少说明通信时没问题了。应该检查摄像头参数或者驱动有没有设置对。由于驱动是系统自带的,出问题的可能性很小,我们先不管他。
摄像头一般需要一个xml的配置文件才能出真彩图。我们在板子根目录下使用下面的命令查看这个文件有没有跟摄像头型号对应上:
ls etc/iqfiles/
正常的情况如下:
文件的命名要和dts中配置的对应上。
在这一步我卡了很久,原因竟然是我在修改了~/buildroot/configs/rockchip_rv1126_rv1109_TVI6009R_defconfig
这里的BR2_PACKAGE_CAMERA_ENGINE_RKAIQ_IQFILE="imx415_YT10092_IR0147-60IRC-8M-F20.xml"之后,由于之前已经编译过一次,再次编译的时候SDK并没有把这个xml文件更新成我需要的文件。在删除整个~/buildroot/output目录之后再次编译就行了。
下面这个命令可以查看每个接口对应的video号:
grep -H '' /sys/class/video4linux/video*/name
我们这里选用video19来走scale0通道抓NV12格式的图:
v4l2-ctl -d /dev/video19 \
--set-fmt-video=width=3840,height=2160,pixelformat=NV12 \
--stream-mmap=3 \
--stream-skip=3 \
--stream-to=/tmp/nv12.bin \
--stream-count=1 \
--stream-poll
如果提示busy,多半是后台ISPserver被某个进程占用了由于我之前已经打开了IPC服务,摄像头一直在被IPC推流服务占用,从摄像头的发热情况也可以判断出来。这里需要先把IPC服务都杀掉:
[root@RV1126_RV1109:/]# ps -ef | grep "ipc"
root 106 1 3 05:40 ? 00:00:22 startup_app_ipc -d rkispp_scale2 -W 960 -H 540 -w 720 -h 1280 -I 0
root 643 1 0 05:40 ? 00:00:00 ipc-daemon --no-mediaserver
root 2958 743 0 05:49 ttyFIQ0 00:00:00 grep ipc
[root@RV1126_RV1109:/]# kill -9 106 643
然后再运行抓图指令,图像色彩正常了。
IPC推流正常:文章来源:https://www.toymoban.com/news/detail-797228.html
文章来源地址https://www.toymoban.com/news/detail-797228.html
到了这里,关于RV1126 Linux IPC摄像机 索尼IMX415 摄像头调试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!