Linux虚拟摄像头vivid配置

总述

最近在看摄像头驱动,需要配置虚拟摄像头的驱动,但是教程里面是linux2.6内核的,实际电脑的是Ubuntu16,内核是linux4.15版本,从2.6到4.15内核好多文件发生了变化,所以我们该怎么操作呢?下面就让我给大家介绍一哈,怎么下载最新的内核并进行编译成虚拟摄像头驱动。

作者:良知犹存

转载授权以及围观:欢迎添加微信公众号:Conscience_Remains

1

查看并下载源码

使用命令查看当前系统的内核

uname -aLinux lyn 4.15.0-117-generic #118~16.04.1-Ubuntu SMP Tue Sep 8 14:54:40 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux


可以看到内核版本是4.15,然后我们就可以去下载源码去了

去www.kernel.org找同版本的内核,如果没有请找最相近的内核代码

因为我的版本已经是4.15属于v4.x,所以选择了v4.x进入

最后用网页搜索选择了4.15的一个版本进行了下载

tar xzf linux-4.15.1.tar.gz 解压文件

新版本的linux下已经更名为vivid,可以用find寻找一下目录


之后就把

linux-4.15.1/drivers/media/platform/vivid/

目录下所有文件拷贝的一个文件夹下

2

进行VIVID驱动编译

首先我们看一下,在vivid文件目录下本来的Makefile文件,这个Makefile编译之后选项配置由CONFIG_VIDEO_VIVID这个变量控制,显然不符合我们的要求

    首先编译我们需要选择编译的内核目录,首先我在linux的usr(usr被称为是Unix System Resource,即Unix系统资源的缩写。/usr 是系统核心所在,包含了所有的共享文件。它是 unix 系统中最重要的目录之一,涵盖了二进制文件,各种文档,各种头文件,还有各种库文件;还有诸多程序,例如 ftp,telnet 等等。)目录下寻找。

cd /usr/src/linux......

这样就可以看到对应的内核目录了

经过添加内核目录,然后添加上需要编译的文件,一个简单的驱动Makefile就做好了,当然这个也不是最完美的,请听我一一道来。

KERN_DIR = /usr/src/linux-headers-4.15.0-118-genericall:make -C $(KERN_DIR) M=`pwd` modules
clean:make -C $(KERN_DIR) M=`pwd` modules cleanrm -rf modules.orderobj-m := vivid-core.o vivid-ctrls.o vivid-vid-common.o vivid-vbi-gen.o \vivid-vid-cap.o vivid-vid-out.o vivid-kthread-cap.o vivid-kthread-out.o \vivid-radio-rx.o vivid-radio-tx.o vivid-radio-common.o \vivid-rds-gen.o vivid-sdr-cap.o vivid-vbi-cap.o vivid-vbi-out.o \vivid-osd.o vivid-cec.o

开始进行编译,出现一个error

/work/driver_and_test/vivid/vivid-ctrls.c:In function ‘vivid_vid_cap_s_ctrl’:
/work/driver_and_test/vivid/vivid-ctrls.c:346:3:error: ‘V4L2_COLORSPACE_ADOBERGB’ undeclared (first use in this function)V4L2_COLORSPACE_ADOBERGB,^
/work/driver_and_test/vivid/vivid-ctrls.c:346:3:note: each undeclared identifier is reported only once for each function itappears in
scripts/Makefile.build:337: recipe fortarget '/work/driver_and_test/vivid/vivid-ctrls.o' failed
make[2]: ***[/work/driver_and_test/vivid/vivid-ctrls.o] Error 1

出现了未定义V4L2_COLORSPACE_ADOBERGB变量的error

但是在正则表达式去搜索文件定义的时候发现vivid目录下所有文件都没有定义过,所以我直接选择进行出问题的地方进行注释

vi vivid-ctrls.c +346 //注释掉相关定义


继续编译出现另一处类似的错误,继续注释掉

不过这次用这个Makefile编译完之后,我们编译出了好多个.ko文件,在实际加载驱动时候很不方便

所以我们需要重新修改Makefile文件,把vivid目录下的文件都编译成一个.o文件,按然后再编译为一个.ko文件

MakeFile内容如下所示:

编译结果如下,只有一个vivid,ko文件

3

测试体验效果

首先我们先安装xawtv

xawtv是用于使用电视调谐器或卫星接收卡(DVB-S)观看和录制电视和网络摄像头的软件。xawtv可在类似Unix的操作系统上运行,并已获得GPL许可。

维基百科

sudo apt-get install xawtv

sudo modprobe vivid     //安装自带vivid及依赖,这里先使用modprobr加载vivid,会将其依赖一并加载,然后再卸载vivid,最后加载上我们编译的vivid.ko
sudo rmmod  vivid        //卸载自带的vivid
sudo insmod./vivid.ko  //安装自己编译的vivid.ko

 

xawtv -h           //帮助信息
xawtv -c/dev/videoX   //指定设备
xawtv -noalsa        //关闭声卡启动
xawtv          //运行摄像头

如图所示,虚拟摄像头就开始运行起来了。

这就是我分享的linux4.15内核下的虚拟摄像头配置,如果大家有什么更好的思路,欢迎分享交流哈。


插播一条信息:

之前推荐的一本书籍,大家反响很好,今天书籍的其中一位作者「博士」会开一个直播,有喜欢的同学可以看看。

现代操作系统:原理与实现

作者:陈海波 夏虞斌

推荐语:

操作系统和系统安全领域国际知名学者、上海交通大学陈海波、夏虞斌领衔撰写;

由浅入深介绍现代操作系统经典理论与方法,结合前沿研究与工业界实践,面向真实场景与真实问题;

全新打造ChCore微内核系列课程实验,建立对操作系统的第一手实践经验。

书籍详细内容可以点击阅读原文:

大家转发这篇文章并留言,我选出5名同学赠送这本书籍,截止周六晚上20:00

选中的留言我会置顶并回复一颗♥,发现自己的留言被置顶了的同学记得私信给我收货地址。


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一次工作报告

要求 1. 对源文件(*.txt,*.cpp,*.h,*.cs,*.html,*.js,*.java,*.py,*.php等)统计字符数、单词数、行数、词频,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。 2. 使用性能…

TQ210——S5PV210 uboot顶层mkconfig分析

################################################################################################# # SHELL常用内部参数:   # $# —— 传递给程序的总的参数数目 # $? —— 上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0&am…

音频系统底层API

IAudioEndpointVolume IAudioEndpointVolume接口表示进出音频端点设备的音频流的音量控制。 客户端通过调用参数iid设置为REFIID IID_IAudioEndpointVolume的IMMDevice :: Activate方法获取对端点设备的IAudioEndpointVolume接口的引用。 IAudioEndpointVolume编程调节Win7/Wi…

早睡早起

这两天考虑着以前工作的一些问题。有一点非常需要改正。就是作息时间不规律。经常睡的很晚。把前两年锻炼身体的老本吃的差不多了。该是“存钱”的时候了。新的工作依旧很繁忙,事情很多,但是身体调整绝对不能放松的。所以还是决定从明天开始早起&#xf…

树莓派Pico的一些有趣的基本实验

▲ 实验电路板Raspberry PI Pico小型MCU模块,以其价格低廉,功能丰富,开发方便为很多非电子类专业的同学进行创意项目原型设计提供了方便的平台。下面的一些实验给CDIE课程设计同学们制作的一些基本演示实验。▌01 PI Pico实验板在 RASPBERRY …

Gabor变换

gabor变换分析非平稳信号有弊端主要是时频窗宽度固定 小波wavelet a小窗窄a大窗宽 窗口或短时傅氏变换在时域上和频域上的局部化程度主要由窗函数g(x)的有效时宽Δt 和有效带宽Δf 决定。Δt 和Δf 越小, 表明局部性越好。但Heisenberg 测不准原理指出[ 6] :Δt 和Δf 不可能任…

30块钱的树莓派跑unix系统,源码全部开源,香

▌ 1、前言之前做活动抽奖送的几个树莓派,但是因为好几个人都没有填写地址,所以就只能把东西寄回来给我,然后手痒自己玩了下,觉得这个东西确实很香,比一般的Linux开发板都好。PICO这个开发板可以玩很多东西1 、运行pic…

CoInitialize\CoCreateGuid\CoCreateInstance

CoInitialize是Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象。应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。 https://baike.baidu.com/item/CoInitialize/4114580?fraladdin CoCreateGui…

产品设计体会(8001)产品经理工作手册

产品经理的工作是最具挑战性的工作之一。产品经理职责描述产品经理的全部责任在于通过了解不断变化的市场需求和优化产品推向目标市场的全过程,将企业的不同组成部分凝聚成一个战略上一致集中的整体,同时将一项产品的价值最大化。产品经理的全部职责在于…

Oracle11gR2_ADG管理之恢复主库的truncate表实战

备库开启flashback database #关闭备库的同步 SQL> alter database recover managed standby database cancel;Database altered.SQL> select flashback_on from v$database;FLASHBACK_ON ------------------ NOSQL> alter database flashback on;Database altered.SQ…

为什么大家都只谈薪资,却不谈梦想?

说个薪资的问题,最近在帮一个朋友物色工作,当然,除了我那个朋友以外,也有挺多同学向我咨询offer薪资的问题。先说我那个朋友。高中毕业后去当兵,服兵役结束后去4s店修车,我车子的很多问题也会向他咨询&…

获取指定地址的值

C语言 —— 获取指定地址的值 int b *((volatile unsigned int *)0x0028FF1C);// 0x0028FF1C就是内存中的地址&#xff0c;根据自己需要指定 #include <stdio.h> #include <stdlib.h>int main() {int b *((volatile unsigned int *)0x0028FF1C);printf("b…

IAudioEndpointVolume

IAudioEndpointVolume https://docs.microsoft.com/en-us/windows/desktop/api/endpointvolume/nf-endpointvolume-iaudioendpointvolume-setmute

DataTable.Compute功能

DataTable.Compute具有这么多的功能 1&#xff1a;聚合函数”Sum()” 2&#xff1a;自由计算表达式“20*301” 3&#xff1a;bool表达式“12” 4&#xff1a;IFF逻辑表达式” IIF(20>1000, 0, 1)” //还支持IsNull&#xff0c;Trim&#xff0c;SubString等 一个小应用&#…

Linux下查看内存使用情况方法总结

Linux下查看内存使用情况方法总结转载于:https://www.cnblogs.com/cdyboke/p/8689270.html

差生的 8 年程序员总结

今年终于从大菊花厂离职了&#xff0c;离职前收入大概60w不到吧&#xff0c;在某乎属于比较差的&#xff0c;今天终于有空写一下自己的职场故事&#xff0c;也算是给自己近8年的程序员工作做个总结复盘。近8年有些事情做对了&#xff0c;也有更多事情做错了&#xff0c;在这里记…

关闭windows垃圾服务

Windows集成了许多功能和服务&#xff0c;所以在很多领域得以应用&#xff1b;但是有很多服务是我们个人用户所用不到的&#xff0c;开启只会浪费内存和资源&#xff0c;并且成为***和病毒***的靶子&#xff0c;而且&#xff0c;还影响启动速度和运行速度。关掉大部分没用的服务…

Python简单的抓取静态网页内容

import requests from bs4 import BeautifulSoup res requests.get(http://news.sina.com.cn/china/)#获取目标网页 res.encoding utf-8#抓取网页出现乱码 #print(res.text) soup BeautifulSoup(res.text,html.parser)#爬取网页 for news in soup.select(.news-item): if le…

SystemTray.cpp

SystemTray.cpp _tcscpy _tcscpy 把参2复制到参1并返回参1 _tcscpy是一个拷贝字符串&#xff0c;源字符串指针是strSource&#xff0c;有strcpy、wcscpy、_mbscpy三种类型&#xff0c;这三种形式都返回目标字符串。 函数原型 char *strcpy( char *strDestination, const cha…