随笔分类 - linux
摘要:1、LCD控制器主要有两方面的功能: 1)从framebuffer中取出某个像素的数据; 2)配合其他信号,一起将这个数据发送给LCD 不管是2440,还是其他型号的ARM芯片。它们的LCD控制器的功能都是一样的,只不过存储器的操作稍有区别。 LCDDMA:会从内存中把数据取出来,发送给LCD。 D
阅读全文
摘要:想象一下,屏幕的后面有一个电子枪,电子枪位于某个像素的背后,然后向这个像素发射红绿蓝三原色,从而就可以组成任意一种颜色。简单的说,电子枪在像素的背后一边移动,一边向像素发射红绿蓝。 如果要编写出LCD的驱动程序,首先要搞清楚下面的几个问题: 1)电子枪如何移动 2)颜色如何确定 3)电子枪如何得知应
阅读全文
摘要:应该通过什么方法来获得多点触摸屏的数据呢? 控制IC与cpu一般来说是通过I2C或者SPI接口来连接。cpu如何得知控制IC有了数据呢?这个地方是通过中断来实现的。当发生中断以后,驱动程序就可以通过I2C或SPI总线来读取控制IC,获取电容屏的数据。因此这个驱动程序应该是I2C驱动程序与输入子系统的
阅读全文
摘要:上面博客中讲解了电阻屏触摸屏的驱动程序,它是一个单点触摸的设备。现在大多数设备都支持了多点触摸,多点触摸的好处: 1)利用两个手指可以放大或缩小图片; 2)在一个触摸屏上,可以同时供多人使用; 在上述这两个简单的例子中,单点触摸就无法实现。必须使用多点触摸,顾名思义多点触摸就是在同一时间内,屏幕上可
阅读全文
摘要:电阻触摸屏是一个单点触摸的设备,所谓单点触摸就是在同一时间内在屏幕里只能有一个触点。 1、触摸屏驱动程序框架,这个驱动程序还不能用 2、硬件相关部分的讲解 触摸屏实际上就是巧妙的使用了欧姆定律 触摸屏是什么东西呢?拿到JZ2440会看到一个屏幕,实际上它不仅仅有一个LCD,在LCD上面还覆盖着两层很
阅读全文
摘要:注意:该输入子系统框架是基于linux3.4内核之前的版本来进行说明的,现在的linux内核版本4.4这一部分变动很大。 输入子系统框架: drivers/input/input.c list_add_tail(&handler->node, &input_handler_list); //放入链表
阅读全文
摘要:在总线设备驱动模型中,平台设备是写在c文件中。使用设备树时,平台设备事先并不存在,在dts文件中构造节点,节点里面含有资源。dts文件被编译成dtb文件,然后传递给内核。内核会解析dtb文件,得到一个个device_node,每个节点对应一个device_node结构体,每个device_node结
阅读全文
摘要:以led驱动程序为例,介绍字符设备驱动程序的传统写法。 驱动程序: 程序代码来源于韦老大视频代码 2、测试程序
阅读全文
摘要:以led驱动为例,讲解如何写一个字符设备驱动程序。 1)看原理图 a.确定引脚 b.看芯片手册,确定如何操作引脚 2)写驱动程序 3)写测试程序 最简单的字符设备驱动程序的框架: App: open read write ioctl 驱动: drv_open drv_read drv_write d
阅读全文
摘要:总线设备驱动框架结构如下: device_add: 1)会把device代表的结构体放入总线的bus_dev链表中; 2)从bus_drv链表中取出每个drv,用总线的match函数判断drv能否支持该dev; 3)如果能够支持,则调用drv中的probe函数; driver_register: 1
阅读全文
摘要:1.1 总线设备驱动模型的引入 原文:https://blog.csdn.net/21cnbao/article/details/73864762 1.1.1 陷入绝境 下面我们设想一个名字叫做ABC的简单网卡,它需要接在一个CPU(假设CPUx)的内存总线上,需要地址、数据和控制总线(以及中断pi
阅读全文
摘要:usb摄像头驱动程序,里面涉及硬件的操作。比如说,想设置亮度的时候,需要把亮度的参数发给硬件。去得到真正视频数据的时候,需要访问硬件得到数据。usb摄像头驱动程序框架与虚拟摄像头驱动程序的框架是一样的。 1、构造一个usb_driver 2、设置 probe: 2.1 分配video_device
阅读全文
摘要:继续分析数据的获取过程: 1、请求分配的缓冲区: ioctl(4,VIDIOC_REQBUFS) vidioc_reqbufs 2、查询和映射缓冲区 ioctl(4,VIDIOC_QUERYBUF) mmap 3、把缓冲区放入队列 ioctl(4,VIDIOC_QBUF) 4、启动摄像头 ioctl
阅读全文
摘要:前面的几篇文章已经分析了v4l2的框架,对框架的分析是比较粗浅的,能基本清楚函数之间的调用过程。但是很多内容并没有分析,比如说里面有很多ioctl,并没有分析哪些ioctl是必须的,也没有分析如何从应用程序去获得摄像头数据。在本篇文章中,将根据虚拟驱动vivi的使用彻底分析摄像头驱动。 要想分析使用
阅读全文
摘要:上一篇文章中,已经介绍了v4l2_open、v4l2_read、v4l2_write的调用过程,相对于v4l2_ioctl,它们是比较简单的。下面来分析v4l2_ioctl。注意在这里还是分析以vivi.c为例,进行分析。 app: ioctl drv: v4L2_fops.unlocked_ioc
阅读全文
摘要:1、app: open("/dev/video0",....) drv: v4l2_fops .v4l2_open //这个函数主要做的是,调用具体设备提供的open函数 /* 问题来了,应用程序调用open("/dev/video0",....),v4l2_open为什么会最终会被调用? vide
阅读全文
摘要:1、分配video_device结构体 2、设置 3、注册 video_register_device 分析vivi.c: vivi_init( )//入口函数 vivi_create_instance() ret = v4l2_device_register(NULL, &dev->v4l2_de
阅读全文
摘要:在V4l2初识(一)中,我们已经知道当插上一个摄像头的时候,在uvc_driver.c中最终会调用函数video_register_device函数。接下来我们就简要分析这个函数做了哪些事情,揭开其神秘面纱。 /* Register video devices. Note that if video
阅读全文
摘要:V4L2驱动框架概述 V4L2(video for linux two)是linux为视频设备提供的一套标准接口。它也属于字符设备驱动程序。 首先回顾普通字符设备驱动程序的写法: app : open read write 内核: drv_open drv_read drv_write 相关的硬件设
阅读全文
浙公网安备 33010602011771号