虛擬攝像頭驅動程式框架分析
攝像頭驅動程式可以歸類為字元裝置驅動程,所以攝像頭的驅動程式可以根據字元裝置驅動程式的框架來完成,由於攝像頭驅動程式比較複雜,所以採用分層的框架來實現。
一、字元驅動程式的實現步驟:
1、申請device結構體
2、設定device結構體
3、註冊device結構體
二、由此我們可以根據上面的步驟來實現虛擬攝像頭的驅動程:
1、通過video_device_alloc函式分配乙個video_device結構體
2、設定video_device結構體,後面詳細介紹這個結構體關鍵的內容
3、通知video_register_device函式註冊video_device結構體
我們來分析下video_device_alloc函式:
struct video_device
*video_device_alloc
(void)
這個函式比較簡單,其實就是分配乙個結構。kzalloc很kmalloc的區別就是kzalloc分配機構體後並且把它初始化為0。
再看一看video_device結構體的主要內容如下:
struct video_device ;
其實比較重要的就是release、fops、ioctl_ops比較重要,別的我們都可以不管。release對於我們自己寫的release函式,fops對於我們自己寫的v4l2_file_operations,ioctl_ops對於我們自己寫的v4l2_ioctl_ops。
實現v4l2_file_operations和v4l2_ioctl_ops非常重要。
三、分析v4l2_file_operations和v4l2_ioctl_ops結構體
v4l2_file_operations結構體包含的內容如下:
struct v4l2_file_operations ;
然後這裡面需要我們自己去填充的內容如下:
owner、open、release、mmap、ioctl、poll 可以參考vivi.c裡面的函式去實現
v4l2_ioctl_ops該結構體裡面的函式用來設定攝像頭的屬性和獲取攝像頭的資料等,用於應用層掉用,結構體的內容如下:
struct v4l2_ioctl_ops
;static
const
struct v4l2_ioctl_ops myvivi_ioctl_ops =;
上面的函式可以參考vivi.c裡面的函式去實現。
在這裡虛擬攝像頭的驅動程式的框架大致就是這樣,後續再繼續對結構體裡面的內容進行詳細分析。
第1 5節 攝像頭驅動 USB攝像頭驅動框架
1.寫乙個usb攝像頭驅動程式 當我們把usb裝置接到電腦或板子上去時,如果這個裝置能夠被usb driver所支援 id table吻合 probe函式就會被呼叫,在probe函式裡面就可以做我們想做的事了 對於攝像頭驅動程式來說,是1.分配乙個video device結構體 2.設定這個結構體 ...
linux攝像頭虛擬驅動vivi徹底分析3
1 依次裝載驅動程式,出現錯誤如下 2 用dmesg命令檢視詳細輸出 某些函式沒有識別 可見我們的vivi.ko還依賴於其他驅動程式,上一節直接使用這些命令沒有問題,是因為在做虛擬攝像頭vivi之前。我們先接上usb攝像頭,ubuntu裡面自動給我們安裝了其他驅動程式。所以在使用vivi的時候,沒有...
DirectShow驅動攝像頭
對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...