最近想要学习V4L2,然后发现韦东山有视频教程,不过是很多年前的了,内核版本很古老,查了一下,vivi.c
不见了,变成了vivid目录
,我想重现这个ubuntu的 vivi实验,开搞。。
首先uname -a
,查看一下虚拟机的ubuntu版本
Linux 100ask 5.4.0-136-generic #153~18.04.1-Ubuntu SMP Wed Nov 30 15:47:57 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
这个ubuntu是百问网提供的,可以看到版本为5.4.0-136-generic
。
然后去内核官网找到接近的版本,因为速度太慢了,所以我找了阿里云的镜像网linux-kernel_开源镜像站-阿里云 。
我找到一个比较接近的linux-5.4.1.tar.gz 162.4 MB 2019-11-29 17:17
把内核下载到电脑,解压后,提取出drivers/media/platform/vivid
,将其拷贝到ubuntu。
然后修改里面的Makefile,修改如下
KERN_DIR = /usr/src/linux-headers-5.4.0-136-generic
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
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 vivid-cec.o
obj-m += vivid.o
不能按教程的来,因为教程的内核版本,vivi只有一个文件,没有其他依赖,新版本的分离为很多文件,需要将所有文件编译,然后合成为vivid.ko
。
因为要用到ubuntu路径下的内核目录,还有用到这个xawtv
app,因此需要安装
sudo apt install libelf-dev xawtv
Reading package lists... Done
Building dependency tree
Reading state information... Done
libelf-dev is already the newest version (0.170-0.4ubuntu0.1).
The following packages were automatically installed and are no longer required:
libllvm9 linux-headers-4.18.0-15 linux-headers-4.18.0-15-generic
linux-image-4.18.0-15-generic linux-modules-4.18.0-15-generic
linux-modules-extra-4.18.0-15-generic
这里我踩了一个坑,我发现直接make
会报错,查了一下错误,是架构不正确,因为这个ubuntu编译环境本来用于imx6ull,ARCH=arm
改一下架构,执行make ARCH=x86
,此时发现顺利编译通过,然后按照韦东山的教程安装自己的vivid.ko
sudo modprobe vivid #安装自带vivid及依赖
sudo rmmod vivid #卸载自带的vivid
sudo insmod ./vivid.ko #安装自己编译的vivid.ko
执行
xawtv /dev/video0
最终呈现的效果!!!!完成!!