深入浅出Linux设备驱动编程

上传人:工**** 文档编号:484933 上传时间:2017-03-13 格式:DOC 页数:62 大小:539.50KB
返回 下载 相关 举报
深入浅出Linux设备驱动编程_第1页
第1页 / 共62页
深入浅出Linux设备驱动编程_第2页
第2页 / 共62页
深入浅出Linux设备驱动编程_第3页
第3页 / 共62页
深入浅出Linux设备驱动编程_第4页
第4页 / 共62页
深入浅出Linux设备驱动编程_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《深入浅出Linux设备驱动编程》由会员分享,可在线阅读,更多相关《深入浅出Linux设备驱动编程(62页珍藏版)》请在金锄头文库上搜索。

1、1深入浅出 备驱动编程一引言 .核模块 .符设备驱动程序 .备驱动中的并发控制 .备的阻塞与非阻塞操作 .备驱动中的异步通知 .备驱动中的中断处理 .时器 .存与 I/O 操作 .构化设备驱动程序 .杂设备驱动 .言目前,件工程师大致可分为两个层次:(1)用软件工程师(主要利用 C 库函数和行应用软件的编写;(2)件工程师( 主要进行 移植及备驱动程序的设计。一般而言,固件工程师的要求要高于应用软件工程师的层次,而其中的 备驱动编程又是 序设计中比较复杂的部分,究其原因,主要包括如下几个方面:(1)设备驱动属于 核的部分,编写 备驱动需要有一定的 作系统内核基础;(2)编写 备驱动需要对硬件的

2、原理有相当的了解,大多数情况下我们是针对一个特定的嵌入式硬件平台编写驱动的; (3)备驱动中广泛涉及到多进程并发的同步、互斥等控制,容易出现 4)由于属于内核的一部分,备驱动的调试也相当复杂。目前,市面上的 备驱动程序参考书籍非常稀缺,少有的经典是由 区的三位领导者 写的(目前该书已经出版到第 3 版,中文译本由中国电力出版社出版) 。该书将备驱动编写技术进行了较系统的展现,但是该书所列举实例的背景过于复杂,使得读者需要将过多的精力投放于对例子背景的理解上,很难完全集中精力于 动程序本身。往往需要将此书翻来覆去地研读许多遍,才能有较深的体会。(英文版封面)本文将仍然秉承书以实例为主的风格,但是

3、实例的背景将非常简单,以求使读者能将集中精力于 备驱动本身,理解 核模块、备驱动中的并发控制等内容。另外,与不同的是,针对设备驱动的实例,本文还给出了用户态的程序来访问该设备,展现设备驱动的运行情况及用户态和内核态的交互。相信阅读完本文将为您领悟一书中的内容打下很好的基础。3本文中的例程除引用的以外皆由笔者亲自调试通过,主要基于的内核版本为 子要在其他内核上运行只需要做少量的修改。构建本文例程运行平台的一个较好方法是:在 台上安装 拟机,并在 拟机上安装 意安装的过程中应该选中 开发工具和内核开发 二项(如果本文的例程要在特定的嵌入式系统中运行,还应安装相应的交叉编译器,并包含相应的 代码),

4、如下图: 4二核模块备驱动属于内核的一部分,核的一个模块可以以两种方式被编译和加载:(1)直接编译进 核,随同 动时加载;(2)编译成一个可加载和删除的模块,使用 载( 令类似,但依赖于相关的配置文件),除。这种方式控制了内核的大小,而模块一旦被插入内核,它就和内核其他部分一样。下面我们给出一个内核模块的例子:#(; _n);_n);分析上述程序,发现一个 核模块需包含模块初始化和模块卸载函数,前者在时候运行,后者在 时候运行。初始化与卸载函数必须在宏 用前定义,否则会出现编译错误。程序中的 用于声明模块的许可证。如果要把上述程序编译为一个运行时加载和删除的模块,则编译命令为:I /,核模块的

5、编译需要给 示数。项跟着 核源代码中 录的路径。下列命令将可加载 块:核,则需要将源代码文件拷贝入 核源代码的相应路径里,并修改 们有必要补充一下 核编程的一些基本知识:内存在 核模式下,我们不能使用用户态的 和 函数申请和释放内存。进行内核编程时,最常用的内存申请和释放函数为在 件中声明的和 ,其原型为:_ 数通常设置为 果在中断服务程序里申请内存则要用 数,因为使用 数可能会引起睡眠,不能用于非进程上下文中(在中断中是不允许睡眠的)。由于内核态和用户态使用不同的内存定义,所以二者之间不能直接访问对方的内存。而应该使用 的用户和内核态内存交互函数(这些函数在 被声明):n); 数返回不能被复

6、制的字节数,因此,如果完全复制成功,返回值为 0。定义的 于内核空间和用户空间的单值交互(如 这里给出的仅仅是关于内核中内存管理的皮毛,关于 存管理的更多细节知识,我们会在本文第 9 节内存与 I/O 操作进行更加深入地介绍。输出在内核编程中,我们不能使用用户态 C 库函数中的 函数输出信息,而只能使用。但是,内核中 函数的设计目的并不是为了和用户交流,它实际上是内核的一种日志机制,用来记录下日志信息或者给出警告提示。每个 会有个优先级,内核一共有 8 个优先级,它们都有对应的宏定义。如果未指定优先级,内核会选择默认的优先级 果优先级数字比 量小的话,消息就会打印到控制台上。如果 6护进程在运行的话,则不管是否向控制台输出,消息都会被追加进/件。处理内核消息,理其他系统消息,比如应用程序。核下,定义的宏 用于向模块传递命令行参数。接受参数值的变量名,采取如下格式的字符串m

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > linux/Unix相关

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号