调试指南
2 Dec 2024
Read time: 3 minute(s)
调试开关
在 Luban 根目录下执行 make kernel-menuconfig,进入 kernel 的功能配置,可以打开 DVP 模块的 DEBUG 选项:
Linux
Kernel hacking
Artinchip Debug
[*] DVP driver debug
打开 DEBUG 选项后:
-
驱动以
-O0
编译。 -
pr_dbg() 和 dev_dbg() 调试信息会被编译。
在系统运行时,如果要打印 pr_dbg() 和 dev_dbg() 信息,还需要调整 loglevel 为 8,可以通过以下两种方式实现:-
在 board.dts 中修改 bootargs,增加 “loglevel=8”
-
在板子启动到 Linux Shell 后,执行下列命令:
echo8 > /proc/sys/kernel/printk
-
Sysfs 节点
-
在 Sysfs 中查看 video 设备的信息:
# ls /dev/video0 -l crw------- 1 root root 81, 0 Jan 1 1970 /dev/video0 # ls /sys/class/video4linux/v4l-subdev0/ dev dev_debug device index name subsystem uevent # # cat /sys/class/video4linux/v4l-subdev0/name ov5640 3-003c # # cat /sys/class/video4linux/v4l-subdev1/name aic-dvp-sd # ls -l /sys/class/video4linux/ lrwxrwxrwx 1 root root 0 Jan 1 00:12 v4l-subdev0 -> ../../devices/platform/soc/99223000.i2c/i2c-3/3-003c/video4linux/v4l-subdev0 lrwxrwxrwx 1 root root 0 Jan 1 00:12 v4l-subdev1 -> ../../devices/platform/soc/98830000.dvp/video4linux/v4l-subdev1 lrwxrwxrwx 1 root root 0 Jan 1 00:12 video0 -> ../../devices/platform/soc/98830000.dvp/video4linux/video0
- 打开 V4L2 的 debug 开关
在 V4L2 子系统中,用 dprintk(level) 接口来控制调试信息,大于代码中的 dprintk(level) 调用时的 level 就可以打印出信息。dprintk() 一般用到两个 debug level:
1 显示 ioctl 名称 2 显示 API 的传入参数 向对应的 Sysfs 节点写入一个整数值,可以修改该 debug level:echo 0x3 > /sys/module/videobuf2_v4l2/parameters/debug echo 0x3 > /sys/module/videobuf2_common/parameters/debug echo 0x3 > /sys/devices/platform/soc/18830000.dvp/video4linux/v4l-subdev1/dev_debug echo 0x3 > /sys/devices/platform/soc/18830000.dvp/video4linux/video0/dev_debug
- 查看 DVP 的 Buf 队列情况
DVP 驱动中实现了一个 sysfs 节点 buflist,查看当前三个 Qbuf、DQbuf、DVP 驱动中的 buf list 状态:
# cat /sys/devices/platform/soc/18830000.dvp/buflist In dvp->buf_list, the current buf in list: [0]: empty [1]: empty [2]: empty In V4L2 Q-buf list: [0]: empty [1]: empty [2]: empty In V4L2 DQ-buf list: [0], state: Done [1], state: Done [2], state: Done
V4L2 相关的其他工具
-
V4l2-ctl,v4l2 的瑞士军刀
-
V4l2 兼容性测试
-
V4l2-dbg,
-
qv4l2,QT 测试程序