22在Ubuntu 14.0上使用韦东山IP2977测试总结(未成功)

Posted liusiluandzhangkun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了22在Ubuntu 14.0上使用韦东山IP2977测试总结(未成功)相关的知识,希望对你有一定的参考价值。

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时候失败,到这里之后没一点头绪了,等有时间了在弄

































以上是关于22在Ubuntu 14.0上使用韦东山IP2977测试总结(未成功)的主要内容,如果未能解决你的问题,请参考以下文章

(转)韦东山linux学习之ubuntu 9.10 软件源 问题

韦东山freeRTOS系列教程之第九章任务通知(Task Notifications)

请问韦东山JZ2440开发板为啥新制作的文件系统启动,一直卡在Freeing init memory: 136K?

Win7无法远程连接Ubuntu mate16.04

《韦东山新视频 — hello驱动(不涉及硬件)》

韦东山:直击C语言头文件使用痛点(视频讲解)