debugger 发表于 2014-9-26 17:13:11

Kernel更新后无法使用摄像头

使用E9光盘上的原有系统,USB摄像头(UVC Camera)可用;

后按照FAQ上提示的更新声卡驱动,重新编译内核uImage并采用SD卡烧录后,系统启动正常,但摄像头不可用:用Ubuntu自带的Camorama摄像头软件提示“Cound not connect to video device(/dev/video0)". 其他类似软件也提示相同错误。

用lsusb命令可查看到video device,并可看到/dev/video0, /dev/video16等6个video device.

在/var/log/dmesg中提示以下错误,不知是否与此问题相关:

camera_sensor_clock: version magic '3.0.35-2508-g54750ff SMP preempt mod_unload modversions ARMv7 ' should be '3.0.35-2508-g54750ff SMP preempt mod_unload modversions ARMv7 p2v8 '
uvcvideo: version magic '3.0.35-2508-g54750ff SMP preempt mod_unload modversions ARMv7 ' should be '3.0.35-2508-g54750ff SMP preempt mod_unload modversions ARMv7 p2v8 '

TQ-ZQL 发表于 2014-9-28 10:29:06

不应该是video0的,video0是系统的不管接不接都有的。你看下是不是设备名搞错了。或者自己写个v4l2的简单例子看下。

debugger 发表于 2014-9-29 12:57:10

谢谢回复!

问题最终解决了。

对比正常情况下(更新内核前)的日志syslog,基本确定uvcvideo驱动模块(.ko)没有加载成功,而原因在于系统加载(modprobe或insmod)时做了version magic检查,syslog里显示出错如下:
uvcvideo: version magic '3.0.35-2508-g54750ff SMP preempt mod_unload modversions ARMv7 ' should be '3.0.35-2508-g54750ff SMP preempt mod_unload modversions ARMv7 p2v8 '
差别在于version里多了"p2v8"。
网上有篇文档谈及version magic问题:http://blog.chinaunix.net/uid-24406894-id-2608938.html

Versio magic字符串中"p2v8"的由来:.config(源于FAQ附件imx6_defconfig)中使能了CONFIG_ARM_PATCH_PHYS_VIRT,即:
CONFIG_ARM_PATCH_PHYS_VIRT=y
而linux_E9_3.0.35_for_Ubuntu/arch/arm/include/asm/module.h中定义了P2V version magic如下:
/* Add __virt_to_phys patching state as well */
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT
#ifdef CONFIG_ARM_PATCH_PHYS_VIRT_16BIT
#define MODULE_ARCH_VERMAGIC_P2V "p2v16 "
#else
#define MODULE_ARCH_VERMAGIC_P2V "p2v8 "
#endif
#else
#define MODULE_ARCH_VERMAGIC_P2V ""
#endif
后强制设置define MODULE_ARCH_VERMAGIC_P2V为空,编译内核后没有出现uvcvideo的version magic检查错误,摄像头工作正常。

曾试过修改.config中的CONFIG_ARM_PATCH_PHYS_VIRT由Y改为not set,也能绕过version magic问题,摄像头工作正常,但似乎带来其他的系统问题,ping不通任何设备(包括网关),显示"Destination Host unreachable“,只好作罢。






页: [1]
查看完整版本: Kernel更新后无法使用摄像头