
Linux 驱动开发
文章平均质量分 81
clbiao
静以修身,俭以养德。淡泊明志,宁静致远。
展开
-
Linux第一个驱动:Hello World
进入Linux底层驱动最重要的一个阶段:Linux驱动程序设计知识结构:1.驱动程序设计模型40%2.内核相关知识30%3.硬件相关知识30% 逐渐淡化学习方法:理论-->实验-->疑问-->理论-->实验-->.........原创 2014-11-04 17:18:18 · 872 阅读 · 0 评论 -
混杂设备驱动--输出两路PWM
尝试用2440的TOUT0和TOUT1输出PWM驱动两个电机,电机的硬件驱动电路是使用L298N。先单独测试TOUT0的PWM输出:(1)驱动程序:使用misc混杂设备驱动模型,当然也可以使用基本的字符设备模型。使用misc设备驱动模型步骤:①初始化一个struct miscdevice结构体:主要是file_operation结构体成员和name②使用misc_registe原创 2015-05-18 22:28:55 · 2325 阅读 · 0 评论 -
platform设备驱动框架搭建分析
之前接触到的字符设备驱动是非常单纯的Linux字符设备驱动,他不具备工程中Linux驱动中的设备与驱动分离思想和设备驱动的分层思想,不具备“总线-设备-驱动”模型的概念。接下来通过分析platform设备驱动模型的搭建过程来看看Linux的设备驱动模型究竟是怎样的?platform驱动模型搭建:(1)platform核心层:为设备层和驱动层提供注册接口、为设备层和驱动层的匹配提供标准①原创 2015-04-20 17:45:19 · 2903 阅读 · 0 评论 -
字符设备驱动同步之互斥阻塞
先了解几个概念:临界资源:一次只允许一个执行单元使用的资源称为临界资源。比如多台电脑都可以使用同一台打印机,但是,一个时刻只能有一台电脑来控制他进行打印,所以打印机在这里就是临界资源。临界区:访问共享资源的代码区域。就是执行单元访问共享资源的那段代码就对啦。并发:就是几个进程一起执行。竞态:几个进程同时访问共享资源时发生(上面之所以说是执行单元,不说进程是因为还有线程的存在)原创 2015-03-25 00:13:24 · 1751 阅读 · 0 评论 -
字符设备之异步通信
基于字符设备驱动之中断按键来进行分析字符设备驱动的另一种技巧:异步通知--一种可以让驱动程序变的很主动的方法一、目标:按键按下时,驱动层序主动通知应用程序有数据可读,这样就不用应用程序老是自己主动去读数据,专心做自己的事,该来的不用去请都会自己送上门来,瞬间就高大上起来啦要思考的问题:①注册信号处理函数②谁发信号?内核驱动③发给谁?APP。前提是App要告诉驱动它的PID原创 2015-03-21 11:20:44 · 1256 阅读 · 0 评论 -
字符设备之poll机制
poll机制作用:相当于一个定时器,时间到了还没有资源就唤醒进程。主要用途就是:进程设置一段时间用来等待资源,如果时间到了资源还没有到来,进程就立刻从睡眠状态唤醒不再等待。当然这只是使用于这段时间以后资源对于该进程已经无用的情况。内核中poll机制的实现过程:sys_poll函数在include/linux/syscalls.h中声明//函数定义前加宏asmlinkage原创 2015-03-21 01:09:24 · 2831 阅读 · 0 评论 -
初学字符设备驱动
经过上次学习Linux的helloworld驱动,现在对驱动程序有了一点概念了。今天,接着往下学习Linux驱动咯!Linux驱动学习任务:(1)网络接口驱动:重点;(2)块设备驱动;(3)字符设备驱动:重点Linux用户如何使用上面这些驱动程序的?对应序号分别是:(1)用户-->套接字-->协议栈-->网络设备驱动-->网络接口设备(2)用户-->文件系统-->块原创 2014-11-05 22:52:24 · 702 阅读 · 0 评论 -
输入子系统之按键驱动
上一篇博文《input输入子系统框架分析》,尝试使用这种驱动模型来看一个按键驱动程序。下面的程序是根据韦东山老师写的代码进行修改的,我的开发板是tq2440。button.c文件:#include #include #include #include #include #include #include #include #include #include #inc原创 2015-04-21 22:20:30 · 734 阅读 · 0 评论 -
input输入子系统框架分析
input子系统的搭建要点:核心层为事件驱动层和设备驱动层的注册提供API的实现、核心层为设备驱动层上报事件提供API的实现 、事件驱动层为应用层提供API的实现 。(1)核心层:提供事件驱动层和设备驱动层所需的函数接口(为input dev和input handler建立联)drivers/input/input.c:##主要接口函数一览:##①为事件驱动层提供的:注册A原创 2015-04-21 10:09:35 · 1326 阅读 · 0 评论 -
RTC驱动模型分析
①RTC设备层:设备资源的定义:arch/arm/plat-s3c24xx/devs.cstatic struct resource s3c_rtc_resource[] = { [0] = { .start = S3C24XX_PA_RTC, .end = S3C24XX_PA_RTC + 0xff, .flags = IORESOURCE_MEM, }, [1]原创 2015-04-21 08:24:22 · 1459 阅读 · 0 评论 -
基于platform驱动模型的LED驱动
上一篇博文《platform设备驱动框架搭建分析》主要是根据内核源码来分析platform驱动模型工作的原理,在实际的驱动开发中如何使用Linux的这么一种模型来管理这种类型的设备呢?把tq2440开发板上的LED1当做是平台设备注册到Linux系统中,让系统可以用这种platform驱动来管理他。①总线层:代码不用我们自己去写,内核已经提供了②设备层:向platform总线层注册硬件相关原创 2015-04-20 19:35:36 · 1281 阅读 · 0 评论 -
Linux设备驱动模型--分离分层思想
一、设备驱动的分层思想:以platform设备驱动、input设备驱动为例看看他们在分层思想上的体现【1】在核心层:一类设备总线通用的功能特性,如果某一设备支持的总线比较特别可以不使用这些功能特性,在自己的设备总线结构体中进行重载。例(1)platform核心层:定义在drivers/base/platform.c文件Linux内核对设备总线先进行了一次全局的抽象,即概括了所有设备原创 2015-04-22 18:58:48 · 3238 阅读 · 0 评论 -
字符设备之中断按键
从题目就可以意会到这一节还是关于字符设备的驱动,不过是另一种技巧:中断。这个词一点都不陌生。一、先来分析今天的重量级函数request_irq(),看看他的函数原型就行了,先不进行深入分析。int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *原创 2015-03-19 20:46:36 · 1327 阅读 · 0 评论 -
字符设备驱动点亮led
之前学习了简单的字符设备驱动程序的编写,还仅仅是一种抽象的操作。今天来学习通过字符设备驱动来控制led的亮灭。如果还没有学习过字符设备驱动,还是建议先去掌握那部分的知识,再回来看这些就容易好多了。驱动程序:#include #include #include #include #include #include #include #include #include原创 2014-12-13 21:25:06 · 875 阅读 · 0 评论 -
字符设备驱动查询方式读取按键值
上一篇博文讲到通过字符型设备文件愉快的实现了控制led的亮灭,涉及到一个知识点是用户程序(用户空间)向内核程序(内核空间)发送数据实现对led的控制。今天我们是字符设备驱动之按键,要把内核程序读到的按键值发送到用户空间实现显示。由于原理和之前类似,这里不再累述,直接看代码即可。按键驱动程序:#include #include #include #include原创 2014-12-15 11:36:28 · 1047 阅读 · 0 评论