android设备驱动之 v4l2,Android设备驱动之——V4L2
3.v4l2_subdev
每个子设备驱动程序必须有一个v4l2_subdev结构。这个结构可以独立简单的设备或者如果需要存储更多的状态信息它可能被嵌入在一个更大的结构。由于子设备可以做很多不同的东西,你不想结束一个巨大的OPS结构其中只有少数的OPS通常执行,函数指针进行排序按类别,每个类别都有其自己的OPS结构。顶层OPS结构包含的类别OPS结构,这可能是NULL如果在subdev驱动程序不支持任何从该类别指针。
struct v4l2_subdev {
#if defined(CONFIG_MEDIA_CONTROLLER)
struct media_entity entity;
#endif
struct list_head list;
struct module *owner;
u32 flags;
struct v4l2_device *v4l2_dev;
const struct v4l2_subdev_ops *ops;
/* 从驱动程序中不要调用这些内部操作函数! */
const struct v4l2_subdev_internal_ops *internal_ops;
/*这个subdev控制处理程序。可能是NULL。 */
struct v4l2_ctrl_handler *ctrl_handler;
/* 名字必须是唯一 */
char name[V4L2_SUBDEV_NAME_SIZE];
/* 可用于到类似subdevs组,值是驱动程序特定的 */
u32 grp_id;
/* 私有数据的指针 */
void *dev_priv;
void *host_priv;
/* subdev 设备节点*/
struct video_device devnode;
/* 事件的数量在打开的时候被分配 */
unsigned int nevents;
};
4.v4l2_buffer
struct v4l2_buffer {
__u32 index;
enum v4l2_buf_type type;
__u32 byteSUSEd;
__u32 flags;
enum v4l2_field field;
struct timeval timestamp;
struct v4l2_timecode timecode;
__u32 sequence;
/* memory location */
enum v4l2_memory memory;
union {
__u32 offset;
unsigned long userptr;
} m;
__u32 length;
__u32 input;
__u32 reserved;
};
V4L2核心API提供了一套标准方法的用于处理视频缓冲器(称为“videobuf”)。这些方法允许驱动程序以一致的方式来实现read(),mmap()和overlay()。目前使用的设备上的视频缓冲器,支持scatter/gather方法(videobuf-dma-SG),线性存取的DMA的(videobuf-DMA-contig),vmalloc分配的缓冲区,主要用于在USB驱动程序(DMA缓冲区的方法videobuf-vmalloc)。
videobuf层的功能为一种V4L2驱动和用户空间之间的粘合层。它可以处理存储视频帧缓冲区的分配和管理。有一组可用于执行许多标准的POSIX I / O系统调用的功能,包括read(),poll()的,happily,mmap()。另一套功能可以用来实现大部分的V4L2的ioctl()调用相关的流式I/ O的,包括缓冲区分配,排队和dequeueing,流控制。驱动作者使用videobuf规定了一些设计决定,但回收期在驱动器和一个V4L2的用户空间API的贯彻实施在减少代码的形式。
关于videobuf的层的更多信息,请参阅Documentation/video4linux/videobuf
android设备驱动之 v4l2,Android设备驱动之——V4L2相关推荐
- 初入android驱动开发之字符设备(一)
大学毕业,初入公司,招进去的是android驱动开发工程师的岗位,那时候刚进去,首先学到的就是如何搭建kernel.android的编译环境,然后就是了解如何刷设备以及一些最基本的工具.如adb.fa ...
- softAP配网:用Android手机为linux无屏设备输入wifi密码
softAP配网,即利用设备的无线芯片,将设备进入到softAP模式,开启一个无线局域网,手机(或其它移动设备)通过连入设备开启的无线局域网后,向设备发送路由器的ssid及password等信息,让设 ...
- 解决Android Device Chooser 找不到设备问题
第一种情况: 已经启动了官方的模拟器也进入了Android手机界面,可是在Android Device Chooser 看不到设备,怎么办? 例如以下图所看到的,使用Reset adb 或者在adb所 ...
- android 电容屏(二):驱动调试之基本概念篇
关键词:android 电容屏 tp 工作队列 中断 多点触摸协议 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 平台:S5PV310(sams ...
- android弹出选择usb,android 解决:默认情况下用于该USB设备 自动获取USB操作权限...
很多android 的应用在使用USB设备时,总会遇到一个很烦人的问题. 即每次都会弹出对话框: 每次插入USB设备,都会弹出.每次选上默认情况下使用该USB设备.但总还是会弹出.用户体验很差. 似乎 ...
- android dts配置_AndroidLinux关于DTS设备树源码的介绍
Android&Linux关于DTS设备树源码的介绍 Device tree是一种简单的节点和属性的树形结构.属性是键值对,而节点可能包括属性和子节点.画一颗电路板上CPU.总线.设备组成的树 ...
- Android深度探索(卷1)HAL与驱动开发第六章总结
操作系统是通过各种驱动程序赖家与硬件设备的,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式.设备驱动程序是操作系统最基本的组成部分之一,在Linux内核源程序中也 ...
- Android 系统(4)---Android HAL层与Linux Kernel层驱动开发简介
Android HAL层与Linux Kernel层驱动开发简介 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. HAL:Hardw ...
- Android HAL层与Linux Kernel层驱动开发简介
Android HAL层与Linux Kernel层驱动开发简介 阅读数:5070 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. ...
- Android架构实例分析之编写hello驱动的HAL层代码
Android架构实例分析之编写hello驱动的HAL层代码 摘要: HAL层中文名称又叫硬件抽象层,可以理解我Linux驱动的应用层.本文实现了一个简单的hello HAL的代码,衔接hello驱动 ...
最新文章
- Mean Shift+聚类
- python采集_Python采集实例2
- mysql专区_MySQL-技术专区-详解索引原理
- 经典C语言程序100例之十一
- TensorFlow2-高层API接口Keras
- 韩顺平php教程笔记,PHP笔记,韩顺平php笔记_PHP教程
- python为什么没有指针_Python 没有指针,如何解算法题?
- qt布局调用自定义函数_QT 自定义函数 自定义信号和槽
- Docker入门之安装与卸载
- 用计算机计算的结构图怎么画,冯·诺依曼计算机结构图解析
- Windows程序设计-位图和位块传输
- word2013、word2016、word2019标题序号变黑色竖线解决方法
- 人力资源管理-输入、输出、工具和技术
- Xcelsius调用CR报表,总是弹出输入参数页面
- 概率论与数理统计知识框架梳理
- 【FPGA】四、按键消抖
- Centos7升级OpenSSL 1.0.2k-fips
- ORA-29491: invalid table for chunking 错误记录
- Programming Rust Fast, Safe Systems Development(译) 引用(第五章 完)
- UG\NX二次开发 菜鸟欢乐多
热门文章
- java读取证书公钥
- 微软2020校园招聘正式启动
- (PMP)第13章-----项目相关方管理
- 正则表达式\S\s的意思
- 水库防汛泄洪抢险应急广播系统解决方案
- android 音视频播放 SDK,几句代码即可实现音视频播放功能~
- ROS机器人技术课程大作业,机器人基础实例
- 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment
- 服务器查看光模块信息的命令,华为9306交换机查看查看光模块信息和收发光信息...
- 皮尔逊相关分析的MATLAB实现,corr(),corrcoef()函数使用