7.camera驱动06-自己实现v4l2驱动-准备

平台:Ubuntu-16.04

$uname -a

Linux vbox-pc 4.15.0-112-generic #113~16.04.1-Ubuntu SMP Fri Jul 10 04:37:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

可以看到内核版本是4.15.0,

去www.kernel.org找同版本的内核,如果没有请找最相近的内核代码

下载完后,解压,把linux-4.15\drivers\media\platform\vivid复制到ubuntu下。

修改vivid下的Makefile,改成如下:

KERN_DIR = /usr/src/linux-headers-4.15.0-112-generic

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

clean:
	make -C $(KERN_DIR) M=`pwd` modules clean
	rm -rf modules.order
# SPDX-License-Identifier: GPL-2.0
vivid-objs := vivid-core.o vivid-ctrls.o vivid-vid-common.o vivid-vbi-gen.o \
		vivid-vid-cap.o vivid-vid-out.o vivid-kthread-cap.o vivid-kthread-out.o \
		vivid-radio-rx.o vivid-radio-tx.o vivid-radio-common.o \
		vivid-rds-gen.o vivid-sdr-cap.o vivid-vbi-cap.o vivid-vbi-out.o \
		vivid-osd.o
ifeq ($(CONFIG_VIDEO_VIVID_CEC),y)
vivid-objs += vivid-cec.o
endif

obj-m += vivid.o

注意:KERN_DIR改成/usr/src/目录下与uname -a相同的内核版本。

然后编译

$make

不出意外会报错:

make -C /usr/src/linux-headers-4.15.0-112-generic M=`pwd` modules
make[1]: Entering directory '/usr/src/linux-headers-4.15.0-112-generic'
  CC [M]  /home/vbox/workspace/test/vivid/vivid-ctrls.o
/home/vbox/workspace/test/vivid/vivid-ctrls.c: In function ‘vivid_vid_cap_s_ctrl’:
/home/vbox/workspace/test/vivid/vivid-ctrls.c:346:3: error: ‘V4L2_COLORSPACE_ADOBERGB’ undeclared (first use in this function)
   V4L2_COLORSPACE_ADOBERGB,
   ^
/home/vbox/workspace/test/vivid/vivid-ctrls.c:346:3: note: each undeclared identifier is reported only once for each function it appears in
scripts/Makefile.build:330: recipe for target '/home/vbox/workspace/test/vivid/vivid-ctrls.o' failed
make[2]: *** [/home/vbox/workspace/test/vivid/vivid-ctrls.o] Error 1
Makefile:1582: recipe for target '_module_/home/vbox/workspace/test/vivid' failed
make[1]: *** [_module_/home/vbox/workspace/test/vivid] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-112-generic'
Makefile:4: recipe for target 'all' failed
make: *** [all] Error 2

报V4L2_COLORSPACE_ADOBERGB未定义,那就简单粗暴地把用到V4L2_COLORSPACE_ADOBERGB的地方注销掉,就两个地方。

$sudo apt-get install xawtv

$sudo modprobe vivid

$sudo rmmod vivid

$sudo insmod vivid.ko <== vivid.ko是刚编译出来的ko

为什么modprobe了驱动,又rmmod呢?

因为modprobe vivid会自动安装vivid.ko所依赖的其他ko,比如videobuf2-core.ko、v4l2-common.ko、videobuf-core.ko等等,较多,不想一个一个insmod,那就modprobe吧,直接insmod vivid.ko会报错。但为什么又rmmod,是因为modprobe默认insmod /lib/modules/目录下的vivid.ko,不是刚编译出来的,所以rmmod掉,然后insmod 刚编译出来的vivid.ko。当然,把编译出来的vivd.ko替换掉/lib/modules/下面的也可以。

开始采集图像。

$xawtv -c /dev/video0

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值