V4L2驅動框架

2021-06-18 06:48:58 字數 1800 閱讀 3419

v4l2驅動框架

主裝置號: 81

次裝置號:

0-63

64-67

192-223

224-255

/dev/videox    

應用層————————————

char驅動

————————————

v4l2

————————————

具體的驅動

————————————

硬體應用層的操作都需要有底層v4l2驅動的支援。核心中有一些非常完善的例子。比如:linux-2.6.26核心目錄drivers/media/video/vivi.c中的驅動**例項。

1、v4l2驅動註冊、登出函式

ret = class_register(&video_class);

if (ret < 0)

return 0;

}static void __exit videodev_exit(void)

module_init(videodev_init)

module_exit(videodev_exit)

2、函式實現

2.1video核心層(drivers/media/video/videodev.c)提供了註冊函式供具體的v4l2驅動呼叫:

int video_register_device(struct video_device *vfd, int type, int nr)

—video_device: 要構建的核心資料結構

—type: 表示裝置型別,此裝置號的基位址受此變數的影響

—nr: 如果end-base>nr>0 :次裝置號=base(基準值,受type影響)+nr;否則:系統自動分配合適的次裝置號

函式內部呼叫

static int __video_register_device(struct video_device *vdev, int type, int nr, int warn_if_nr_in_use)

具體驅動只需要構建video_device結構,然後呼叫註冊函式既可。

2.2video核心層(drivers/media/video/videodev.c)提供了登出函式

void video_unregister_device(struct video_device *vdev)

核心定義裝置陣列,其中video_num_devices 為 256 是最大裝置數

static struct video_device *video_device[video_num_devices];

2.3v4l2提供了統一的應用層介面

static const struct file_operations v4l2_fops = ;

v4l2_read定義如下

static ssize_t v4l2_read(struct file *filp, char __user *buf, size_t sz, loff_t *off)

函式內部呼叫的    vdev->fops->read  由具體的v4l2驅動實現

驅動開發

定義最重要的資料結構體struct video_device,

其中,重要的是

const struct v4l2_file_operations *fops;    //幀緩衝操作

編寫幀緩衝驅動的主要工作就是編寫fops各個成員函式

編寫具體驅動方法步驟:

1、構建具體驅動的struct video_device;

3、構建具體驅動的struct fops,並定義相關的操作函式;

4、定義具體驅動的***_probe。

V4L2框架分析

uvc probe uvc driver.c硬體相關層,定會分配設定向核心層註冊一結構體 v4l2 device register uvc register chains uvc register terms uvc register video struct video device vdev v...

V4L2程式設計框架

v4l2較v4l有較大的改動,並已成為2.6的標準介面,函蓋video dvb fm 多數驅動都在向v4l2遷移。更好地了解v4l2先從應 來實現。用非阻塞模式開啟攝像頭裝置int camerafd camerafd open dev video0 o rdwr o nonblock,0 如果用阻塞...

V4L2程式設計框架( )

用非阻塞模式開啟攝像頭裝置 int camerafd camerafd open dev video0 o rdwr o nonblock,0 如果用阻塞模式開啟攝像頭裝置,上述 變為 camerafd open dev video0 o rdwr,0 int ioctl int fd,unsign...