2013年2月22日
摘要: NO.3 V4L2的API和数据结构V4L2是V4L的升级版本,为linux下视频设备程序提供了一套接口规范。包括一套数据结构和底层V4L2驱动接口。1、常用的结构体在内核目录include/linux/videodev2.h中定义 struct v4l2_requestbuffers //申请帧缓冲,对应命令VIDIOC_REQBUFS struct v4l2_capability //视频设备的功能,对应命令VIDIOC_QUERYCAP struct v4l2_input//视频输入信息,对应命令VIDIOC_ENUMINPUT struct v4l2_standard //视频的制式, 阅读全文
posted @ 2013-02-22 09:25 孟浩依然 阅读(8476) 评论(0) 推荐(2) 编辑
  2013年2月21日
摘要: NO.2 Camera解码器、控制器1.根据camera控制器的描述,图像传输有两个DMA通道,我们用的是C通道,所以先将DMA内存初始化,因为在V4L2操作中有把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址的操作所以DMA在用之前要初始化,包括实际物理地址的计算init_image_buffer(camera_dev);// 初始化static int __inline__ init_image_buffer(struct s5pc100_camera_device *cam){unsigned long size;unsigned int order;cam->fram 阅读全文
posted @ 2013-02-21 09:53 孟浩依然 阅读(6826) 评论(3) 推荐(2) 编辑
  2012年12月11日
摘要: 本系列准备分为3-4篇来讲,因为说的太多会比较乱v4l2视频驱动主要涉及几个知识点:摄像头方面的知识(摄像头厂家提供的芯片手册可以查看)要了解选用的摄像头的特性,包括访问控制方法、各种参数的配置方法、信号输出类型等。Camera解码器、控制器(主控芯片的芯片手册里面有摄像头相关的寄存器设置,比如2410里,里面主要是设置相关控制功能使能,芯片内部自己的架构)如果摄像头是模拟量输出的,要熟悉解码器的配置。最后数字视频信号进入camera控制器后,还要熟悉camera控制器的操作。V4L2的API和数据结构控制(主要是用户空间需要的一些v4l2的操作,然后针对这些操作必须在底层实现相应的驱动 阅读全文
posted @ 2012-12-11 15:27 孟浩依然 阅读(17799) 评论(0) 推荐(1) 编辑
  2012年12月5日
摘要: 写设备驱动:四部曲:构建i2c_driver注册i2c_driver构建i2c_client( 第一种方法:注册字符设备驱动、第二种方法:通过板文件的i2c_board_info填充,然后注册)注销i2c_driver具体如下:●构建i2c_driverstatic struct i2c_driver pca953x_driver = { .driver = { .name= "pca953x", //名称 }, ... 阅读全文
posted @ 2012-12-05 19:09 孟浩依然 阅读(9040) 评论(2) 推荐(1) 编辑
摘要: 下面具体分析如何写第一部分:主控芯片的i2c驱动分为2个步骤:写总线驱动:选了个主控芯片,比如:S3C8900(自己瞎编的芯片)在driver/i2c/busses/i2c-s3c2410.c中没有找到这个芯片的I2C支持(总线驱动支持)。。。(倒霉了,没有选好芯片,也可能是最新型号的,linux内核没跟上)在此之前先分析i2c-s3c2410.c中完成的工作(总线驱动):设计对应于i2c_adapter_xxx_init()模板的s3c8900的模块加载函数和对应于i2c_adapter_xxx_exit()函数模板的模块卸载函数。设计对应于i2c_adapter_xxx_xfer()模板的 阅读全文
posted @ 2012-12-05 19:06 孟浩依然 阅读(3475) 评论(0) 推荐(0) 编辑
  2012年12月4日
摘要: 这部分准备分几个部分进行分析总结因为I2C的通信肯定至少要有2个芯片完成,所以它的驱动是由2大部分组成:主芯片的i2c的驱动从芯片的i2c的驱动注:万一选的都不支持咋办???(惨了,只能2个芯片的驱动都得实现了,不过过程差不多)(一).主芯片的I2C的驱动:(具体如何实现在后面在具体讲解)首先要查看linux内核是否支持主芯片中i2c驱动器,如果支持就配置一下就ok了,否则要编写主控芯片的i2c驱动器编写方法:第一.要有i2c总线驱动(首先要查查内核i2c文件是否支持这种总线驱动,一般都有支持,如果没有只好自己倒霉自己写了)第二.i2c设备驱动(主控芯片的地址等等信息)这个过程都是差不多的,以 阅读全文
posted @ 2012-12-04 19:41 孟浩依然 阅读(8580) 评论(0) 推荐(1) 编辑
  2012年12月3日
摘要: SPI驱动编写简而言之,SPI驱动的编写分为:1.spi_device就构建并注册在板文件中添加spi_board_info,并在板文件的init函数中调用spi_register_board_info(s3c_spi_devs,ARRAY_SIZE(s3c_spi_devs));spi_register_board_info(s3c_spi_devs,ARRAY_SIZE(s3c_spi_devs));//注册spi_board_info。这个代码会把spi_board_info注册到链表board_list上。spi_device封装了一个spi_master结构体,事实上spi_mast 阅读全文
posted @ 2012-12-03 22:15 孟浩依然 阅读(12776) 评论(0) 推荐(0) 编辑
摘要: 下面有两个大的模块:一个是SPI总线驱动的分析 (研究了具体实现的过程)另一个是SPI总线驱动的编写(不用研究具体的实现过程)SPI总线驱动分析1SPI概述 SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。 SPI的通信原理很简单,它以. 阅读全文
posted @ 2012-12-03 22:13 孟浩依然 阅读(44913) 评论(5) 推荐(6) 编辑
  2012年7月11日
摘要: 并发指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源的访问则很容易导致竞态linux内核中主要竞态1.多对称处理器的多个CPU 2.单CPU内进程与抢占它的进程 3.中断(硬中断、软中断、Tasklet、下半部)与进程之间访问共享内存资源的代码区称为“临界区”,临界区需要被以某种互斥机制加以保护,中断屏蔽、原子操作、自旋锁和信号量等是linux设备驱动中可采用的互斥途径。这几个互斥的介绍:1.中断屏蔽,这个主要用于单CPU,中断屏蔽将使得中断和进程之间的并发不再发生。使用方法:local_irq_disable();//屏蔽中断......临界区...local_irq_enab 阅读全文
posted @ 2012-07-11 22:28 孟浩依然 阅读(2895) 评论(0) 推荐(0) 编辑
摘要: 驱动分为:字符设备驱动,块设备驱动和网络设备驱动。字符设备驱动是操作字节流,不允许随机访问。块设备允许随机访问。字符设备比较基础,下面给出编写字符驱动的方法。#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>MODULE_LICENSE ("GPL");static int __init hello_2_init (void){ printk (KERN_INFO "Hello world\n"); return 0;}st 阅读全文
posted @ 2012-07-11 22:10 孟浩依然 阅读(910) 评论(0) 推荐(1) 编辑