您尚未登录。

楼主 # 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_proj.png
加入包含路径:
libuvc_include.png
其中,libuvc\raw是libuvc目录。libuvc\port是libuvc的移植目录,里面存放linux下编译libuvc时自动生成的libuvc_config.h(按照linux下编译libuvc生成的目录结构)。
宏配置,使能APP_USE_LIBUVC_DEMO:
libuvc_macro.png
libuvc的main入口修改:
libuvc_entry.png
linux fhs里,安装libuvc demo(在vsf_main.c中的vsf_linux_create_fhs函数):
libuvc_exe.png
这里就是绑定uvc可执行文件为uvc_main(之前的libuvc example的入口)。

第三部,编译
提示错误:
1. frame-mjpeg.c里,jpeglib.h头文件没找到。
不支持mjpeg,frame_mjpeg.c不参与编译。
libuvc_exclude_mjpeg.png
2. 一些库函数冲突,看了一下,是因为包含了windows的头文件,在libuvc_config.h中加入如下内容:
libuvc_config.png

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

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

额外的异步,windows下的winusb驱动,需要定义具体设备ID,修改vsf_usr_cfg_win.h:
libuvc_winusb_config.png
这里使用的UVC摄像头的PID/VID就是04F2/B130。
windows上,需要用zadig为这个摄像头安装winusb驱动。

摄像头接入PC后,编译运行:
libuvc_connect.png
这里的提示,就是UVC摄像头已经识别,使用了libusb的驱动。

运行demo(命令行输入uvc,按回车):
libuvc_run.png
libuvc_run_error.png
UVC识别OK,不过后面有运行错误,IO Error,libuvc开源的,所以可以简单调试一下。

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

上USB协议分析仪,截取报文:
libuvc_usb.png
看错误,是UVC摄像头的问题,几个UVC的标准请求没有响应。

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

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

离线

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

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

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

kekemuyu 说:

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