基于IPC kernel配置启用UVC
1. 概述¶
本文主要介绍如何在IPC配置的基础上打开UVC相关的配置来使用USBCAM的功能。
建议使用前先将usbcam固件烧录到对应开发板,然后参考UVC APP说明,查看能否正常识别设备并出图。
2. kernel配置¶
根据具体使用的平台,操作对应的kernel配置文件。
以338Q平台为例:
kernel$ declare -x ARCH="arm";declare -x CROSS_COMPILE=" arm-linux-gnueabihf-9.1.0-" kernel$ make infinity6e_ssc012b_s01a_spinand_defconfig //可以通过./list_config.sh查看配置文件 kernel$ make menuconfig
3. 添加media框架配置¶
-> Device Drivers -> Multimedia support
-> Device Drivers -> Multimedia support -> Cameras/video grabbers support -> Media Controller API
输出模块: media.ko videodev.ko v4l2-common.ko
4. 添加USB Gadget 框架配置¶
-> Device Drivers -> USB support (如果已选,请忽略)
-> Device Drivers -> USB support -> USB Gadget Support (倒数第二项)
输出模块:usb-common.ko udc-core.ko
5. 添加UDC驱动配置¶
该模块为硬件IP模块,视具体平台支持情况(USB2.0 or USB 3.0)进行配置
-
USB 2.0驱动
-> Device Drivers -> USB support -> USB Gadget Support -> USB Peripheral Controller -> Sstar USB 2.0 Device Controller
输出模块:udc-msb250x.ko
-
USB 3.0驱动
输出模块:dwc3.ko
gadget webcam:
-> Device Drivers -> USB support -> USB Gadget Support -> USB Gadget Drivers (输入“M”选择) -> USB Webcam Gadget
输出模块:libcomposite.ko videobuf2-core.ko videobuf2-v4l2.ko videobuf2-memops.ko videobuf2-vmalloc.ko usb_f_uvc.ko g_webcam.ko
6. 编译kernel¶
保存配置退出后编译kernel
kernel$ make clean;make -j8
7. 更新文件¶
-
更新kernel(必做,否则某些ko会因为找不到某些symbol而无法insmod)
板子预先烧好IPC的固件,然后用
kernel/arch/arm/boot/uImage.xz
替换image的kernel文件,有网络的情况下,在uboot下通过如下的命令升级更新kernel;没有网络,则可以通过USBDownload Tool工具进行升级。SigmaStar # estar scripts/[[kernel.es
升级完成后reset重启进入系统。
-
在kernel/modules/目录下找到如下ko并全部copy到板子上
例如放在板子上的/config/modules/4.9.84/目录下。
media.ko videodev.ko v4l2-common.ko usb-common.ko videobuf2-core.ko videobuf2-v4l2.ko videobuf2-memops.ko videobuf2-vmalloc.ko udc-core.ko libcomposite.ko usb_f_uvc.ko udc-msb250x.ko g_webcam.ko
-
修改板子上的
/customer/demo.sh
文件insmod中所有的ko。因为模块之间具有相应依赖的关系,配置与加载都要有一定的先后顺序可直接参考copy如下内容:
insmod /config/modules/4.9.84/media.ko insmod /config/modules/4.9.84/videodev.ko insmod /config/modules/4.9.84/v4l2-common.ko insmod /config/modules/4.9.84/usb-common.ko insmod /config/modules/4.9.84/videobuf2-core.ko insmod /config/modules/4.9.84/videobuf2-v4l2.ko insmod /config/modules/4.9.84/videobuf2-memops.ko insmod /config/modules/4.9.84/videobuf2-vmalloc.ko insmod /config/modules/4.9.84/udc-core.ko insmod /config/modules/4.9.84/libcomposite.ko insmod /config/modules/4.9.84/usb_f_uvc.ko insmod /config/modules/4.9.84/udc-msb250x.ko insmod /config/modules/4.9.84/g_webcam.ko streaming_maxpacket=3072
修改完后重启设备,如果是出现某些ko因为已经存在而无法insmod的错误提示,例如
“insmod: can't insert '/config/modules/4.9.84/usb-common.ko': File exists”则不用管。如果是其他原因insmod出错,例如找不到symbol,那么就要确认是不是kernel没有成功更新,或者是少了某个ko。若没有其他错误则进行下一步。
8. 编译UVC APP¶
修改sdk/verify/mi_demo/source/Makefile,注释#ifneq ($(filter usbcam%, $(PRODUCT)), )
和#endif
如果整个工程没有编译过,则要先编译一次,例如:
project$ ./setup_config.sh ./configs/ipc/i6e/spinand.glibc-9.1.0-squashfs.012b.256.qfn128 project$ make clean;make image -j8
编译完成之后,后续如果想单独编uvc app,则可以到sdk/verify/mi_demo/source目录下,执行make uvc
即可,可执行文件生成在 sdk/verify/mi_demo/out/demo/app/prog_uvc
9. 运行UVC APP¶
将8中uvc可执行文件放到板子上, 例如/customer下(记得要chmod 777 prog_uvc),在串口终端输入如下命令运行app:
/customer# ./prog_uvc –A0
注意: prog_uvc可以带一些参数,例如-A选择sensor输入的分辨率选项,具体可带哪些参数可以查看source code, 或者通过prog_uvc -h
查看。
至此,host可打开usbcam设备预览图像。如果host无法识别设备或者无法出图,那么请按如下步骤确认:
-
UVC APP运行是否error;
-
sensor ko是否正确;
-
确认硬件(主要是USB线),板子的USB座子等是否正确。
可使用板子烧一版usbcam的image,如果UVC APP运行无error,但无法识别设备或无法出图,则硬件存在问题,可以更换USB线或者请硬件工程师确认问题。