可以从NXP官网获取ISP camera调试文档。
i.MX 8M Plus_Cortex-A53/M7_NXP 半导体
export LD_LIBRARY_PATH=$pwd:$LD_LIBRARY_PATH
export VSI_LOG_LEVEL=1
export ISP_LOG_LEVEL=8
=================================================
以下为走ISP通路
isp---到内存
dewrap从内存取
做dewrap处理后,放到v4l2内存。
sensor--->csi----->isp--->dewrap--->video0
修改内存带宽参数。
===================================================
以下为不走ISP通路
sensor--->csi----isi
写的比较细,不适合快速移植。
1、使用bitbake kernel-module-isp-vvcam -c compile -v -f
编译生存代码驱动。可以基于以下修改c和h,需要注意os08a20是raw12的,如果需要修改为raw10的,需要将文件中改全。如以下,这里SBGGR12改成BGGR10,在将h中初始化代码进行修改编译后生存ko文件。os08a20.ko
static const struct os08a20_datafmt os08a20_colour_fmts[] = {
{MEDIA_BUS_FMT_SBGGR10_1X10, V4L2_COLORSPACE_JPEG},
};
2、使用bitbake isp-imx -c compile -v -f
编译生成isp驱动代码。修改里面相应配置参数
build\tmp\work\cortexa53-crypto-mx8mp-poky-linux\isp-imx\4.2.2.13.0-r0\isp-imx-4.2.2.13.0\units\isi\drv\OS08a20\source/OS08a20.c
此文件生成路径:os08a20.drv
build\tmp\work\cortexa53-crypto-mx8mp-poky-linux\isp-imx\4.2.2.13.0-r0\build\generated\release\bin
3、dts文件可以使用imx8mp-evk-dual-ov2775.dts或者imx8mp-evk-ov2775.dts。如果rst和pd都没有修改,可以只修改i2c address.
以上三步:如果硬件没问题,参数没错,isp camera基本可以出图正常。
测试:运行以下脚本。
需要以下一些ko文件。
insmod os08a20.ko
insmod vvcam-video.ko
insmod vvcam-isp.ko
insmod vvcam-dwe.ko
insmod imx8-media-dev.ko
run.sh
export LD_LIBRARY_PATH=$pwd:$LD_LIBRARY_PATH
#export VSI_LOG_LEVEL=1
export VSI_LOG_LEVEL=1
export ISP_LOG_LEVEL=0
chmod -x /opt/imx8-isp/bin/start_isp.sh
systemctl stop imx8-isp.service
sleep 1
ps -ef | grep video_test | grep -v grep | awk '{print $2}' | xargs kill -9
ps -ef | grep isp_media_server | grep -v grep | awk '{print $2}' | xargs kill -9
#systemctl stop weston*
#systemctl stop imx8-isp.service
#rmmod basler-camera-driver-vvcam.ko
#rmmod vvcam-video
#rmmod vvcam-isp
rmmod vvcam-dwe
rmmod vvcam-isp
rmmod vvcam-video
rmmod imx8-media-dev.ko
rmmod basler-camera-driver-vvcam.ko
#rmmod vvcam-csis
#rmmod ar1335
rmmod os08a20
#insmod basler-camera-driver-vvcam.ko
#insmod ar1335.ko
insmod os08a20.ko
insmod vvcam-video.ko
insmod vvcam-isp.ko
insmod vvcam-dwe.ko
insmod imx8-media-dev.ko
#insmod vvcam-csis.ko
#insmod ar1335.ko
cp -f Sensor0_Entry.cfg.os08a20 Sensor0_Entry.cfg
cp -f Sensor1_Entry.cfg.os08a20 Sensor1_Entry.cfg
#./isp_media_server case/config/2006_sensor_basler.json & gst-launch-1.0 -v v4l2src device=/dev/video0 ! "video/x-raw,format=YUY2,width=1920,height=1080" ! queue ! imxvideoconvert_g2d ! waylandsink
./isp_media_server CAMERA0 &
# ./isp_media_server CAMERA0 & gst-launch-1.0 -v v4l2src device=/dev/video2 ! "video/x-raw,format=YUY2,width=1280,height=720" ! queue ! waylandsink
# ./isp_media_server CAMERA0 & gst-launch-1.0 -v v4l2src device=/dev/video0 ! "video/x-raw,format=YUY2,width=3840,height=2160" ! queue ! imxvideoconvert_g2d ! waylandsink
#./isp_media_server DUAL_CAMERA &
# gst-launch-1.0 -v v4l2src device=/dev/video0 ! "video/x-raw,format=YUY2,width=1920,height=1080" ! queue ! glimagesink render-rectangle='<0, 0,480,270>' &
# gst-launch-1.0 -v v4l2src device=/dev/video1 ! "video/x-raw,format=YUY2,width=1920,height=1080" ! queue ! glimagesink render-rectangle='<0, 0,480,270>' &
# gst-launch-1.0 -v v4l2src device=/dev/video0 ! "video/x-raw,format=YUY2,width=1920,height=1080" ! queue ! waylandsink window-width=640 window-height=480 &
# gst-launch-1.0 -v v4l2src device=/dev/video1 ! "video/x-raw,format=YUY2,width=1920,height=1080" ! queue ! waylandsink window-width=640 window-height=480&
打开两个摄像头,可以依次执行以下命令,同时,run.sh脚本需要改成执行./isp_media_server DUAL_CAMERA & 。此时camera都能同时显示
gst-launch-1.0 -v v4l2src device=/dev/video2 ! "video/x-raw,format=YUY2,width=1280,height=720" ! queue ! glimagesink render-rectangle='<0, 0,320,240>' &
gst-launch-1.0 -v v4l2src device=/dev/video3 ! "video/x-raw,format=YUY2,width=1280,height=720" ! queue ! glimagesink render-rectangle='<640, 360,320,240>' &
gst-launch-1.0 -v v4l2src device=/dev/video2 ! "video/x-raw,format=YUY2,width=1280,height=720" ! queue ! waylandsink
gst-launch-1.0 v4l2src device=/dev/video3 ! jpegparse ! matroskamux ! filesink location=out.mkv
或者使用以下命令抓去raw图rawdump_1280x720_268.pgm
/opt/imx8-isp/bin/video_test -w 1280 -h 720 -f RAW10 -t2 -m0 -d2
测试i2c是否ok
读i2c数据
i2ctransfer -y -f 2 w2@0x10 0x01 0x00 r1
写i2c数据
i2ctransfer -y -f 1 w3@0x60 0x30 0x06 0x02
一些测试工具命令
//获取支持的分辨率和编码格式
# v4l2-ctl --list-formats-ext -d /dev/video3
//获取支持的编码格式
# v4l2-ctl --list-formats -d /dev/video3
//获取支持的camera设备
# v4l2-ctl --list-devices -d /dev/video3
以下命令可能有问题,谨慎使用:
v4l2-ctl -d2 --verbose --set-fmt-video=width=1280,height=720,pixelformat=YUYV --stream-mmap --stream-count=1 --stream-to=d1.raw
v4l2-ctl --device /dev/video2 --set-fmt-video=width=1280,height=720,pixelformat=YUYV; v4l2-ctl --device /dev/video2 --stream-mmap --stream-to=frame.raw --stream-count=1