您尚未登录。

楼主 # 2022-06-20 14:16:37

vsf
会员
注册时间: 2020-03-03
已发帖子: 59
积分: 94

VSF linux应用移植系列 -- libuvc(一)初步移植

libuvc是基于libusb的USB UVC(USB Video Class)驱动,VSF系统具备完善的fd事件机制(libuvc需要),也支持相对完整的libusb库。所以移植libuvc相对而言,应该会比较简单。

VSF以及linux子系统,参考:https://whycan.com/t_8363.html

按照移植步骤的话,第一步是在linux下编译libuvc,使用自动生成的libuvc_config.h:
<code>
#ifndef LIBUVC_CONFIG_H
#define LIBUVC_CONFIG_H

#define LIBUVC_VERSION_MAJOR 0
#define LIBUVC_VERSION_MINOR 0
#define LIBUVC_VERSION_PATCH 6
#define LIBUVC_VERSION_STR "0.0.6"
#define LIBUVC_VERSION_INT \
((0 << 16) | \
(0 << 8) | \
(6))

/** @brief Test whether libuvc is new enough

  • This macro evaluates true if and only if the current version is

  • at least as new as the version specified.
    */
    #define LIBUVC_VERSION_GTE(major, minor, patch) \
    (LIBUVC_VERSION_INT >= (((major) << 16) | ((minor) << 8) | (patch)))

/ #undef LIBUVC_HAS_JPEG /

#endif // !def(LIBUVC_CONFIG_H)
</code>

第二部,建立visual studio测试工程,从vsf.linux/project/vc拷贝一份到vc_libuvc。
在工程里,加入libuvc的源码:

加入包含路径:

其中,libuvc\raw是libuvc目录。libuvc\port是libuvc的移植目录,里面存放linux下编译libuvc时自动生成的libuvc_config.h(按照linux下编译libuvc生成的目录结构)。
宏配置,使能APP_USE_LIBUVC_DEMO:

libuvc的main入口修改:

linux fhs里,安装libuvc demo(在vsf_main.c中的vsf_linux_create_fhs函数):

这里就是绑定uvc可执行文件为uvc_main(之前的libuvc example的入口)。

第三部,编译
提示错误:

  1. frame-mjpeg.c里,jpeglib.h头文件没找到。
    不支持mjpeg,frame_mjpeg.c不参与编译。

  2. 一些库函数冲突,看了一下,是因为包含了windows的头文件,在libuvc_config.h中加入如下内容:

第四部,资源优化
既然在windows上移植,暂时不需要优化,先跑通功能。

第五步,动态加载
暂不考虑,先跑通功能。

额外的异步,windows下的winusb驱动,需要定义具体设备ID,修改vsf_usr_cfg_win.h:

这里使用的UVC摄像头的PID/VID就是04F2/B130。
windows上,需要用zadig为这个摄像头安装winusb驱动。

摄像头接入PC后,编译运行:

这里的提示,就是UVC摄像头已经识别,使用了libusb的驱动。

运行demo(命令行输入uvc,按回车):


UVC识别OK,不过后面有运行错误,IO Error,libuvc开源的,所以可以简单调试一下。

调试发现,是如下位置出错:

上USB协议分析仪,截取报文:

看错误,是UVC摄像头的问题,几个UVC的标准请求没有响应。

等新的UVC摄像头,到了之后再测试。

最近编辑记录 vsf (2022-06-20 17:00:32)

离线

#1 2022-06-28 21:03:31

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 856
积分: 697

Re: VSF linux应用移植系列 -- libuvc(一)初步移植

vsf还是走自己的应用路线吧,移植linux应用想扩大生态是徒劳的。我能在linux上跑,为什么还需要vsf呢?

最近编辑记录 kekemuyu (2022-06-28 21:04:11)

离线

楼主 #2 2022-06-28 22:16:46

vsf
会员
注册时间: 2020-03-03
已发帖子: 59
积分: 94

Re: VSF linux应用移植系列 -- libuvc(一)初步移植

kekemuyu wrote:

vsf还是走自己的应用路线吧,移植linux应用想扩大生态是徒劳的。我能在linux上跑,为什么还需要vsf呢?

这个就是VSF的路线,如果你都直接用linux了,那没必要上VSF,多此一举。
VSF里用linux的应用代码,目前已经有几个项目在出货了,这个是因为项目需求才做的(客户给钱了,我们就开发),只是现在才开始推而已。其实,早在几年前就做了这个,在我们自己的项目里用的,之后还移植到ESP32里:https://whycan.com/t_5718.html
一般是在wifi soc上用的,这些芯片里,跑原版linux代价太大,而且都不一定可以跑得动的。

wifi soc里的使用,参考这里:https://whycan.com/t_8363.html

最近编辑记录 vsf (2022-06-28 22:19:25)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发