如何编写 Linux 操作系统的设备驱动程序
序言
Linux 是 Unix 操作系统的一种变种,在 Linux 下编写驱动程序的原 和思
想完全类似于其他的Unix 系统,但它 dos 或 window 环境下的驱动程序有很大
的区别 。在 Linux 环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是
支持函数少,只能依赖 kernel 中的函数,有些常用的操作要 自己来编写,而且调
试也不方便 。本人这几周来为实验室 自行研制的一块多媒体卡编制了驱动程序,
获得了一些经验,愿 Linux fans 共享,有不当之处,请予指正 。
以下的一些文字主要来源于 khg,johnsonm 的Write linux device
driver,Brennans Guide to Inline Assembly,The Linux A-Z,还有清华 BBS 上
的有关 device driver 的一些资料 。 这些资料有的已经过时,有的还有一些错误,
我依据 自己的试验结果进行了修正 。
一 Linux device driver 的概念
系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系
统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这
样在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文
件一样对硬件设备进行操作 。设备驱动程序是内核的一部分,它完成以下的功能:
1 对设备初始化和释放 。
2 把数据从内核传送到硬件和从硬件读取数据 。
3 读取应用程序传送给设备文件的数据和回送应用程序请求的数据 。
4 检测和处 设备出现的错误 。
在 Linux 操作系统下有两类主要的设备文件类型,一种是字符设备,另一种
是块设备 。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实
际的硬件 I/O 一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲
区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就
调用请求函数来进行实际的I/O 操作 。块设备是主要针对磁盘等慢速设备设计
的,以免耗费过多的CPU 时间来等待 。
已经提到,用户进程是通过设备文件来与实际的硬件打交道。每个设备文件
都都有其文件属性(c/b),表示是字符设备还蔤强樯璞?另外每个文件都有两个
设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个
设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他
们。设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,
则用户进程将无法访问到驱动程序 。
最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再
是抢先式调度。也就是说,系统必须在你的驱动程序的子函数返回后才能进行其
他的工作 。如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然
后就是漫长的fsck 。//hehe
二 实例剖析
我们来写一个最简单的字符设备驱动程序 。虽然它什么也不做,但是通过它
可以了解Linux 的设备驱动程序的工作原 。把下面的C 代码输入机器,你就会
获得一个真正的设备驱动程序 。不过我的kernel 是 2 。0。34,在低版本的kernel
上可能会出现问题,我还没测试过 。//xixi
#define __NO_VERSION__
#include
#include
char kernel_version [] = UTS_RELEASE;
这一段定义了一些版本信息,虽然用处不是很大,但也必不可少 。Johnsonm
说所有的驱动程序的开头都要包含,但我看倒是未必。由于用户进程是通过设备
文件同硬件打交道,对设备文件的操作方式不外乎就是一些系统调用,如
open,read,write,close。。。 。, 注意,不是 fopen, fread 。,但是如何把系统调用和
驱动程序关联起来呢?这需要了解一个非常关键的数据结构:
struct file_operations {
int (*seek) (struct inode * ,
您可能关注的文档
- 单螺杆泵配件型号参数价格及结构图.pdf
- GX Developer 编程软件使用说明.pdf
- 利勃海尔100吨吊车说明书.pdf
- 几个涉及参数的分式不等式.pdf
- PID参数先进整定方法综述.pdf
- 制度是如何思维的.pdf
- 上海家化2013校园招聘求职大礼包.pdf
- 焦点教育出品SAT数学公式.pdf
- 说明书TPC7062硬件使用手册.pdf
- 广州美颜谷生物科技生产设施.pdf
- 4.12给蜗牛建个小小的家(教学课件)科学冀人版一年级下册2026.ppt
- Unit 3 Time for School 第2课时教学评教学设计 2026人教版英语四年级下册.pdf
- 6.1《公有制为主体、多种所有制经济共同发展》教学课件 2026道德与法治八年级下册.ppt
- Unit 3 Everyone's got talent第3课时 Speed up (分层作业)英语外研版四年级下册2026.pdf
- Unit 5 Farms and us 第5课时表格式教学评教学设计 2026人教版英语四年级下册.pdf
- 6.3 东北地区的产业布局 课件 2026年春湘教版地理八年级下册.ppt
- 10.2“中华水塔”三江源地区课件2026度人教版地理八年级下册.ppt
- Unit 1 Class rules第4课时教学评教学设计 2026人教版英语四年级下册.pdf
- Unit 1 Class rules第2课时教学评教学设计 2026人教版英语四年级下册.pdf
- Unit 5 Farms and us 第4课时表格式教学评教学设计 2026人教版英语四年级下册.pdf
最近下载
- 《阿尔茨海默病及相关痴呆的营养预防和干预专家共识(2025)》解读PPT课件.pptx VIP
- 关于高校基层党组织机构优化设置的探讨.doc VIP
- 2025江苏医药职业学院单招《英语》真题附参考答案详解【精练】.docx VIP
- 第一单元第一课《领略丝路遗珍》课件2025-2026学年人美版初中美术八年级下册.pptx VIP
- 岩土工程勘察收费标准(完整版).docx VIP
- 2025四川省中职学生单招考试英语答案 .pdf VIP
- 快消年度工作总结.pptx VIP
- 慢性肾脏病相关瘙痒管理中国专家共识解读(PPT课件.pptx VIP
- 企业所得税年度纳税申报表A类.pdf VIP
- 2022高二英语人教版新教材选择性必修三课文及翻译(英汉对照).pdf VIP
原创力文档

文档评论(0)