1. 去www.kernel.org下载同版本的内核(与Ubuntu 14.0)

解压后把drivers/media/video/uvc目录取出(发现我的3.13版本的在drivers\media\usb\uvc下)
修改它的Makefile为:

KERN_DIR = /usr/src/linux-headers-3.13.0-35-generic

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

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

uvcvideo-objs := uvc_entity.o uvc_debugfs.o uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o \
uvc_status.o uvc_isight.o
obj-m += uvcvideo.o

Device Drivers --->
<*>Multimedia support --->
[*] Cameras/video grabbers support
[*] Media usb adapters---->
<*> USBvideo class (uvc)
[*] uvc input events device support

Device Drivers --->
[*]usb support
[*] usb announce new device
<*> usb gadget support à
< *> usb gadget drivers(usb webcam gadget)

2、make的时候出错提示很多 media_device*******,media_entity******函数找不到,在Ubuntu内核下make menuconfig,发现没有配置支持Multimedia support,一个做法是配置后make生成内核文件,替换现有的内核,该方法不会,所以我这里使用单独把这些编译成模块,在网上下载的源码中搜索这些函数,发现是在/media目录下,(ubuntu内核中很多文件都找不到,目前不知道原因),修改media下makefile(最开始只添加了media-device.o,在insmod之后的时候通过dmesg看却哪些函数)

KERN_DIR = /usr/src/linux-headers-3.13.0-35-generic

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

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

obj-m += media-entity.o
obj-m += media-devnode.o
obj-m += media-device.o

需要注意的是,media-entity和media-devnode中的函数是通过EXPORT_SYMBOL_GPL声明,能使用该符合的模块必须声明为“GPL”,同时要添加头文件“#include <linux/module.h>”,否则会报错“error: expected declaration specifiers or ‘...’ before string constant”,以上三个模块安装后回到uvc目录下

再次安装make,这时候还是提示warning:media_device****等一些函数undefined

这是linux kernel 2.6.26 之后版本的bug (详细描述, 请看http://bugzilla.kernel.org/show_bug.cgi?id=12446)
并且这个bug不会被fix

解决办法是把mod_a的Module.symvers放到mod_b的当前路径,从而编译mod_b,符号信息会自动连接进去.
或者在mod_b的makefile中使用KBUILD_EXTRA_SYMBOLS指定mod_a的Module.symvers, 如:
KBUILD_EXTRA_SYMBOLS=/mod_a/Module.symvers

编译mod_b时,搜索Module.symvers的路径是:
1, kernel source path, e.g. /usr/src/kernels/linux-2.6.28.10
2, makefile中M=所指定的路径, 它等效于变量KBUILD_EXTMOD的值
3, 变量KBUILD_EXTRA_SYMBOLS的值

我按照上面所叙述的对我的内核模块的Makefile 做了修改,在编译命令那行加了“KBUILD_EXTRA_SYMBOLS=/linux-3.1.4/Module.symvers”,同时还需要添加MODULE_LICENSE("GPL");

最后模块make 通过,同时insmod也成功了,但是设备在video_register_device时候失败,到这里之后没一点头绪了,等有时间了在弄

insmod之后通过dmesg查看没有/dev/video0的原因,发现在v4l2-dev.c的779行出错:

if (WARN_ON(!vdev->v4l2_dev))
return -EINVAL;

在video_register_device的时候出现上述错误,接着分析uvc_driver.c和vivi.c,在vivi.c中发现v4l2_dev会被赋值

vfd->v4l2_dev = &dev->v4l2_dev;

dev->v4l2_dev;会在v4l2_device_register(NULL, &dev->v4l2_dev);中被设置,而在uvc_driver.c中,在uvc_register_video函数中也赋值了;

vdev->v4l2_dev = &dev->vdev;

现在就不知道原来了,但是在v4l2_device_register之前有个#ifdef CONFIG_MEDIA_CONTROLLER的判断,不知道是不是这个没有配置引起的

22、在Ubuntu 14.0上使用韦东山IP2977测试总结(未成功)的更多相关文章

  1. Win7机器上安装Ubuntu 14.0.4

    折腾了两天,分享一下经历. 我须要在已经安装了win7的机器上安装Ubuntu 14.0.4 (两者共存),研究下来有例如以下几种方案, 都折腾了一遍.分享一下经验: 方式1: wubi.exe, 把 ...

  2. Ubuntu 14.04 上使用 Nginx 部署 Laravel

    本教程将会涉及以下工具: Ubuntu 14.04 LTS PHP 5.5 MySQL Laravel 5.0 Nginx 参考文章:Ubuntu 14.04 上使用 Nginx 部署 Laravel ...

  3. 翻译:在Ubuntu 14.04上安装FTP服务器的方法

    说明: 1.原文地址:http://www.krizna.com/ubuntu/setup-ftp-server-on-ubuntu-14-04-vsftpd/ 2.今天要做一个网络日志的迁移程序,搬 ...

  4. Ubuntu 14.0操作系统,修改默认打开方式的方法

    Ubuntu 14.0 有内置的视频播放器 Totem,但是使用起来不太习惯,所以在系统的软件中心 下载了gnome Mplayer和s Mplayer,都有打开上次播放的忆功能,只是gnome Mp ...

  5. [转] 如何在 Ubuntu 14.04 上通过 apt-get 安装 Apache Tomcat 7

    PS:war 部署路径:/var/lib/tomcat7/webapps http://www.linfuyan.com/how-to-install-apache-tomcat7-on-ubuntu ...

  6. 如何在Ubuntu 14.10 上安装WordPress?

    http://codex.wordpress.org/zh-cn:安装WordPress 介绍 如果你想快捷.简单.免费的创建个人网站的话,WordPress 是你最佳的选择. WordPress 是 ...

  7. deepsooncms在Ubuntu 14.04上部署教程

    deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...

  8. Ubuntu 14.04 上安装 Gurobi

    参考: Installing Gurobi 7 on Linux Ubuntu 14.04 上安装 Gurobi 1.在gurobi上创建一个账户,并登陆: 2.从gurobi optimizer上下 ...

  9. SecureCRT无法使用root正常连接Ubuntu 14.0.4.1的解决办法

    问题描述 通过VirtualBox重新安装了Ubuntu 14.0.4.1 虚拟服务器,在SercureCRT中使用root帐号连接Ubuntu14.0.4.1的时候,提示“Password Auth ...

随机推荐

  1. C#开发 —— 基础知识

    C# 用于开发可以运行在 .Net 平台上的应用程序,C# 本身只是一种语言,尽管它是用于生成面向 .Net 环境的代码,但它本身不是 .Net 的一部分 Console.WriteLine 命名空间 ...

  2. kafka删除主题

    hdp集群默认不能删除kafka主题,如果要删除,需要在ambari上进行配置,将enable delete设置为true.

  3. 源代码看CoordinatorLayout.Behavior原理

    在上一篇博客CoordinatorLayout高级使用方法-自己定义Behavior中,我们介绍了怎样去自己定义一个CoordinatorLayout的Behavior.通过文章也能够看出Behavi ...

  4. android图像处理系列之六--给图片添加边框(下)-图片叠加

    前面介绍了一种用透明图片叠加的方式添加花边边框,下面将介绍另外一种图片叠加添加花边边框的方式.前面方法有一个缺点,就是做成PNG图片,图片体积会很大,不是一般的大,比同样的JPG大三倍多,如果项目可以 ...

  5. 淘宝的css初始化代码

    ;; } body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; } h1, h2, h3, h ...

  6. centos7.2 64位安装java

    1.  wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk- ...

  7. Android 为什么要有handler机制?handler机制的原理

    为什么要有handler机制? 在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化.有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过 ...

  8. c# 调用 C++ dll 传入传出 字符串

    c# 调用 C++ dll 传入传出 字符串 2013-07-02 09:30 7898人阅读 评论(2) 收藏 举报 本文章已收录于:   分类: windows 版权声明:随便转载,随便使用. C ...

  9. Mycat常见问题与解决方案---宜将剩勇追穷寇,不可沽名学霸王

    1 Mycat目前有哪些功能与特性? 答: • 支持 SQL 92标准 • 支持Mysql集群,可以作为Proxy使用 • 支持JDBC连接多数据库 • 支持NoSQL数据库 • 支持galera f ...

  10. 使用 Python 第三方库 daft 绘制 PGM 中的贝叶斯网络

    daft 的官方文档请见 DAFT:BEAUTIFULLY RENDERED PROBABILISTIC GRAPHICAL MODELS. from matplotlib import rc rc( ...