Linux驱动
文章平均质量分 80
lwj103862095
新手交流,能者指教
展开
-
insmod: error inserting 'simp-blkdev.ko': -1 Invalid module format
(一)今天写了个块设备驱动例子,在虚拟机上加载模块insmod simp_blkdev.ko的时候,出现以下错误。insmod: error inserting 'simple-blk.ko': -1 Invalid module format 其实错误很简单,Makefile的编写失误,因为之前是想让这个驱动模块在TQ2440上运行的,所以,Makefile的编写使用了以下形式:原创 2012-12-17 21:28:16 · 6033 阅读 · 2 评论 -
linux字符驱动之poll机制按键驱动
在上一节中,我们讲解了如何自动创建设备节点,实现一个中断方式的按键驱动。虽然中断式的驱动,效率是蛮高的,但是大家有没有发现,应用程序的死循环里的读函数是一直在读的;在实际的应用场所里,有没有那么一种情况,偶尔有数据、偶尔没有数据,答案当然是有的。我们理想当然的就会想到,当有数据的时候,我们才去读它,没数据的时候我们读它干啥?岂不浪费劳动力?上一节文章链接:http://blog.csdn.ne原创 2013-12-24 20:58:42 · 11545 阅读 · 2 评论 -
linux字符驱动之同步互斥按键驱动
上一节里,我们将在上一节的基础上修改驱动,将其修改为有异步通知功能的按键驱动,目标是,按下按键时,驱动主动去通知应用程序。是不是感觉驱动已经比较完善了,好像已经是完美无缺了?是不是这样呢?好像不是呢,有没有这么一种情况,多个进程想同时使用驱动的设备节点?在多线的环境下,分分钟可能会发生这种情况。上一节文章链接:http://blog.csdn.net/lwj103862095/article/原创 2013-12-25 21:48:58 · 3234 阅读 · 1 评论 -
linux字符驱动之定时器去抖动按键驱动
上一节里,实现同一时刻只能有一个进程使用同一个设备,例如:只能有一个进程,在同一时刻里使用/dev/buttons这个设备。上一节文章链接:http://blog.csdn.net/lwj103862095/article/details/17563953相信大家在写单片机的按键程序时,也必将会涉及一点,就去按键去抖动。按键去抖动的方法无非有二种,一种是硬件电路去抖动,这种在要求不是特别高原创 2013-12-26 19:35:07 · 7008 阅读 · 0 评论 -
linux lcd设备驱动剖析二
上一节中,分析了s3c2410fb,c的入口出口函数,以及一些重要结构体的分析,初步知道了这是一个平台驱动的架构。上一节文章链接:http://blog.csdn.net/lwj103862095/article/details/18188259上一节讲到probe函数就没继续往下深究了,这一节里,我们来详细分析s3c24xxfb_probe函数,整体分析如下:static int _原创 2014-01-12 21:18:04 · 5278 阅读 · 0 评论 -
linux lcd设备驱动剖析三
上一节文章中详细地剖析了probe函数,但是从始至终都没有看到打开读写文件接口的操作函数,只看到了下面这个操作结构体static struct fb_ops s3c2410fb_ops = { .owner = THIS_MODULE, .fb_check_var = s3c2410fb_check_var, .fb_set_par = s3c2410fb_set_par, .f原创 2014-01-12 21:44:49 · 4212 阅读 · 0 评论 -
linux lcd设备驱动剖析一
s3c2440 lcd驱动源码文件是:drivers/video/s3c2410fb.c看驱动源码首先当然是先看入口函数,这里是s3c2410fb_init函数int __init s3c2410fb_init(void){ /* 注册一个s3c2410fb_driver平台驱动 */ int ret = platform_driver_register(&s3c2410fb_dri原创 2014-01-12 20:43:40 · 5251 阅读 · 2 评论 -
linux lcd设备驱动剖析四
在《linux lcd设备驱动剖析二》文章中,我们详细分析了s3c24xxfb_probe函数。linux lcd设备驱动剖析二的文章链接:http://blog.csdn.net/lwj103862095/article/details/18189765s3c2410fb.c中s3c24xxfb_probe是非常重要的函数之一,但仅仅分析probe函数,貌似感觉有点不够过瘾,貌似缺少分析原创 2014-01-17 21:24:02 · 7646 阅读 · 3 评论 -
linux 混杂设备驱动之adc驱动
linux2.6.30.4中,系统已经自带有了ADC通用驱动文件---arch/arm/plat-s3c24xx/adc.c,它是以平台驱动设备模型的架构来编写的,里面是一些比较通用稳定的代码,但是linux2.6.30.4版本的ADC通用驱动文件并不完善,居然没有读函数。后来去看了linux3.8版本的ADC通用文件----arch/arm/plat-samsung/adc.c才是比较完善的。原创 2014-01-18 16:16:54 · 14552 阅读 · 0 评论 -
linux 输入子系统之电阻式触摸屏驱动
一、输入子系统情景回忆ING......在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件原创 2014-01-18 21:29:41 · 5873 阅读 · 0 评论 -
Linux MTD系统剖析
MTD,Memory Technology Device即内存技术设备,在Linux内核中,引入MTD层为NOR FLASH和NAND FLASH设备提供统一接口。MTD将文件系统与底层FLASH存储器进行了隔离。如上图所示,MTD设备通常可分为四层,从上到下依次是:设备节点、MTD设备层、MTD原始设备层、硬件驱动层。Flash硬件驱动层:Flash硬件驱动层负责对Flash硬件原创 2014-03-19 20:37:58 · 40952 阅读 · 9 评论 -
Linux平台总线驱动设备模型
platform总线是一种虚拟的总线,相应的设备成为platform_device,而驱动则为platform_driver。Linux 2.6的设备驱动模型中,把I2C、RTC、LCD等都归纳为platform_device。原创 2014-01-07 21:09:07 · 13319 阅读 · 0 评论 -
linux平台总线驱动设备模型之点亮LED
上一节中,我们引入Linux input子系统的分离分层概念,发现这样的架构特别容易移植,因为有一部分是已经相对稳定,它已经把公共的部分抽象出来,不用驱动工程师再去修改,只需要添加符合输入设备的设备驱动即可。上一节文章链接:http://blog.csdn.net/lwj103862095/article/details/17734625在这一节里,我们继续引入一种分离分层的概念,名叫 b原创 2014-01-07 21:33:20 · 5759 阅读 · 1 评论 -
块设备驱动程序<一>
一、块设备概述linux支持的两种重要的设备类型分别是字符设备和块设备,块设备可以随机地以固定大小的块传送数据。与字符设备相比,块设备有以下几个特殊之处:块设备可以从数据的任何位置进行访问块数据总是以固定长度进行传输,即便请求的这是一个字节对块设备的访问有大量的缓存。当进行读时,如果已经缓存了,就直接使用缓存中的数据,而不再读设备,对于写也通过缓存来进行延迟处理。在块系统中,数据块指的是固定大小的转载 2014-07-23 19:11:36 · 2870 阅读 · 0 评论 -
linux字符驱动之异步通知按键驱动
在上一节里,我们在中断的基础上添加poll机制来实现有数据的时候就去读,没数据的时候,自己规定一个时间,如果还没有数据,就表示超时时间。在此以前,我们都是让应用程序主动去读,那有没有一种情况,当驱动程序有数据时,主动去告诉应用程序,告诉它,有数据了,你赶紧来读吧。答案当然是有的,这种情况在linux里的专业术语就叫异步通知。上一节文章链接:http://blog.csdn.net/lwj103原创 2013-12-24 22:23:58 · 6221 阅读 · 1 评论 -
linux字符驱动之查询按键
在上一节中,我们讲解了如何自动创建设备节点,并用“最笨”的方法实现点亮LED。上一节文章链接:http://blog.csdn.net/lwj103862095/article/details/17472455 这一节里,我们基于上一节的基础上,稍微改动一下,来实现一个查询方式的按键驱动。问:既然是基于上一节的基础,只是稍微改动,改动了哪些?答:框架是不变的,还是字符设备框原创 2013-12-22 13:53:07 · 3746 阅读 · 0 评论 -
linux字符驱动之中断按键
在上一节中,我们讲解了如何自动创建设备节点,实现一个查询方式的按键驱动。测试的时候,大家都看到了,使用查询式的方法,占用CPU的利用率高达99%,那么有没有好的办法来取代这惨不忍睹的方法呢?答案当然是有的。上一节文章链接:http://blog.csdn.net/lwj103862095/article/details/17484041这一节里,我们使用中断的方法来实现按键驱动。原创 2013-12-23 21:53:46 · 11495 阅读 · 1 评论 -
Linux设备驱动开发详解总结(一)之字符设备驱动结构
Linux字符设备驱动结构1.1 cdev结构体 在Linux2.6 内核中,使用cdev结构体来描述一个字符设备,cdev结构体的定义如下:struct cdev { struct kobject kobj; struct module *owner; /*通常为THIS_MODULE*/ struct file_operatio原创 2013-01-24 20:50:30 · 4449 阅读 · 0 评论 -
简单字符设备驱动程序分析(一)
这是一个简单的字符驱动,利用内存作为字符设备,来编写一个字符驱动,该驱动没有涉及任何具体的硬件,也未涉及并发、竞争、非阻塞等高级应用,废话少说,先上代码。 运行环境:TQ2440开发板,内核版本2.6.30.4开发环境:Window下的Source Insight以及PC机上的红帽企版5虚拟机实验环境前提条件:拥有一个制作好的NFS文件系统 /***************原创 2013-01-24 21:22:52 · 3103 阅读 · 1 评论 -
并发字符设备驱动程序分析(二)
这是一个考虑了并发与竞态的字符驱动,同样也是利用内存作为字符设备,来编写一个字符驱动,该驱动没有涉及任何具体的硬件,废话少说,先上代码。运行环境:TQ2440开发板,内核版本2.6.30.4开发环境:Window下的Source Insight以及PC机上的红帽企版5虚拟机实验环境前提条件:拥有一个制作好的NFS文件系统 /*************************原创 2013-01-28 22:25:58 · 2253 阅读 · 0 评论 -
Linux设备驱动开发详解总结(二)之并发与竞争
Linux设备驱动中必须解决一个问题是多个进程对共享资源的并发访问,并发的访问会导致竞态,在当今的Linux内核中,支持SMP与内核抢占的环境下,更是充满了并发与竞态。幸运的是,Linux 提供了多钟解决竞态问题的方式,这些方式适合不同的应用场景。例如:中断屏蔽、原子操作、自旋锁、信号量等等并发控制机制。 1.1 并发与竞态 并发是指多个执行单元同时、并发被执行,而并发的执行单元原创 2013-01-28 16:53:15 · 3211 阅读 · 0 评论 -
helloworld驱动加强版
helloworld——加强版这篇文章相比上一篇文章主要是增加了一个模块参数运行环境:TQ2440开发板,内核版本2.6.30.4开发环境:Window下的Source Insight以及PC机上的红帽企版5虚拟机实验环境前提条件:拥有一个制作好的NFS文件系统 /**********************************hellop.c***********原创 2013-01-22 17:35:04 · 1961 阅读 · 6 评论 -
第一个驱动之helloworld
第一个驱动——helloworld运行环境:TQ2440开发板,内核版本2.6.30.4开发环境:Window下的Source Insight以及PC机上的红帽企版5虚拟机实验环境前提条件:拥有一个制作好的NFS文件系统/**********************************hello.c*************************************/原创 2013-01-22 16:59:38 · 5035 阅读 · 0 评论 -
Linux下LCD驱动详细分析(一)
貌似好久好久没写驱动类的博客,距上一次写驱动的博客还得回到半年前,那时天气还很冷,如今已经热的要命,但我还是想把自己学习到的知识跟大家分享。没写驱动类的博客是觉得Linux下的驱动源码真是太多太多了,半年前我也比较害怕Linux源代码,随时时间的推移,自己琢磨了不短时间了,觉得大概能读懂Linux源代码了,也就没那么害怕它了。原归正传,预定以后的驱动博客我想用尽量短篇幅来记录,但是会以尽量详细原创 2013-08-16 22:54:13 · 15502 阅读 · 1 评论 -
linux输入子系统概念介绍
在此文章之前,我们讲解的都是简单的字符驱动,涉及的内容有字符驱动的框架、自动创建设备节点、linux中断、poll机制、异步通知、同步互斥、非阻塞、定时器去抖动。上一节文章链接:http://blog.csdn.net/lwj103862095/article/details/17589311在这一节里,我们要引入linux的分离分层的概念,linux输入子系统是一个很好的代表,在讲解如何原创 2014-01-01 15:08:47 · 8707 阅读 · 6 评论 -
linux输入子系统之按键驱动
上一节中,我们讲解了Linux input子系统的框架,到内核源码里详细分析了输入子系统的分离分层的框架等。上一节文章链接:http://blog.csdn.net/lwj103862095/article/details/17733993这一节,我们来以输入子系统的框架来写一个按键驱动。问:怎么写符合输入子系统框架的驱动程序?答:1. 分配一个input_dev结构体2原创 2014-01-01 15:51:52 · 20917 阅读 · 0 评论 -
linux字符驱动之自动创建设备节点
上一节中,我们是手工创建设备节点,大家肯定也会觉得这样做太麻烦了。上一节文章链接:http://blog.csdn.net/lwj103862095/article/details/17468587问:能不能让系统自动创建设备节点?答:可以,linux有udev、mdev的机制,而我们的ARM开发板上移植的busybox有mdev机制,那么就使用mdev机制来自动创建设备节点。问:原创 2013-12-21 19:32:17 · 16850 阅读 · 1 评论 -
linux驱动环境搭建
编写驱动前,理所当然的,我们应事先将环境搭建好,废话不多说,直奔主题。环境的搭建:一、开发板使用TQ2440这个没什么好说,去购买一块开发板即可。二、linux的版本为linux2.6.30.4(以后再使用linux.3.4或更高)linux直接使用天嵌公司提供的zImage_Q43_2.6.30.4_20100531.bin三、搭建uboot环境参数烧写uboot、l原创 2013-12-21 15:17:05 · 3418 阅读 · 0 评论 -
linux字符驱动之初见
学习驱动也有长达一年多的时间了,受益最深的就是看韦东山老师的视频,如今已经几乎将二期三期的视频全部看完,甚至已经将二期视频看过好几遍,为了再次加深印象,我将韦老师的源码自己全部编写一遍。将所有遇到的问题,记录在此。觉得看了韦老师的视频,再看其他视频都是弱爆了。由于是文章记录,不可能写的非常详细,只摘录关键点,想具体详细的深入,还请去看韦老大的视频吧。这篇文章是主要是讲解字符驱动的框架,并没有涉原创 2013-12-21 17:19:18 · 5256 阅读 · 2 评论 -
linux字符驱动之点亮LED
上一节中,我们讲解了如何自动创建设备节点,这一节我们在上一节的基础上,实现点亮LED。上一节文章链接:http://blog.csdn.net/lwj103862095/article/details/17470573驱动里面能够用很多种方法实现LED驱动,其中有本节的字符驱动(最笨的方法)、混杂设备驱动、使用内核GPIO函数接口、使用通用的平台设备驱动的方法等。但是,不要因为本节是最笨的原创 2013-12-21 21:53:28 · 6592 阅读 · 1 评论 -
块设备驱动程序<二>
一、块设备驱动之概念和框架1.基本概念块设备(blockdevice)--- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。字符设备(Character device)---是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。他不具备缓冲区,所以对这转载 2014-07-24 17:05:27 · 2522 阅读 · 0 评论