LINUX设备驱动程序笔记(一)设备驱动程序简介

<一>:设备驱动程序的作用

从一个角度看,设备驱动程序的作用在于提供机制,而不是策略。在编写驱动程序时,程序员应该特别注意下面这个基本概念:编写访问硬件的内核代码时,不要给用户强加任何特定策略。因为不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用程序。

从另一个角度来看驱动程序,它还可以看作是应用程序和实际设备之间的一个软件层。

总的来说,驱动程序设计主要还是综合考虑下面三个方面的因素:提供给用户尽量多的选项、编写驱动程序要占用的时间以及尽量保持程序简单而不至于错误丛生。

<二>:内核功能划分

Unix系统支持多进程并发运行,每个进程都请求系统资源。内核负责处理所有这些请求,根据内核完成任务的不同,可将内核功能分为如下几部分:

1.进程管理:负责创建和销魂进程,并处理它们和外部世界之间的连接。内核进程管理活动就是在单个或多个CPU上实现了多个进程的抽象。

2.内存管理:内存是计算机的主要资源之一,用来管理内存的策略是决定系统系能的一个关键因素。

3.文件系统:内核在没有结构的硬件上构造结构化的文件系统,而文件抽象在整个系统中广泛使用。

4.设备控制:几乎每一个系统操作最终都会映射到物理设备上。

5.网络功能:网络功能也必须由操作系统来管理,系统负责在应用程序和网络接口之间传递数据包,并根据网络活动控制程序的执行。另外,所有的路由和地址解析问题都由内核处理。

可装载模块:Linux有一个很好的特性:内核提供的特性可在运行时进行扩展。可在运行时添加到内核的代码被称为“模块”。Linux内核支持几种模块类型,包括但不限于设备驱动程序。每个模块由目标代码组成,可以使用insmod程序将模块连接到正在运行的内核,也可以使用rmmod程序移除连接。

<三>:设备和模块的分类

Linux系统将设备分成三个基本类型:字符设备、块设备、网络接口。

1.字符设备:字符设备驱动程序通常至少要实现open、close、read和write系统调用。字符设备可以通过文件系统节点来访问。这些设备文件和普通文件之间的唯一差别在于对普通文件的访问可以前后移动访问位置,而大多数字符设备是一个只能顺序访问的数据通道。

2.块设备:和字符设备类似,块设备也是通过/dev目录下的文件系统节点来访问。块设备上能够容纳文件系统。块设备和字符设备的区别仅仅在于内核内部管理数据的方式,也就是内核及驱动程序之间的软件接口,而这些不同对用户来讲是透明的。在内核中,和字符驱动程序相比,块驱动程序具有完全不同的接口。

3.网络接口:网络接口由内核中的网络子系统驱动,负责发送和接受数据包,但它不需要了解每项事务如何映射到实际传送的数据包。网络驱动程序不需要知道各个连接的相关信息,它只要处理数据包即可。内核和网络设备驱动程序间的通信,完全不同于内核和字符以及块驱动程序之间的通信,内核调用一套和数据包传输相关的函数而不是read、write等。

除了设备驱动程序之外,内核中其他一些功能也都模块化了,如文件系统。一个文件系统类型决定了如何在块设备上组织数据,以表示目录和文件形成的树。文件系统并不是设备驱动程序,因为没有任何实际物理设备同这种信息组织方式相关联。相反,文件系统类型是个软件驱动程序,它将底层数据结构映射到高层数据结构,决定文件名可以多长以及在目录项中存储文件的哪些信息等。

<四>:安全问题

1.系统中的所有安全检查都是由内核代码进行的,如果内核有安全漏洞,则整个系统就会有安全漏洞。运行正式发布的内核时,只有超级用户或成为超级用户的入侵者才能使用特权代码。

2.驱动程序编写者应当尽量避免在代码中实现安全策略。安全策略问题最好在系统管理员的控制之下,在内核的高层来实现。驱动程序编写者还应当避免由于自身原因引入安全方面的缺陷。

3.任何从用户进程得到的输入只有经过内核严格验证后才能使用。还要小心对待未初始化的内存:任何从内核中得到的内存,都必须在提供给用户进程或者设备之前清零或者以其他方式初始化,否则就可能发生信息泄露。

4.应当小心使用从第三方获得的软件,特别是与内核相关时更是如此,这是因为源代码是开放的,每个人都可以修改和重新编译它。

5.Linux内核也可编译为不支持模块方式,从而可以关闭任何模块相关的安全漏洞。可以通过权能机制禁止在系统启动后转载内核模块。

<五>:版本编号

1.首先,Linux系统中的每个软件包都有自己的发行编号,而且它们之间经常存在相互间的依赖关系。现在几乎所有的发行版都带有包管理器,它在验证满足包之间的依赖关系后才允许升级包。遇到任何版本相关的问题时,可参考内核源文件Documentation/Changes来解决。

2.对内核来讲,偶数编号的内核版本是用于正式发行的稳定版本,而奇数编号的版本则

是开发过程中的一个快照。

<六>:许可证条款

Linux遵循GNU通用的公共许可证(GPL),GPL允许任何人重新发布甚至销售由GPL条款保护的产品,前提是产品接受者能够获得源码并拥有同样的权利。如果想阅读这个许可证原文,可以在系统的内核源码树顶层目录中的COPYING文件中找到它。

LINUX设备驱动程序笔记(一)设备驱动程序简介,布布扣,bubuko.com

时间: 2024-10-18 17:50:21

LINUX设备驱动程序笔记(一)设备驱动程序简介的相关文章

LINUX设备驱动程序笔记(二)构造和运行模块

         <一>:设置测试系统 首先准备好一个内核源码树,构造一个新内核,然后安装到自己的系统中.           <二>:HelloWorld模块 #include <linux/init.h> //定义了驱动的初始化和退出相关的函数 #include <linux/module.h> //定义了内核模块相关的函数.变量及宏 MODULE_LICENSE("Dual BSD/GPL"); //该宏告诉内核,该模块采用自由许可

LINUX设备驱动程序笔记(三)字符设备驱动程序

      <一>.主设备号和次设备号        对字符设备的访问时通过文件系统内的设备名称进行的.那些设备名称简单称之为文件系统树的节点,它们通常位于/dev目录.字符设备驱动程序的设备文件可通过ls -l命令输出的第一列中的'c'来识别.块设备同样位于/dev下,由字符'b'标识 crw-rw----  1 root root    253,   0 2013-09-11 20:33 usbmon0 crw-rw----  1 root root    253,   1 2013-09

LINUX设备驱动程序笔记(四)并发和竞态

       <一>.并发及其管理 大部分竞态可通过使用内核的并发控制原语,并应用几个基本的原理来避免.第一个规则是,只要可能,就应该避免资源的共享,这种思想的明显应用就是避免使用全局变量.但硬件资源本质上就是共享的,软件资源经常需要对其他执行线程可用.全局变量并不是共享数据的唯一途径,只要我们的代码将一个指针传递给了内核的其他部分,一个新的共享就可能建立.在单个执行线程之外共享硬件或软件资源的任何时候,因为另外一个线程可能产生对该资源的不一致观察,因此必须显示地管理对该资源的访问.访问管理的

LINUX设备驱动程序笔记(五)中断处理

     <一> 中断处理流程如下: 1.发生中断时,CPU执行异常向量vector_irq的代码. 2.在vector_irq里面,最终会调用中断处理的总入口函数asm_do_IRQ. 3.asm_do_IRQ根据中断号调用irq_desc数组项中的handle_irq. 4.hadnle_irq会使用chip成员中的函数来设置硬件,比如清除中断.禁止中断.重新使能中断等. 5.handle_irq逐个调用用户在action链表中注册的处理函数.       <二>安装中断处理例

LINUX设备驱动程序笔记(一)设备驱动程序简单介绍

<一>:设备驱动程序的作用 从一个角度看,设备驱动程序的作用在于提供机制,而不是策略. 在编写驱动程序时,程序猿应该特别注意以下这个基本概念:编写訪问硬件的内核代码时,不要给用户强加不论什么特定策略.由于不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题.而将如何使用硬件的问题留给上层应用程序. 从还有一个角度来看驱动程序.它还能够看作是应用程序和实际设备之间的一个软件层. 总的来说,驱动程序设计主要还是综合考虑以下三个方面的因素:提供给用户尽量多的选项.编写驱动程序要占用的时间以及

linux驱动开发之块设备学习笔记

学习参考:http://www.cnblogs.com/yuanfang/archive/2010/12/24/1916231.html 1.块设备 块设备将数据按照固定块大小的块中,每个块的大小通常在512字节到32768字节之间,磁盘.SD卡都是常见的块设备. 2.字符设备和块设备的区别: 字符设备 块设备 ---------------------------------------------- 按字节访问 按块进行访问 只能按照数据流访问 随机访问 直接访问设备 挂在文件系统的方式访问

块设备驱动之NAND FLASH驱动程序

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/25240909 一.框架总结 二.硬件原理 相比于nor flash,我们可以清楚的看出引脚少了很多,主要是输入输出引脚进行了复用.现在我说下各引脚的用途. a.LDATA0~LDATA7这8个引脚为输入输出引脚.命令.地址.数据的传输都是由这8个引脚实现的(引脚复用,节约引脚). b.RnB:此引脚用来判忙.因为命令.数据.地址发出去和收到时候不能立刻就完成,需要一个时间.此

删除DriverStore\FileRepository文件夹后,设备驱动无法安装,提示“没有为设备信息集或元素选择驱动程序(代码 28)”的解决办法

前言: 我前几天手贱,整个FileRepository删除掉了,之后重启就出现了让人蛋疼的这个问题,因为出于各种原因不想重装系统,百度轮番换搜索词无果,虽然驱动装上了但新设备依然无法自动安装驱动等"一堆瑕疵",重启无数次折腾3天之后才在百度一个帖子的一个字眼里发现了解决办法(说此方法的人自己说删了INFCACHE.1后也无效,所以没有引起注意),也因此有了这个随笔: 1.首先你要恢复FileRepository文件夹,至于方法嘛,可以下载完整的WIN7系统镜像后提取出来,如果是原版则用

linux命令学习笔记——losetup命令:设置循环设备

losetup命令:设置循环设备 循环设备可以把文件虚拟成块设备(block device),以便模拟整个文件系统,这样用户可以将其看作是硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用. 比较常用的是将.iso文件当作循环设备加载并访问. 1.命令参数 losetup:设定与控制循环(loop)设备. 语法: losetup 循环设备 参数: 循环设备可以是/dev/loop0, /dev/loop1 ... /dev/loop7 -a 显示所有循环设备的状态. -d 卸除设备 -e <加密