随笔分类 - Linux驱动
驱动调试之打印
摘要:在编写驱动过程分析中会遇到许多难找的问题,这时候调试的方法就很重要了,下面介绍的是利用打印的方法调试驱动,这种方法同样可以用在应用的调试过程中,而且很有效。 1、prink的原理 首先介绍一下打印的函数prink的原理,printk的原理是最终打印在终端上的。所以只要是能成为终端的设备均可被打印,比
阅读全文
uevent机制
摘要:uevent, user space event. 内核与用户空间的一种通信机制,基于netlink机制,主要用于设备驱动模型,例如热插拔。 1、调用/sbin/mdev的流程分析 在驱动程序中经常出现class_device_create这个函数,它用来在/dev目录下创建各个设备的设备节点,那么
阅读全文
字符设备的另一种写法
摘要:对于前面的使用register_chrdev函数注册字符设备驱动程序的方法其实是尚未升级到2.6内核版本的驱动代码。使用这种方式虽然理解起来简单(可以简单理解为一主设备号为下标将驱动的file_operations结构体放入名为chrdevs的数组中,而当应用层调用open函数时,会通过字符设备的主
阅读全文
DM9000C网卡驱动程序编写与测试
摘要:一般网卡驱动程序厂商会给我们提供一份模板驱动,我们的工作就是需要根据自己的需要更改这个模板驱动 1、DM9000C的硬件连接 硬件连接图如下所示:它接在S3C2440的BANK4内存控制器上,它只占用8个字节的长度,并且是16bit的位宽。 下面介绍一下DM9000C的主要引脚的功能:SD0-SD1
阅读全文
网卡驱动程序框架以及虚拟网卡驱动程序的实现
摘要:LINUX驱动程序分三大块:字符驱动程序、块设备驱动程序、网络驱动程序。其中网络驱动程序分为好多层协议层+与硬件相关的层。这篇主要介绍网络驱动中与硬件相关的层的框架:网卡驱动程序。 1、网卡驱动程序框,直接上图: 从图中可以知道,首先应用层通过socket编程调用若干的网络协议层,而这网络协议层完成
阅读全文
NAND FLASH驱动框架以及程序实现
摘要:1、NAND FLASH的硬件连接: 实验用的NAND FLASH芯片为K9F2G08U0C,它是三星公司的存储芯片,它的大小为256M。它的接线图如下所示: 它的每个引脚的分别为LDATA0-LDATA7为数据引脚、CLE为发送命令使能引脚、ALE为发送地址使能引脚、CE为芯片使能引脚、WE为写使
阅读全文
块设备驱动程序引入以及它的框架
摘要:所谓的块设备指的是硬盘、FLASH等的存储设备,此类设备存在一个缺点就是随机读写的时候有时候速度会变慢。下面一一介绍对于块设备驱动对于它的处理。 1、硬盘的结构 以硬盘为例,先介绍下老式磁盘的结构,因为块设备驱动的编写过程中涉及到很多老式磁盘的概念。先从磁盘片的结构说起,如图1所示,图中灰色的一圈圈
阅读全文
Linux驱动之USB鼠标驱动编写
摘要:本篇博客分以下几部分讲解 1、介绍USB四大描述 2、介绍USB鼠标驱动程序功能及框架 3、介绍程序用到的结构体 4、介绍程序用到的函数 5、编写程序 6、测试程序 1、介绍USB四大描述符 USB设备驱动程序里定义了许多与驱动程序密切相关的描述符。这里介绍一下四种比较关键的描述符:设备描述符、配置
阅读全文
Linux驱动之USB总线驱动程序框架简析
摘要:通用串行总线(USB)是主机和外围设备之间的一种连接。USB总线规范有1.1版和2.0版,当然现在已经有了3.0版本。USB1.1支持两种传输速度:低速为1.5Mbps,高速为12Mbps。USB2.0的传输速度可以高达480Mbps。USB2.0向下兼容USB1.1,可以将USB1.1的设备连接到
阅读全文
Linux驱动之触摸屏程序编写
摘要:本篇博客分以下几部分讲解 1、介绍电阻式触摸屏的原理 2、介绍触摸屏驱动的框架(输入子系统) 3、介绍程序用到的结构体 4、介绍程序用到的函数 5、编写程序 6、测试程序 1、介绍电阻式触摸屏的原理 所谓的电阻式触摸屏,只不过是在LCD屏幕上贴了一层膜,这层膜的大小与LCD的尺寸刚好相同,它分为上下
阅读全文
Linux驱动之LCD驱动编写
摘要:在Linux驱动之内核自带的S3C2440的LCD驱动分析这篇博客中已经分析了编写LCD驱动的步骤,接下来就按照这个步骤来字尝试字节编写LCD驱动。用的LCD屏幕为tft屏,每个像素点为16bit。对应与红绿蓝分别为565。 1、分配一个fb_info结构 2、设置fb_info结构 3、硬件相关的
阅读全文
Linux驱动之内核自带的S3C2440的LCD驱动分析
摘要:先来看一下应用程序是怎么操作屏幕的:Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。FrameBuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Fram
阅读全文
Linux驱动之平台设备驱动模型简析(驱动分离分层概念的建立)
摘要:Linux设备模型的目的:为内核建立一个统一的设备模型,从而有一个对系统结构的一般性抽象描述。换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要新添加设备或驱动提供一般性的统一接口,这使得驱动程序的开发变得更简单了,而程序员只需要去学习接口就行
阅读全文
Linux驱动之一个简单的输入子系统程序编写
摘要:的在Linux驱动之输入子系统简析已经分析过了输入子系统的构成,它是由设备层、核心层、事件层共同组成的。其中核心层提供一些设备层与事件层公用的函数,比如说注册函数、反注册函数、事件到来的处理函数等等;事件层其实在Linux内核里面已经帮我们写好了很多有关的事件;而设备层就跟我们新添加到输入系统的具体
阅读全文
Linux驱动之输入子系统简析
摘要:输入子系统由驱动层、输入子系统核心、事件处理层三部分组成。一个输入事件,如鼠标移动、键盘按下等通过Driver->Inputcore->Event handler->userspace的顺序到达用户控件的应用程序。 系统框图 假设打开一个字符设备驱动程序/dev/event0,event代表的是输入
阅读全文
Linux驱动之定时器在按键去抖中的应用
摘要:机械按键在按下的过程中会出现抖动的情况,如下图,这样就会导致本来按下一次按键的过程会出现多次中断,导致判断出错。在按键驱动程序中我们可以这么做: 在按键驱动程序中我们可以这么做来取消按键抖动的影响:当出现一个按键中断后不会马上去处理它,而是延时一个抖动时间(一般10ms),如果在这个时间内再次出现中
阅读全文
Linux驱动之同步、互斥、阻塞的应用
摘要:同步、互斥、阻塞的概念: 同步:在并发程序设计中,各进程对公共变量的访问必须加以制约,这种制约称为同步。 互斥机制:访问共享资源的代码区叫做临界区,这里的共享资源可能被多个线程需要,但这些共享资源又不能被同时访问,因此临界区需要以某种互斥机制加以保护,以确保共享资源被互斥访问。 阻塞与非阻塞:阻塞调
阅读全文
Linux驱动之异步OR同步,阻塞OR非阻塞概念介绍
摘要:链接:https://www.zhihu.com/question/19732473/answer/20851256 1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*
阅读全文
Linux驱动之异步通知的应用
摘要:前面的按键驱动方式都是应用程序通过主动查询的方式获得按键值的: 1、查询方式 2、中断方式 3、poll机制 下面介绍第四种按键驱动的方式 4、异步通知:它可以做到应用程序不用随时去查询按键的状态,而等待有按键被按下后,驱动程序主动发消息给应用程序,应用程序再去处理。 比如说:kill -9 pid
阅读全文
Linux驱动之poll机制的理解与简单使用
摘要:之前在Linux驱动之按键驱动编写(中断方式)中编写的驱动程序,如果没有按键按下。read函数是永远没有返回值的,现在想要做到即使没有按键按下,在一定时间之后也会有返回值。要做到这种功能,可以使用poll机制。分以下几部来介绍poll机制 1、poll机制的使用,编写测试程序 2、poll机制的调用
阅读全文