以模块方式加载 UVC 驱动
以模块方式加载 UVC 驱动
配置模块编译
修改 kernel 的默认 config 文件:
CONFIG_USB_VIDEO_CLASS=m
高通平台通过 BOARD_VENDOR_KERNEL_MODULES 变量安装 ko 文件到文件系统。
BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/uvcvideo.ko
修改 init.target.rc 脚本,配置开机完成后自动插入模块。
on property:sys.boot_completed=1insmod /vendor/lib/modules/uvcvideo.ko
验证及问题解决
重新编译 android,升级重新开机:
查看内核模块:
sdm845:/ $ lsmod
Module Size Used by
wlan 7729152 0
snd_soc_sdm845 151552 0
snd_soc_wcd934x 425984 1 snd_soc_sdm845
swr_wcd_ctrl 32768 1 snd_soc_wcd934x
snd_soc_wcd_mbhc 81920 1 snd_soc_wcd934x
snd_soc_wcd9xxx 73728 1 snd_soc_wcd934x
snd_soc_wsa881x 53248 1 snd_soc_sdm845
wcd_core 143360 5 snd_soc_sdm845,snd_soc_wcd934x,snd_soc_wcd_mbhc,snd_soc_wcd9xxx,snd_soc_wsa881x
snd_soc_wcd_spi 28672 0
wcd_dsp_glink 24576 1
pinctrl_wcd 16384 0
msm_11ad_proxy 32768 0
手动插入模块:
sdm845:/ # insmod /vendor/lib/modules/uvcvideo.ko
insmod: failed to load /vendor/lib/modules/uvcvideo.ko: No such file or directory
发现 uvcvideo.ko 模块没有加载,检查 kernel log:
02-09 11:12:16.089 0 0 W uvcvideo: Unknown symbol vb2_vmalloc_memops (err 0)
判断 uvcvideo.ko 模块依赖其他模块未正确加载,查看对应的 Kconfig 文件:
config USB_VIDEO_CLASStristate "USB Video Class (UVC)"depends on VIDEO_V4L2select VIDEOBUF2_VMALLOC---help---Support for the USB Video Class (UVC). Currently only videoinput devices, such as webcams, are supported.For more information see: <http://linux-uvc.berlios.de/>
uvcvideo.ko 依赖 VIDEO_V4L2 和 VIDEOBUF2_VMALLOC,显然 VIDEO_V4L2 已经加载了,搜索 VIDEOBUF2_VMALLOC 对应模块。
drivers/media/v4l2-core/Makefile:39:obj-$(CONFIG_VIDEOBUF2_VMALLOC) += videobuf2-vmalloc.o
搜索 videobuf2-vmalloc 模块:
$ find out -name "videobuf2-vmalloc*"
out/target/product/qssi/obj/kernel/msm-4.9/.tmp_versions/videobuf2-vmalloc.mod
out/target/product/qssi/obj/kernel/msm-4.9/drivers/media/v4l2-core/videobuf2-vmalloc.mod.o
out/target/product/qssi/obj/kernel/msm-4.9/drivers/media/v4l2-core/videobuf2-vmalloc.o
out/target/product/qssi/obj/kernel/msm-4.9/drivers/media/v4l2-core/videobuf2-vmalloc.ko
out/target/product/qssi/obj/kernel/msm-4.9/drivers/media/v4l2-core/videobuf2-vmalloc.mod.c
out/target/product/qssi/dlkm/lib/modules/videobuf2-vmalloc.ko
out/target/product/sdm845/vendor/lib/modules/videobuf2-vmalloc.ko
out/target/product/sdm845/obj/kernel/msm-4.9/.tmp_versions/videobuf2-vmalloc.mod
out/target/product/sdm845/obj/kernel/msm-4.9/drivers/media/v4l2-core/videobuf2-vmalloc.mod.o
out/target/product/sdm845/obj/kernel/msm-4.9/drivers/media/v4l2-core/videobuf2-vmalloc.o
out/target/product/sdm845/obj/kernel/msm-4.9/drivers/media/v4l2-core/videobuf2-vmalloc.ko
out/target/product/sdm845/obj/kernel/msm-4.9/drivers/media/v4l2-core/videobuf2-vmalloc.mod.c
out/target/product/sdm845/obj/PACKAGING/depmod_vendor_intermediates/lib/modules/0.0/vendor/lib/modules/videobuf2-vmalloc.ko
out/target/product/sdm845/dlkm/lib/modules/videobuf2-vmalloc.ko
可以看到 videobuf2-vmalloc 确实被编译成模块了。找到模块文件,push 到 /vendor/lib/modules/ 下,使用 insmod 插入模块,依旧提示 “No such file or directory”。
检查 kernel log:
02-09 11:43:57.012 0 0 W videobuf2_vmalloc: Unknown symbol vb2_common_vm_ops (err 0)
02-09 11:43:57.019 0 0 W videobuf2_vmalloc: Unknown symbol vb2_create_framevec (err 0)
02-09 11:43:57.026 0 0 W videobuf2_vmalloc: Unknown symbol vb2_destroy_framevec (err 0)
02-09 11:43:57.035 0 0 W uvcvideo: Unknown symbol vb2_vmalloc_memops (err 0)
同理找到 videobuf2-vmalloc.ko 依赖的模块 videobuf2-memops.ko。手动插入后,再依次插入 videobuf2-vmalloc、uvcvideo.ko。检查模块插入状态:
sdm845:/ # lsmod
Module Size Used by
uvcvideo 86016 0
videobuf2_vmalloc 16384 1 uvcvideo
videobuf2_memops 16384 1 videobuf2_vmalloc
wlan 7729152 0
snd_soc_sdm845 151552 0
snd_soc_wcd934x 425984 1 snd_soc_sdm845
swr_wcd_ctrl 32768 1 snd_soc_wcd934x
snd_soc_wcd_mbhc 81920 1 snd_soc_wcd934x
snd_soc_wcd9xxx 73728 1 snd_soc_wcd934x
snd_soc_wsa881x 53248 1 snd_soc_sdm845
wcd_core 143360 5 snd_soc_sdm845,snd_soc_wcd934x,snd_soc_wcd_mbhc,snd_soc_wcd9xxx,snd_soc_wsa881x
snd_soc_wcd_spi 28672 0
wcd_dsp_glink 24576 1
pinctrl_wcd 16384 0
msm_11ad_proxy 32768 0
此时模块正确加载。连接 USB 摄像头,在 /dev 下生成了新的 video 节点。最后模仿 uvcvideo.ko 模块配置 videobuf2_vmalloc.ko、videobuf2_memops.ko 自动加载加载即可。
注意手动执行 insmod 命令时,报错都是 “No such file or directory”,需要通过 kernel log 查看真正错误的原因。
以模块方式加载 UVC 驱动相关推荐
- Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...
Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...
- arm上加载insmod驱动时出现Unknown symbol in module
问题 这几天在arm上做蓝牙耳机驱动的时候,编译好了驱动但是在板子上insmod时候. 怎么会出现这种情况,不对呀,仔细查我们会发现,其实编译驱动的时候,就出现了一些警告,只是当时没有在意而已,而恰恰 ...
- pythonflask configlist.py_Python+Flask.0004.FLASK配置管理之三种方式加载外部配置
简单介绍: 说明: 复杂的项目需要配置各种环境,若设置少可直接硬编码,设置多的话可通过加载配置/加载文件/加载变量的方式来设置 1 2 3 app.config.update( DEBUG=True, ...
- (16) Node.js 模块的加载逻辑
一.按照组织方式划分模块 文件模块:是我们上一章节说过的,就是一个独立的.js文件. 目录模块:是我们可以将多个独立的.js文件统一存放在一个目录下,也就是放到一个文件夹中. 二.目录模块的加载逻辑 ...
- python加载机制_Python 模块的加载顺序
基本概念 module 模块, 一个 py 文件或以其他文件形式存在的可被导入的就是一个模块 package 包,包含有 init 文件的文件夹 relative path 相对路径,相对于某个目录的 ...
- 【游戏逆向】FPS游戏自瞄透视模块动态加载分析
用OD附加游戏进程, 进入OD主界面以后,我们CTRL+G 跳转到地址00401000(系统默认通常游戏领空的起始地址)的时候发现了错误. 也就是说代码段不在这了, 那跑哪去了? 为什么会有这样的错误 ...
- 一篇文章吃透:为什么加载数据库驱动要用Class.forName()
1.Class.forName()和ClassLoader.loadClass()和new XX的区别 Class.forName():将类的.class文件加载到jvm中之外,还会对类进行解释,执行 ...
- 正确加载MySQL驱动的语句_正确加载MySQL驱动的语句_____________________;_学小易找答案...
[多选题]电子图书的特点是 [简答题] [单选题]为了准备病理学考试,王同学想在图书馆借一本人民卫生出版社出版的熊小亮编写的<病理学试题库>,经过检索发现该书都被借出去了 , 最方便快捷的 ...
- u盘安装linux找不到驱动,利用U盘加载控制器驱动来安装Linux系统的方法
一般我们在安装服务器过程中需要加载一些scsi卡或raid卡驱动,以便操作系统可以检测到硬盘. 常规的安装方式是要用到软驱,其实我们也是可以通过U盘来进行加载的. 装Linux控制器驱动往往都是*.d ...
- linux优化网页加载过程,【zz】Linux起步过程中硬件模块的加载
[zz]Linux起步过程中硬件模块的加载 [zz]Linux起步过程中硬件模块的加载 日期:2014-05-16 浏览次数:20354 次 [zz]Linux启动过程中硬件模块的加载 文章来源不详. ...
最新文章
- windows7下解决caffe check failed registry.count(type) == 1(0 vs. 1) unknown layer type问题
- Java连接Oracle数据库开发银行管理系统【一、需求篇】
- 三分钟破解无线网——无线网络安全攻防
- 通过Socket实现文件上传/上传文件
- Lexical environments: ECMAScript implementation
- UAC2.0 Requests处理
- c语言实现猜数字游戏
- 2020年易语言调用大漠插件来制作游戏脚本教程
- 计算机主机的组成部分,计算机主机的组成是有哪些
- WannaCry感染文件恢复方法_企业再也不用愁了!
- 初级会计资料-常用会计公式(三)
- 路由器修改wifi密码
- 电信smgp3.0短信发送问题
- 手把手教你用Unet实现语义分割(Pytorch版)
- 现代控制原理专业词汇中英文对照
- 什么是5G advanced
- 如何通adb命令删除安卓设备上指定的文件和apk
- Android7以上的手机通过fiddler抓包
- 安装Python 后安装Python-dev
- 为什么matlab的程序都加了分号,还会在命令行窗口不断输出