(前一部分的基础操作来源于作者:LingXiaokai 的 Ubuntu 9.10 下如何使用笔记本摄像头以及虚拟摄像头vivi的测试

自己仅对实际操作中需要注意的点进行阐述

一、先在Ubuntu 9.10下面安装一个应用程序的测试程序xawtv,便于分析:

在网上搜索Ubuntu摄像头测试,搜索Ubuntu摄像头驱动,有cheesexawtv两种摄像头驱动。

经过测试,cheese由于系统版本太老无法使用,我们使用的是xawtv这个摄像头测试程序。

在Ubuntu下面安装应用程序非常简单,执行 sudo apt-get install xawtv 即可。

如果Ubuntu无法上网,需配置,加上路由 sudo route add default gw 192.168.0.1 (路由器)

执行sudo apt-get install xawtv ,发现需要一些安装包。

输入Y安装,发现Ubuntu找不到安装包,由于Ubuntu9.10已经很老了,需更新资源列表sources.list。

文件/etc/apt/sources.list是一个普通可编辑的文本文件,保存了ubuntu软件更新的源服务器的地址。

  解决方法:

在这个网站创建新的sources.list:  http://repogen.simplylinux.ch/   
    
    选择国家china 选择接近的Ubuntu版本12.04 选择生成哪些库,选择第一个主分支,但是不要下载。
    
    点击最下方Generate List,生成list 
    
    得到一行deb:  deb http://cn.archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse 
    
    修改sudo vi /etc/apt/sources.list 
    
    把里面的内容全部删掉,加上 deb http://cn.archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse 
    
    更新:sudo apt-get update,再安装 sudo apt-get install xawtv

如果以上方法仍无法安装,可能是由于官网无可用的Ubuntu相近版本的sources.list,可以使用国内的开源代理,如163代理

使用如下deb:
deb http://mirrors.163.com/ubuntu/ lucid main universe restricted multiverse
eb-src http://mirrors.163.com/ubuntu/ lucid main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ lucid-security universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ lucid-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ lucid-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ lucid-proposed universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ lucid-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ lucid-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ lucid-backports universe main multiverse restricted
deb-src http://mirrors.163.com/ubuntu/ lucid-updates universe main multiverse restricted

现在安装xawtv完成,接下来测试笔记本电脑的摄像头:

让虚拟机位于前台,ls /dev/video 发现摄像头设备:dev/video0,即对应笔记本电脑摄像头。
    
    直接执行 xawtv,打开摄像头。点击右键出来菜单,可以调节亮度等信息。

二、测试虚拟摄像头vivi

1.查看Ubuntu内核版本 :uname -a
   Linux book-desktop 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:04:26 UTC 2009 i686 GNU/Linux

2.去网站下载这个版本的内核,www.kernel.org  如果没有这个版本,取相邻版本
   
  下载 linux-2.6.31.14.tar.bz2  05-Jul-2010 17:13   59M

3.将下载的内核里面的/drivers/media/video目录复制到服务器project_video目录下:
   
  虚拟机Ubuntu内核目录:cd /usr/src     linux-headers-2.6.31-14-generic
  
  执行pwd    显示路径: /usr/src/linux-headers-2.6.31-14-generic,这就是Makefile里的内核目录

4.到project_video目录下的video里新建一个Makefile

KERN_DIR = /usr/src/linux-headers-2.6.31-14-generic

all:
        make -C $(KERN_DIR) M=`pwd` modules

clean:
        make -C $(KERN_DIR) M=`pwd` modules clean
        rm -rf modules.order

obj-m   += vivi.o
  
  直接make,得到vivi.ko

5.sudo insmod vivi.ko
发现 insmod: error inserting 'vivi.ko': -1 Unknown symbol in module 有些函数找不到

dmesg 命令 :
[12120.272121] vivi: Unknown symbol videobuf_streamoff
[12120.272794] vivi: Unknown symbol videobuf_poll_stream
[12120.276482] vivi: Unknown symbol videobuf_reqbufs
[12120.276823] vivi: Unknown symbol videobuf_queue_is_busy
[12120.277830] vivi: Unknown symbol videobuf_dqbuf
[12120.278501] vivi: Unknown symbol videobuf_to_vmalloc
[12120.278735] vivi: Unknown symbol videobuf_vmalloc_free
[12120.279255] vivi: Unknown symbol v4l_bound_align_image
[12120.279709] vivi: Unknown symbol videobuf_stop

在虚拟机内核代码里查找videobuf_streamoff在哪里定义:videobuf-core.c里定义,所以也应该在Makefile里把它编译进去。
  在Makefile里要编译的文件如下:

obj-m   += vivi.o
obj-m   += videobuf-core.o
obj-m   += videobuf-vmalloc.o
obj-m   += v4l2-common.o

再sudo insmod  vivi.ko ,没有问题了。

6.ls /dev/video*  : 出现两个设备节点 /dev/video0  /dev/video1 ,其中video0为笔记本摄像头,video1为vivi.ko虚拟出来的摄像头设备。

7.测试vivi.ko :
  应用程序xawtv默认打开的是/dev/video0,执行 xawtv --help 查看帮助信息
  执行 xawtv -c /dev/video1 即可打开vivi,我们可以看到是一个虚拟的视频(条纹)
--------------------------------------------------------------------------------------------------------------

在装载vivi,ko时,实际上其所需要的依赖不仅仅是以上几个。若在装载vivi.ko之前没有将USB摄像头连接到Ubuntu,

则会继续出现Unknown symbol in module 的问题。当右下角出现摄像头时,则说明已经系统已经提前安装好相关驱动。则可以insmod成功。

(解决方法见下节)

虚拟摄像头vivi的测试(二)的更多相关文章

  1. (四) 虚拟摄像头vivi体验

    目录 虚拟摄像头vivi体验 源码下载 修改Makefile 安装xawtv 测试体验 title: 虚拟摄像头vivi体验 date: 2019/4/23 19:20:00 toc: true -- ...

  2. 20、在PC上测试虚拟驱动vivi

    在Ubuntu上测试 准备工作:安装xawtv(是一个应用程序,用来在Ubuntu上捕获摄像头数据并显示)sudo apt-get install xawtv 源码xawtv-3.95.tar.gz: ...

  3. V4L2(二)虚拟摄像头驱动vivi深入分析【转】

    转自:http://www.cnblogs.com/tureno/articles/6694463.html 转载于: http://blog.csdn.net/lizuobin2/article/d ...

  4. vivi虚拟摄像头驱动程序

    一.vivi虚拟摄像头驱动 基于V4L2(video for linux 2)摄像头驱动程序,我们减去不需要的ioctl_fops的函数,只增加ioctl函数增加的必要的摄像头流查询等函数: #inc ...

  5. 通过虚拟驱动vivi分析摄像头驱动

    Linux摄像头驱动学习之:(二)通过虚拟驱动vivi分析摄像头驱动 一.通过指令 "strace -o xawtv.log xawtv" 得到以下调用信息: // 1~7都是在v ...

  6. 二十四、V4L2框架主要结构体分析和虚拟摄像头驱动编写

    一.V4L2框架主要结构体分析 V4L2(video for linux version 2),是内核中视频设备的驱动框架,为上层访问视频设备提供统一接口. V4L2整体框架如下图: 图中主要包括两层 ...

  7. 初始v4l2(六)-------根据虚拟驱动vivi的使用彻底分析摄像头驱动

    前面的几篇文章已经分析了v4l2的框架,对框架的分析是比较粗浅的,能基本清楚函数之间的调用过程.但是很多内容并没有分析,比如说里面有很多ioctl,并没有分析哪些ioctl是必须的,也没有分析如何从应 ...

  8. V4L2学习(五)VIVI虚拟摄像头驱动

    概述 前面简单分析了内核中虚拟摄像头驱动 vivi 的框架与实现,本文参考 vivi 来写一个虚拟摄像头驱动,查询.设置视频格式相对简单,难点在于 vb2_buf 的处理过程. 数据采集流程分析 在我 ...

  9. macOS平台下虚拟摄像头的研发总结

    一.背景介绍 虚拟摄像头,顾名思义,就是利用软件技术虚拟出一个摄像头硬件设备供用户使用.当我们需要对视频图像进行处理再输出时,虚拟摄像头就具备非常大的价值了.关于如何在Windwos上实现一个虚拟设备 ...

随机推荐

  1. elasticsearch中的几个概念总结

    1.Geo spatial search : 地理空间搜索,可以在搜索查询中指定的某一距离内查找所要的内容.也可以返回以当前为圆心,逐渐添加圆的半径.直到找到所匹配到的内容. 參考:http://ww ...

  2. Zico源代码分析:执行启动过程分析和总结

    事实上已经有童鞋对Zico的源代码和执行过程进行了总结,比如:http://www.cnblogs.com/shuaiwang/p/4522905.html.这里我再补充一些内容. 当我们使用mvn ...

  3. SQLSever: 怎样在select中的每一行产生不同的随机数?

    select 的随机函数有点假, 或许是由于它是基于时间来的吧, 同一select中由于时间无法错开导致产生的随机数都是一样的. 怎样做到让不同的行拥有不同的随机数呢? 以下以产生某个月的随机日期来演 ...

  4. Xshell高级后门完整分析报告

    Xshell高级后门完整分析报告 from:https://security.tencent.com/index.php/blog/msg/120 1. 前言 近日,Xshell官方发布公告称其软件中 ...

  5. BP神经网络模型及梯度下降法

    BP(Back Propagation)网络是1985年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一. B ...

  6. Visual Studio添加lib到链接依赖项的几种方法

    使用第三方库文件编写应用时经常会出现链接错误: 错误 22 error LNK2019: 无法解析的外部符号..... 该符号在函数.....在....中被引用 出现这个错误的原因很简单,链接器在將库 ...

  7. PostgreSQL Replication之第三章 理解即时恢复(2)

    3.2 归档事务日志 看过图片之后,我们可以看看如何使这些东西进入工作状态.当谈到及时归档时,您需要做的第一件事是归档XLOG.PostgreSQL通过postgresql.conf提供了所有与归档相 ...

  8. vuejs on

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 不再安全的 OSSpinLock

    自旋锁的本质是持续占有cpu,直到获取到资源.与其他锁的忙等待的实现机制不同. 昨天有位开发者在 Github 上给我提了一个 issue,里面指出 OSSpinLock 在新版 iOS 中已经不能再 ...

  10. Remmina:一个 Linux 下功能丰富的远程桌面共享工具(转载)

    Remmina:一个 Linux 下功能丰富的远程桌面共享工具 作者: Aaron Kili 译者: LCTT geekpi | 2017-05-10 09:05   评论: 2 收藏: 4 Remm ...