攝像頭驅動1——vivid/#more
v4l2可以支援多種裝置,它可以有以下幾種介面:
radio inte***ce(收音機介面):處理從am或fm高頻頭裝置接收來的音訊流;
這裡目的先載入vivid驅動,然後執行應用程式呼叫vivid驅動,初步體驗效果。
先在ubuntu16.04上輸入uname -a
,可以得到當前ubuntu核心版本號:
linux ubuntu 4.4.0-116-generic #140-ubuntu smp mon feb 12 21:23:04 utc 2018 x86_64 x86_64 x86_64 gnu/linux
修改media/platform/vivid/
下的makefile
:
kern_dir = /usr/src/linux-headers-4.4.0-116-generic
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-tpg.o vivid-tpg-colors.o
all:
make -c $(kern_dir) m=pwd
modules
clean:
make -c $(kern_dir) m=pwd
modules clean
rm -rf modules.order
obj-$(config_video_vivid) += vivid.o
這裡先使用insmod: error: could not insert module vivid.ko: unknown symbol in module
原因是模組中的一些依賴函式的模組,沒有載入,通過dmesg
命令,可以看到很多函式:
[ 488.786285] vivid: unknown symbol vb2_queue_init (err 0)
[ 488.786295] vivid: unknown symbol v4l2_ctrl_poll (err 0)
[ 488.786304] vivid: unknown symbol v4l2_enum_dv_timings_cap (err 0)
[ 488.786314] vivid: unknown symbol video_ioctl2 (err 0)
[ 488.786364] vivid: unknown symbol v4l2_get_timestamp (err 0)
[ 488.786389] vivid: unknown symbol v4l2_device_put (err 0)
[ 488.786418] vivid: unknown symbol vb2_ioctl_streamoff (err 0)需要先載入這些函式所在的模組才行。
這裡有兩個方法:
一是找到函式對應的檔案,修改
makefile
,編譯出來,先載入。二是找到函式對應的檔案,其實模組都已經編譯好了,路徑在
/lib/modules/4.4.0-116-generic/kernel/drivers/media/v4l2-core/
裡面,直接載入即可。這兩種方式都需要慢慢找對應的檔案,比較麻煩,直接:
sudo modprobe vivid //安裝自帶vivid及依賴
sudo rmmod vivid //解除安裝自帶的vivid
sudo insmod ./vivid.ko //安裝自己編譯的vivid.ko
modprobr
載入vivid,會將其依賴一併載入,然後再解除安裝vivid,最後載入上我們編譯的vivid.ko
。
重新編譯驅動,載入新驅動:
sudo modprobe vivid
sudo rmmod vivid
sudo insmod my_vivid.ko
實測還差兩個驅動依賴:
sudo insmod /lib/modules/4.4.0-116-generic/kernel/drivers/media/v4l2-core/videobuf-core.ko
sudo insmod /lib/modules/4.4.0-116-generic/kernel/drivers/media/v4l2-core/videobuf-vmalloc.ko
執行xawtv
: DirectShow驅動攝像頭
對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...
第1 5節 攝像頭驅動 USB攝像頭驅動框架
1.寫乙個usb攝像頭驅動程式 當我們把usb裝置接到電腦或板子上去時,如果這個裝置能夠被usb driver所支援 id table吻合 probe函式就會被呼叫,在probe函式裡面就可以做我們想做的事了 對於攝像頭驅動程式來說,是1.分配乙個video device結構體 2.設定這個結構體 ...
使用DirectShow驅動攝像頭
對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...