Linux驱动设备总结
痞子IT
开源,共享,谋发展!
展开
-
linux设备驱动归纳总结(一):内核的相关基础概念
linux设备驱动归纳总结(一):内核的相关基础概念xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx一.linux设备驱动的作用内核:用于管理软硬件资源,并提供运行环境。如分配4G虚拟空间等。linux设备驱动:是连接硬件和内核之间的桥梁。转载 2015-09-08 10:12:48 · 470 阅读 · 0 评论 -
linux设备驱动归纳总结(六):1.中断的实现
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx一、什么是中断中断分两种:1)中断,又叫外部中断或异步中断,它的产生是由于外设向处理器发出中断请求。其中外部中断也有两种,这是由配置寄存器设定的:普通中断请求(IRQ)和快速中断请转载 2016-10-28 09:01:52 · 285 阅读 · 0 评论 -
linux设备驱动归纳总结(六):2.分享中断号
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx上一节介绍的内容是,调用接口request_irq(),使中断号与中断处理函数对应。但是,有时候会有这样的情况,如果开发板上按键的中断已经被另外的驱动程序注册中断了,而我现在又想再注册一次这个中断,这就出现了一个中断号不转载 2016-10-28 09:02:37 · 774 阅读 · 0 评论 -
linux设备驱动归纳总结(六):3.中断下半部之tasklet
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx一、什么是下半部中断是一个很霸道的东西,处理器一旦接收到中断,就会打断正在执行的代码,调用中断处理函数。如果在中断处理函数中没有禁止中断,该中断处理函数执行过程中仍有可能被其他中断打断。出转载 2016-10-28 09:03:39 · 323 阅读 · 0 评论 -
linux设备驱动归纳总结(六):3.中断下半部之工作队列
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节介绍另外一种的下半部实现——工作队列。相对于软中断/tasklet,工作对列运行在进程上下文,允许睡眠,接下来慢慢介绍。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 09:04:27 · 247 阅读 · 0 评论 -
linux设备驱动归纳总结(七):1.时间管理与内核延时
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节将介绍一些很枯燥的内核,大体是内核中时间的概念和内核延时的使用,并没有源代码。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 09:06:00 · 299 阅读 · 0 评论 -
linux设备驱动归纳总结(七):2.内核定时器
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节将介绍内核定时器的使用。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 09:07:01 · 281 阅读 · 0 评论 -
linux设备驱动归纳总结(八):1.总线、设备和驱动
linux设备驱动归纳总结(八):1.总线、设备和驱动xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这几天一直在看设备模型,内核的代码看得我越来越沮丧,特别是kboject、kset和ktype之间的关系。但是,设备模型的归纳我打算先跳过这几个重要结转载 2015-09-07 14:38:03 · 406 阅读 · 0 评论 -
linux设备驱动归纳总结(八):2.match.probe.remove
linux设备驱动归纳总结(八):2.总线、设备和驱动的关系xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx上一节介绍了总线、设备和驱动函数的注册,这节着重介绍它们三者的关系,和上一节一样,我模拟一条usb总线,一个usb鼠标设备和一个usb鼠标驱动函转载 2015-09-07 15:42:15 · 442 阅读 · 0 评论 -
linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想
linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx前面的内容介绍了总线、设备和驱动函数的关系和操作。从这节开始,介绍设备管理中的分层思想和面向对象思想(名字是我自己瞎编的,《LDD》上指的转载 2015-09-07 15:43:50 · 435 阅读 · 0 评论 -
linux设备驱动归纳总结(八):4.总线热插拔
linux设备驱动归纳总结(八):4.总线热插拔xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx上一节介绍设备管理中的分层思想和面向对象思想(名字是我自己瞎编的)。接下来说一下热插拔的操作。xxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2015-09-07 15:50:54 · 1409 阅读 · 0 评论 -
linux设备驱动归纳总结(九):1.platform设备驱动
linux设备驱动归纳总结(九):1.platform总线的设备和驱动xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这一节可以理解是第八章的延伸,从这节开始介绍platform设备驱动。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2015-09-07 15:52:18 · 470 阅读 · 0 评论 -
linux设备驱动归纳总结(十):1.udev&misc
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx不知不觉我的总结已经写得七七八八了,这一章节只是补充一下两个知识点:动态创建设备节点和杂设备类的注册。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 09:08:41 · 301 阅读 · 0 评论 -
linux设备驱动归纳总结(十一):简单的看门狗驱动
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx设备驱动的归纳已经差不多了,趁着知识点还没有遗忘,写点代码巩固一下,来个简单的看门狗驱动——静态平台类的杂设备看门狗驱动,有定时和重启两个基本功能。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 09:09:30 · 512 阅读 · 0 评论 -
linux设备驱动归纳总结(十二):简单的数码相框
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx其实代码很简单,实现lcd驱动,使lcd能够显示图片,当按下按键后切换图片。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 09:10:24 · 327 阅读 · 0 评论 -
linux设备驱动归纳总结(五):4.写个简单的LED驱动
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx在上面的章节的知识,已经能够实现个简单的LED驱动。居于前面操作LED的函数(5th_mm_2/3rd/test.c),我一步一步来修改。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 09:00:53 · 266 阅读 · 0 评论 -
linux设备驱动归纳总结(五):3.IO静态映射
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx有时候会觉得,每次访问硬件都要先通过ioremap来获取虚拟地址,其实有没有一种一劳永逸的方法,只要一次的操作,以后就能通过这个地址来访问硬件。答案是“有”,这就是接下来要介绍的IO内存静态映射。xxxxxxxx转载 2016-10-28 09:00:09 · 298 阅读 · 0 评论 -
linux设备驱动归纳总结(五):2.操作硬件——IO内存
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx在之前章节的驱动,都没有对硬件进行操作,接写来将从我之前学的裸板驱动开始,讲解在linux系统下如何访问硬件。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 08:59:16 · 265 阅读 · 0 评论 -
linux设备驱动归纳总结(二):模块的相关基础概念
linux设备驱动归纳总结(二):模块的相关基础概念系统平台:Ubuntu 10.04开发平台:S3C2440开发板xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx一。初探linux内核模块内核模块:内核本身是很庞大的一个结转载 2015-09-08 10:23:45 · 339 阅读 · 0 评论 -
linux设备驱动归纳总结(三):1字符型设备之设备申请
linux设备驱动归纳总结(三):1.字符型设备之设备申请操作系统:Ubunru 10.04实验平台:S3C2440 + linux2.6.29内核注:在今后驱动程序的学习中经常需要查看内核源代码,建议大家新加一个内核目录,去掉一些与S3C2440平台无关的代码,打包成ctags,方便查看代码。一、驱动的分类:内核驱动大致分为三类:1)字符设备:在今转载 2015-09-08 10:25:17 · 466 阅读 · 0 评论 -
linux设备驱动归纳总结(三): 2 open.close.read.write
linux设备驱动归纳总结(三):2.字符型设备的操作open、close、read、write一、文件操作结构体file_operations继续上次没讲完的问题,文件操作结构体到底是什么东西,为什么我注册了设备之后什么现象都没有?可以验证文件操作结构体的内容。file_operations是一个函数指针的集合,用于存放我们定义的用于操作设备的函数的指转载 2015-09-08 10:26:38 · 407 阅读 · 0 评论 -
linux设备驱动归纳总结(三):3面向对象思想和lseek
linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现一、结构体struct file和struct inode在之前写的函数,全部是定义了一些零散的全局变量。有没有办法整合成到一个结构体当中?这样的话,看起来和用起来都比较方便。接下来就要说这方面的问题。不过先要介绍一下除了fops以外的两个比较重要的结构体:1)s转载 2015-09-08 10:28:18 · 636 阅读 · 0 评论 -
linux设备驱动归纳总结(三):4.ioctl的实现
linux设备驱动归纳总结(三):4.ioctl的实现一、ioctl的简介:虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动,想要一个弹出光驱的操作,这种操作并不是所有的字符设备都需要的,所以文件操作结构体也不会有对应的函数操作。出于这样的原因,ioctl转载 2015-09-08 10:30:08 · 569 阅读 · 0 评论 -
linux设备驱动归纳总结(三):5.阻塞型IO实现
linux设备驱动归纳总结(三):5.阻塞型IO实现xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx一、休眠简介:进程休眠,简单的说就是正在运行的进程让出CPU。休眠的进程会被内核搁置在在一边,只有当内核再次把休眠的进程唤醒,进程才转载 2015-09-08 16:05:09 · 393 阅读 · 0 评论 -
linux设备驱动归纳总结(三):6.poll和sellct
linux设备驱动归纳总结(三):6.poll和sellctxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx接下来会讲系统调用select在驱动中的实现,如果对系统调用select不太懂的话,建议先看书补习一下。xxxxxxxxxxxxxxxxxx转载 2015-09-08 16:07:19 · 544 阅读 · 0 评论 -
linux设备驱动归纳总结(三):7.异步通知fasync
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx异步通知fasync是应用于系统调用signal和sigaction函数,下面我会使用signal函数。简单的说,signal函数就是让一个信号与与一个函数对应,没当接收到这个信号就会调用相应的函数。xxxxxx转载 2016-10-28 08:51:23 · 270 阅读 · 0 评论 -
linux设备驱动归纳总结(四):1.进程管理的相关概念
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx接下来的几节我会大概的讲一下内核进程的一些概念,其实应该在学习系统编程时候就应该知道的。。我参照的书籍是《linux内核设计与实现》(第三版)。我会尽可能地跳开内核代码,简述一下原理。xxxxxxxxxxxxxx转载 2016-10-28 08:53:39 · 202 阅读 · 0 评论 -
linux设备驱动归纳总结(四):2.进程调度的相关概念
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx进程的调度就是指进程间的切换,进程调度的知识其实我也不太清除,我查找的资料有些说法并不一致,所以我只能说一下一些我的理解。如有错误或不足,望指正。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 08:54:23 · 257 阅读 · 0 评论 -
linux设备驱动归纳总结(四):3.抢占和上下文切换
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx上一节介绍了进程调度的一些基本概念,并简单介绍了在没有抢占的情况下,CFS调度的是如何分配进程的优先级和时间片。但是,内核并不会只是单一地分配时间片让进程运行。xxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 08:54:54 · 361 阅读 · 0 评论 -
linux设备驱动归纳总结(四):4.单CPU下竞态和并发
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx经过上面几节的铺垫,终于要来重点了,由于内核的进程调度和中断(中断还没讲,不过这里会大概的说说),它们都会进入内核共用内核的资源。所以,只要一不留神,自己进程的资源就会在不经意的情况下被别的进程修改了。这节将介绍并讨论如转载 2016-10-28 08:55:51 · 251 阅读 · 0 评论 -
linux设备驱动归纳总结(四):5.SMP下的竞态和并发
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节将在上一节的基础上介绍支持多处理器和内核抢占的内核如何避免并发。除了内核抢占和中断外,由于多处理起的缘故,它可以做到多个程序同时执行。所以,进程除了要防自己的处理器外,还要防别的处理器,这个就是这节要介绍的内容。转载 2016-10-28 08:56:47 · 289 阅读 · 0 评论 -
linux设备驱动归纳总结(五):1.在内核空间分配内存
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx一般的,用户空间使用函数malloc在堆上分配内存空间,同样的,在内核空间同样有一套类似的函数来分配空间。下面的知识会涉及页式管理的内存机制,如果不懂的要先复习一下,在S3C2440数据手册的MMU部分有介绍。x转载 2016-10-28 08:58:30 · 278 阅读 · 0 评论 -
linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节的内容说不上是驱动,只是写个代码让触摸屏能够工作,随便介绍一下时钟子系统(我不知道这样叫合不合适),仅次而已。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-10-28 09:11:33 · 411 阅读 · 0 评论