Linux技术芯
用技术改变生活
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
camera驱动分析
1. 内核的 camera 控制器驱动 和 sensor 驱动是基于 v4l2 驱动架构编写的,应用程序可以使用 cimutils 进行测试 CIM 控制器驱动,基于 V4L2 架构,并采用 videobuf2。便于上层开发 drivers/media/platform/soc_camera/ingenic/x2000/ingenic_camera.c static int __in...原创 2018-11-07 07:56:56 · 1628 阅读 · 1 评论 -
从cimutils到内核-(5)一帧数据采集完成控制器响应中断处理函数
(1) static irqreturn_t jz_camera_irq_handler(int irq, void *data) { if(status & CIM_STATE_DMA_EOF) { //硬件发送这个EOF给控制器响应中断 /* clear dma interrupt status */ temp = readl(pcdev->base + CI...原创 2018-11-08 06:59:52 · 360 阅读 · 0 评论 -
从cimutils到内核-(4)VIDIOC_STREAMON(开始采集数据)
应用层: type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == xioctl(fd, VIDIOC_STREAMON, &type)) errno_exit("VIDIOC_STREAMON"); break; ---------------------------------------------...原创 2018-11-08 06:58:13 · 936 阅读 · 0 评论 -
从cimutils到内核-(3)VIDIOC_QBUF(buffer进入视频缓存队列)
应用层: case IO_METHOD_MMAP: for (i=0; i<n_buffers; ++i) { //for循环,buffer[0] buffer[1]分别加入视频缓存队列 ,传递结构体struct v4l2_buffer内容到内核 struct v4l2_buffer buf; CLEAR(buf); buf.type = V4L2_BUF_TYPE_VIDE...原创 2018-11-08 06:58:00 · 1635 阅读 · 0 评论 -
从cimutils到内核-(2)VIDIOC_QUERYBUF(查询buffer)
应用层: 循环两次去获取内核申请的两个buffer的起始地址,通过这两个地址用mmap映射,这样用户层可以通过操作这两个地址,访问内存空间的buffer for (n_buffers=0; n_buffers<req.count; ++n_buffers) { //循环两次,询问两次buffer struct v4l2_buffer buf; CLEAR(buf); buf....原创 2018-11-07 08:03:11 · 850 阅读 · 0 评论 -
从cimutils到内核-(1)VIDIOC_REQBUFS(申请buffer)
应用层: 全局变量 struct buffer { void * start; size_t length; }; struct buffer * buffers = NULL; struct v4l2_requestbuffers req; req.count = 2; //申请两个buffer req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE...原创 2018-11-07 08:02:28 · 851 阅读 · 0 评论 -
v4l2框架维护的数据结构
原创 2018-11-07 08:01:27 · 251 阅读 · 0 评论 -
v4l2驱动框架分析-2
原创 2018-11-07 08:00:52 · 362 阅读 · 0 评论 -
v4l2驱动框架分析-1
需要思考的问题: (1) cimutils应用程序维护了哪些结构体,v4l2驱动框架维护了哪些结构体 (2)/dev/video0 这个节点怎么创建的 (3)应用层open 设备节点/dev/video0 的时候,内核中的调用关系和具体干的工作 (4)应用层ioctl 操作后,内核中的调用关系流程 (5) VIDIOC_QBUF / VIDIOC_STREAMON / VIDIOC_DQ...原创 2018-11-07 08:00:17 · 2057 阅读 · 0 评论 -
cimutils-分析
Video4Linux2是Linux内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供了统一的接口。 (1) 应用层我们自己写的结构体,我们自己写的,与核心层的结构体交互 struct camera_info struct camera_ctl struct fb_info struct camera_info{ __s32 fd_cim;...原创 2018-11-07 07:59:42 · 640 阅读 · 0 评论 -
camera--app
(1) 设定属性及采集方式 打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在Linux编程中,一般使用ioctl函数来对设备的I/O通道进行管理: int ioctl (int __fd, unsigned long int __request, .../*args*/) ; 在进行V4L2开发中,常用的命令标志符如下(some are optional): ...原创 2018-11-07 07:59:07 · 374 阅读 · 0 评论 -
v4l2 编程接口—ioctl
1. 在应用程序获取视频数据的流程中,都是通过 ioctl 命令与驱动程序进行交互,常见的 ioctl 命令有: VIDIOC_QUERYCAP /* 获取设备支持的操作 */ VIDIOC_G_FMT /* 获取设置支持的视频格式 */ VIDIOC_S_FMT /* 设置捕获视频的格式 */ VIDIOC_REQBUFS /* 向驱动提出申请内存的请求 */ VIDIOC_Q...原创 2018-11-07 07:58:03 · 575 阅读 · 0 评论 -
从cimutils到内核-(6)VIDIOC_DQBUF(从视频缓存队列中取出有数据的buffer)
应用层: case IO_METHOD_MMAP: CLEAR(buf); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) { switch (errno) { case EAGAIN: ...原创 2018-11-08 07:00:57 · 2073 阅读 · 0 评论