Linux 设备驱动
谁de如花
这个作者很懒,什么都没留下…
展开
-
Linux设备驱动一 (2)poll
poll函数原型: unsigned int(*poll)(struct file *filp, struct poll_table *wait); //第一个参数为file结构体指针,第二个参数为轮询表指针。 这个函数应该进行以下两项工作: 1)对可能引起设备文件状态变化的等待队列调用poll_wait()函数,将对应等原创 2016-12-27 16:50:00 · 441 阅读 · 0 评论 -
Linux设备驱动六 (1)等待队列
本文转自 reille博客: http://velep.com/archives/815.html等待队列在Linux内核中有着举足轻重的作用,很多linux驱动都或多或少涉及到了等待队列。因此,对于linux内核及驱动开发者来说,掌握等待队列是必须课之一。 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。它有两种数转载 2016-12-30 12:09:53 · 934 阅读 · 0 评论 -
Linux设备驱动五 (3)platform设备驱动
一、什么是paltform总线一个现实的linux设备和驱动通常都需要挂接在一种总线上,比较常见的总线有USB、PCI总线等。但是,在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设却不依附与此类总线。基于这样的背景下,2.6内核加入了platform虚拟总线。platform机制将设备本身的资源注册进内核,有内核统一管理,在驱动程序使用这些资源时转载 2016-12-29 21:08:02 · 634 阅读 · 0 评论 -
Linux设备驱动五 (2)设备模型的分层与面向对象
一、设备管理的分层回想一下之前的设备和驱动函数注册时,它们是自己指定所属的总线。但是,内核开发人员觉得,这样的方法不好,应该由总线来提供设备和驱动的注册函数。当设备和驱动需要注册到指定总线时,那就必须使用该总线为设备和驱动提供的注册函数。所以,将上一节的bus.c修改如下:/*8th_devModule_3/1st/bus.c*/21 /*总转载 2016-12-29 21:06:23 · 292 阅读 · 0 评论 -
Linux设备驱动五 (1)总线、设备和驱动
一、sysfs文件系统设备模型是2.6内核新引入的特征。设备模型提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构。在2.4内核中,设备的信息放在/proc中。而在2.6内核,内核把设备相关的信息归类在新增加sysfs文件系统,并将它挂载到/sys目录中,把设备信息归类的同时,让用户可以通过用户空间访问。接下来简单介绍一些sys中转载 2016-12-28 21:42:58 · 566 阅读 · 0 评论 -
Linux设备驱动四 (3)中断下半部分tasklet
先看一下如何使用tasklet,用完之后再看内核中是如何实现的:步骤一、编写tasklet处理函数,定义并初始化结构体tasklet_struct:内核中是通过tasklet_struct来维护一个tasklet,介绍一下tasklet_struct里面的两个成员:/*linux/interrupt.h*/319 struct tasklet_struct3转载 2016-12-28 14:58:35 · 441 阅读 · 0 评论 -
Linux设备驱动四 (4)中断下半部分工作队列
1、工作队列的使用按惯例,在介绍工作队列如何实现之前,先说说如何使用工作队列实现下半部。步骤一、定义并初始化工作队列:创建工作队列函数:struct workqueue_struct *create_workqueue(const char *name)函数传参是内核中工作队列的名称,返回值是workqueue_struc转载 2016-12-28 15:06:13 · 342 阅读 · 0 评论 -
Linux设备驱动四 (2)中断下半部分 软中断
二、软中断软中断一般很少用于实现下半部,但tasklet是通过软中断实现的,所以先介绍软中断。字面理解,软中断就是软件实现的异步中断,它的优先级比硬中断低,但比普通进程优先级高,同时,它和硬中断一样不能休眠。软中断是在编译时候静态分配的,要用软中断必须修改内核代码。在kernel/softirq.c中有这样的一个数组:51 sta转载 2016-12-28 14:59:34 · 799 阅读 · 0 评论 -
Linux设备驱动四 (1)中断上半部分
1、注册中断处理函数 int request_irq(unsigned int irq, irq_handler_t handler,unsigned long irqflags, const char *devname, void *dev_id) 使用:将中断号irq与中断处理函数handler对应 参数: irq转载 2016-12-28 14:52:32 · 357 阅读 · 0 评论 -
Linux设备驱动三 (1)自旋锁,信号量
2.12 自旋锁内核中是有很多的锁,自旋锁是其中的一种。它的作用在于,只要代码在进入临界区前加上锁,在进程还没出临界区之前,别的进程(包括自身处理器和别的处理器上的进程)都不能进入临界区。自旋锁的可以这样理解,每个进程进入上锁的临界区前,必须先获得锁,否则在获得锁这条代码上查询(注意,不是休眠,是忙等待,循环执行指令),知道临界区里面的进程走出临界区,别的进程获得锁后进入临界区。有且只有一转载 2016-12-28 11:35:07 · 405 阅读 · 0 评论 -
Linux设备驱动二 (5)单CPU下的竞态和并发
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx经过上面几节的铺垫,终于要来重点了,由于内核的进程调度和中断(中断还没讲,不过这里会大概的说说),它们都会进入内核共用内核的资源。所以,只要一不留神,自己进程的资源就会在不经意的情况下被别的进程修改了。这节将介绍并讨论如转载 2016-12-28 11:19:22 · 290 阅读 · 0 评论 -
Linux设备驱动二 (2)进程相关的概念
一、什么是进程简单的说,进程就是正在运行的程序,一个程序可以同时有多个进程。学过C语言都知道,程序运行时并不是只有代码,还包含其他的资源,如打开的文件,信号,全局变量等等。我在《操作系统原理》中看过一个很生动很深刻的例子:一个人对照着菜谱做菜。在这例子中,人就是内核,菜谱就是程序,做菜的过程就是进程,而菜、锅就是这个进程的资源。内核为线程提供了两种技术:虚拟处理器和虚拟转载 2016-12-28 11:11:41 · 300 阅读 · 0 评论 -
Linux设备驱动二 (3)进程调度相关概念
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx进程的调度就是指进程间的切换,进程调度的知识其实我也不太清除,我查找的资料有些说法并不一致,所以我只能说一下一些我的理解。如有错误或不足,望指正。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转载 2016-12-28 11:13:34 · 285 阅读 · 0 评论 -
Linux设备驱动二 (4)上下文切换和抢占
一、什么是上下文切换上下文切换,是指从一个可执行的进程切换到另外一个可执行的进程。在linux内核中,上下文的切换有两种方式:第一种是进程主动让出CPU,这样的操作成为“让步”。第二种是由内核调度程序决定进程运行时间,在在运行时间结束(如时间片耗尽)或者需要切换高优先级进程时强制挂起进程,这样的操作叫“抢占”。抢占是我一直误解的概念,我一直以为抢占是一个进程强制切换到另转载 2016-12-28 11:15:43 · 367 阅读 · 0 评论 -
Linux设备驱动二 (1)内核传参
module_param函数使用方法: 例:module_param(name, type, perm) name:内核参数的名称,自己定义; type:内核参数的类型,常见的类型byte、short、int、long、ulong、bool 、charp(字符指针); perm:内核参数的权限S_IRUGO(对模块参数具有读权原创 2016-12-28 11:03:21 · 314 阅读 · 0 评论 -
Linux设备驱动一 (3)异步通知
异步通知,就是让驱动去告诉应用,底层硬件发生了什么事,而不是应用主动地去查询驱动,这对系统的性能有一个很大的提升。 应用层次 1、要用fcntl对此文件进行设置, fcntl(fd, F_SETOWN, getpid()); 设置接收SIGIO信号的进程组 getpid()获取当前进程号 Oflags = fc原创 2016-12-27 22:35:58 · 333 阅读 · 0 评论 -
Linux设备驱动一 (1)阻塞型IO及非阻塞型IO
阻塞是指没有获得资源则挂起进程,直到获得资源为止。被挂起的进程进入休眠状态,被调度器的运行队列移走,直到等待条件被满足。非阻塞是不能进行设备操作时不挂起,或放弃,或反复查询,直到可以进行操作为止。驱动程序常需要这种能力:当应用程序进行read(),write()等系统调用时,若设备的资源不能获取,而用户又希望以阻塞的方式访问设备,驱动程序应该在设备驱动程序的xxx_read(), xxx_原创 2016-12-27 15:39:59 · 603 阅读 · 0 评论 -
为什么使用goto语句作错误处理 by明智
* *本文版权归于凌阳教育和本作者所有。如转载请注明 *原作者和原文链接 http://blog.csdn.NET/edudriver/article/details/20717629* *特此说明并保留对其追究法律责任的权利* */ 2月22日,苹果更新了iOS7.0.6,修复了一个bug,之后引起轩然大波,这个低级的bug会导致严重的安全问题.转载 2017-03-09 11:48:09 · 1152 阅读 · 0 评论