Linux驱动开发基础
文章平均质量分 91
DreamCatcher100
这个作者很懒,什么都没留下…
展开
-
Linux内核定时器及内核延时
一、内核定时器内核定时器 (也称为动态定时器)是内核在以后某一个时刻运行一段程序或进程的基础,软件定时器可以在一个确切的时间点上(更严格地说是一个时间点以后)激活相应的程序段或进程。软件定时器在设备驱动程序中被大量应用以检测设备的状态。使用一个软件定时器很简单,只需做一些初始化工作,设置一个相对于当前时刻的超时时间和超时处理函数,将其插入到内核定时器队列中即可,设置的超时处理函数会在定时器原创 2013-07-09 22:13:38 · 1067 阅读 · 0 评论 -
Linux input子系统分析---1、概述与数据结构
Input子系统处理输入事务,任何输入设备的驱动程序都可以通过Input输入子系统提供的接口注册到内核,利用子系统提供的功能来与用户空间交互。输入设备一般包括键盘,鼠标,触摸屏等,在内核中都是以输入设备出现的。下面分析input输入子系统的结构,以及功能实现。一. Input子系统结构与功能实现 1. Input子系统是分层结构的,总共分为三层: 硬件驱动层,子系统核心层,事件处理层。转载 2013-08-05 22:26:15 · 745 阅读 · 0 评论 -
inux input子系统分析---2、主要函数
一. 各种注册函数 因为分析一所讲的每种数据结构都代表一类对象,所以每种数据结构都会对应一个注册函数,他们都定义在子系统核心的input.c文件中。主要有三个注册函数 input_register_device 向内核注册一个input设备 input_register_handle 向内核注册一个handle结构 input_regi转载 2013-08-05 22:27:45 · 828 阅读 · 0 评论 -
Linux input子系统分析---3、输入子系统核心分析
一. 输入子系统核心分析。 1.输入子系统核心对应与/drivers/input/input.c文件,这个也是作为一个模块注册到内核的。所以首先分析模块初始化函数。 static int __init input_init(void) { int err; input_init_abs_bypass(); //这个暂时转载 2013-08-05 22:29:20 · 657 阅读 · 0 评论 -
Linux input子系统分析---5、事件传递过程
三. 事件传递过程(以s3c2410_ts为例) 1. 事件产生 当按下触摸屏时,进入触摸屏按下中断,开始ad转换,ad转换完成进入ad完成中断,在这个终端中将事件发送出去,调用 input_report_abs(dev, ABS_X, xp); input_report_abs(dev, ABS_Y, yp); 这两个函数调用了 input_event(de转载 2013-08-05 22:32:10 · 864 阅读 · 0 评论 -
Input子系统分析
Linux Input 设备驱动1认识和使用 input 事件:1.1Linux input 驱动分类Input驱动程序是Linux输入设备的驱动程序,分成游戏杆(joystick)、鼠标(mouse和mice)和事件设备(Event queue)3种驱动程序。其中事件驱动程序是目前通用的驱动程序,可支持键盘、鼠标、触摸屏等多种输入设备。Input驱动程序的主设备号是13,驱动程转载 2013-08-05 22:49:46 · 687 阅读 · 0 评论 -
Linux input子系统分析---4、事件处理层分析
二. 事件处理层分析(以evdev事件处理器为例) 1.事件处理层与用户程序和输入子系统核心打交道,是他们两层的桥梁。一般内核有好几个事件处理器,像evdev mousedev jotdev。evdev事件处理器可以处理所有的事件,触摸屏驱动就是用的这个,所以下面分析这个事件处理器的实现。它也是作为模块注册到内核中的,首先分析它的模块初始化函数。 static转载 2013-08-05 22:30:48 · 763 阅读 · 0 评论 -
Linux设备驱动开发基础---字符设备驱动程序开发之mini2440_ADC驱动
一、硬件原理分析S3C2440内部ADC结构图我们从上面的结构图和数据手册可以知道,该ADC模块总共有8个通道可以进行模拟信号的输入,分别是AIN0、AIN1、AIN2、AIN3、 YM、YP、XM、XP。那么ADC是怎么实现模拟信号到数字信号的转换呢?首先模拟信号从任一通道输入,然后设定寄存器中预分频器的值来确定AD转换器频率,最后ADC将模拟信号转换为数字信号保存到ADC数据寄原创 2013-07-23 19:51:11 · 1102 阅读 · 0 评论 -
Linux设备驱动开发基础---mini2440触摸屏驱动
一、触摸屏设备工作原理1、触摸屏设备的类型触摸屏按其技术原理可分为五类:矢量压力传感式、电阻式、电容式、红外线式、表面声波式,其中电阻式触摸屏在嵌入式系统中用的较多。原创 2013-08-05 23:49:23 · 1289 阅读 · 0 评论 -
Linux设备驱动开发基础---字符设备驱动程序开发之基于中断的按键驱动
二、硬件原理分析Mini2440 具有6 个用户测试按键,它们都是连接到CPU 的中断引脚。如图:由原理图可知,这些引脚在按键没有按下的情况下被上拉为高电平,按键被按下的时候变为低电平。三、实现方式1、在/linux-2.6.32.2/drivers/buttons目录下创建一个新的驱动程序文件mini2440_buttons.c,内容及详细注释如下:#include原创 2013-07-09 22:18:06 · 1151 阅读 · 0 评论 -
Linux输入子系统
1.input子系统概述输入设备(如键盘,鼠标,跟踪球,操纵杆,触摸屏,加速计和手写板,等)是典型的字符设备,其一般的工作机制是低层在按键,触摸等动作发生时产生一个中断(或驱动通过timer定时查询),然后cpu通过SPI,I2C或者外部存储器总线读取键值,坐标等数据,放一个缓冲区,字符设备驱动管理该缓冲区,而驱动的read()接口让用户可以读取键值,坐标等数据。在Linux中,输入子系统原创 2013-07-29 22:22:06 · 598 阅读 · 0 评论 -
PWM控制蜂鸣器驱动
1、PWM定时器概述 PWM ( Pulse Width Modulation ) —— 脉宽调制,它是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变换等许多领域 。S3C2440A 有5个16位定时器。其中定时器 0、1、2 和3具有脉宽调制(PWM)功能。定时器 4 是一个无输出引脚的内部定时器。定时器0还包含用于大电流驱动的死区原创 2013-07-20 15:37:50 · 19992 阅读 · 0 评论 -
Linux驱动模块自动创建设备节点
在宋宝华《Linux设备驱动开发详解》中我们能找到如下描述:devfs与udev的另一个显著区别在于:采用devfs,当一个并不存在的/dev节点被打开的时候,devfs能自动加载对应的驱动,而udev则不能。这是因为 udev的设计者认为Linux应该在设备被发现的时候加载驱动模块,而不是当它被访问的时候。udev 完全在用户态工作,利用设备加入或移除时内核所发送的热插拔事件(hotpl原创 2013-07-09 11:24:06 · 1445 阅读 · 0 评论 -
Linux设备驱动开发基础---Linux内核中断原理
一、Linux中中断原理1、中断的分类在Linux操作系统中,中断的分类是非常复杂的。根据不同的角度,可以将中断分为不同的类型。根据中断的来源,中断可分为内部中断和外部中断,内部中断的中断源来自CPU内部(软件中断指令、溢出、除法错误等,例如,操作系统从用户态切换到内核态需借助CPU内部的软件中断) ,外部中断的中断源来自CPU外部,由外设提出请求。 根据是否可以屏蔽中断分为可屏蔽原创 2013-07-08 23:44:33 · 982 阅读 · 0 评论 -
Linux设备驱动开发基础---新驱动程序添加到内核方法(2)
一 . 概述:在 linux 内核中增加程序需要完成以下三项工作:1. 将编写的源代码复制到 Linux 内核源代码的相应目录2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项3. 在目录的 Makefile 文件中增加对新源代码的编译条目二 . 以mini2440中ADC驱动的添加为例来进行说明ADC设备在Linux中可以看做是简单的字符设备,也可以原创 2013-06-26 20:19:13 · 1107 阅读 · 0 评论 -
Linux设备驱动开发基础---新驱动程序添加到内核方法(1)
1、编写Linux设备驱动的技术基础●编写Linux 设备驱动要求工程师具有良好的硬件基础,懂得 SRAM、Flash、SDRAM、磁盘的读写方式,UART、I2C、USB等设备的接口,轮询、中断、DMA的原理,PCI总线的工作方式以及CPU的内存管理单元(MMU)等。 ●编写Linux 设备驱动要求工程师具有良好的 C语言基础, 能灵活地运用 C语言的结构体、指针、函数指针及内存动原创 2013-06-25 22:47:34 · 1320 阅读 · 0 评论 -
Linux设备驱动开发基础---Linux内核模块
一、Linux内核模块的程序结构●模块加载函数(必须) 当通过insmod或 modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。 ●模块卸载函数(必须) 。 当通过rmmod命令卸载某模块时,模块的卸载函数会自动被内核执行,完成与模块加载函数相反的功能。 ●模块许可证声明(必须) 。 ●模块许可证(LICENSE)声明描述内原创 2013-06-26 22:48:00 · 770 阅读 · 0 评论 -
字符设备驱动程序开发之基于中断的按键驱动加去抖动
中断实现原理分析#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include原创 2013-07-13 20:49:01 · 1029 阅读 · 0 评论 -
Linux设备驱动开发基础---字符设备驱动程序开发
一、Linux字符设备驱动结构1、cdev结构体在 Linux 2.6 内核中使用 cdev结构体描述字符设备, cdev 结构体的定义如下所示: cdev 结构体 1 struct cdev 2 { 3 struct kobject kobj; /* 内嵌的kobject对象 */ 4 struct module *owner; /*所属模块*/原创 2013-06-28 09:49:47 · 806 阅读 · 0 评论 -
Linux设备驱动中的并发控制---信号量
Linux 设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导致竞态。 1、并发与竞态并发(concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(race conditions)。在Linux内核中,主要的竞态发生于如下几种情况:(1)、对称多处理器(S原创 2013-07-18 17:29:25 · 802 阅读 · 0 评论 -
PWM原理
脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。模拟电路 模拟信号的值可以连续变化,其时间和幅度的分辨率都没有限制。9V电池就是一种模拟器件,因为它的输出电压并不精确地等于9V,而是随时间发生变化,并可取任何实数值。与此类似,从电池吸收的电流也不限定在一组可能的取值范围之内。模拟信号与数字信号的区别转载 2013-07-20 13:15:09 · 1993 阅读 · 0 评论 -
让qt程序在mini2440上支持触摸屏
1.设置qt运行的环境变量:#!/bin/sh#configure for tslibexport TSLIB_ROOT=/opt/tslib export TSLIB_TSDEVICE=/dev/input/event0原创 2013-09-25 20:57:59 · 894 阅读 · 0 评论