- 11
- 0
- 约1.61万字
- 约 24页
- 2018-01-08 发布于江西
- 举报
Linux及Linux设备驱动程序设计.doc
目 录
正文 1
1. 主要功能 1
2. 功能模块 1
2.1. 字符设备驱动程序的基本数据结构 2
2.1.1. file_operations结构 2
2.1.2. inode结构 3
2.1.3. file结构 3
2.2. 字符设备驱动程序的初始化和清除函数 4
2.2.1. 初始化函数scull_init( )的实现 4
2.2.2. 清除函数scull_exit( )的实现 4
2.3. 字符设备驱动程序的入口点 5
2.3.1. open( )操作的实现 5
2.3.2. release( )操作的实现 6
2.3.3. read( )操作的实现 6
2.3.4. write( )操作的实现 6
2.3.5. llseek( )操作的实现 7
2.4. 设备驱动程序的编译、装卸和卸载 7
设备驱动程序的编译方式 7
2.4.1. 设备驱动模块的编译 7
2.4.2. 设备驱动模块的装载 8
2.4.3. 设备驱动模块的卸载 9
3. 程序流程图 10
4. 程序调试 11
4.1. 用vi编辑器编写程序 11
4.2. 头文件无法找到 12
4.3. 程序运行结果 13
5. 总结 13
6. 附录: 14
1.主要功能
因为Linux系统将所有的外围设备都高度抽象成一些字节序列,并且以文件形式来表示这些设备。所以Linux设备驱动程序被集成在内核中,构成了处理或操作硬件控制器的软件模块。在实际处理中,将驱动程序作为常驻内存的低级硬件处理程序共享库,设备驱动程序形成了对设备的抽象处理。也就是说,设备驱动程序是内核中具有高特权级的、常驻内存的、可共享的下层硬件处理例程。
我们知道,仅仅瘵物理设备与计算机系统简单相连,并不能使外部设备为用户提供各种所需要的操作,在系统中还须为各种设备配备相应的动作程序。除了CPU、内存和少数几个设备外,在程序执行中几乎所有的系统操作最终都要映射到一个物理设备上,对设备的控制操作通常由该设备的特殊可执行代码实现,这些代码就是设备驱动程序。通俗地讲,驱动程序是用来控制计算机外围设备的程序。
Linux设备驱动程序中包含了如何控制这些设备的技术细节,并通过特定的接口导出一个规范的操作集合,内核模块使用规范的设备接口(即字符设备接口和块设备接口),通过文件系统接口把设备操作导出到用户程序中。
2.功能模块
设备驱动程序是一些函数和数据结构的集合,这些函数和数据结构是用于实现管理设备的一个简单接口。操作系统内核使用这个接口来请求驱动程序对设备进行I/O操作,甚至,我们可以把设备驱动程序看成一个抽象数据模型,它为计算机中的每个硬件设备都建立了一个通用函数接口。由于一个设备驱动程序就是一个模块,所以在内核内部用一个file结构来识别设备驱动程序,而且内核使用file_operations结构来访问设备驱动程序,需要理解代码的如下几个部分:
驱动程序的注册与注销。
设备的打开与释放。
设备的读写操作。
设备的控制操作。
设备的中断和轮询处理。
根据几个部分的代码的划分将设备驱动程序模块划分成几个模块:如图2-1所示。
图2-1 程序模块划分图
2.1. 字符设备驱动程序的基本数据结构
2.1.1. file_operations结构
在linux系统中,设备驱动程序所提供的一组入口点用一个结构向系统进行说明,此结构定义为:
#includelinux/fs.h
struct file_operations{
loff_t (*llseek)(struct flie*,loff_t.,int);
ssize_t (*read)(struct file*,char*,size_t,loff_t*);
ssize_t (*write)(struct file*,const char*,size_t,loff_t*);
int (*ioct)(struct inode*,struct file*,unsigned int,unsigned int,unsigned long);
int (*open)(struct inode*,struct file*);
int (*release)(struct inode*,struct file*);
};
这里只列出scull代码中实现的一些字段,事实上,该结构的规模随着Linux内核的更新将会不断扩大。
这个结构中的每一个成员名字都对应着一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是Linux设备驱动程序的基本工作原理。既然是这样,编写设备驱动程序的主要工作
您可能关注的文档
- 0902第二章-构建多元化Linux编程环境.doc
- 0906第六章Linux的文件系统设计与编程实现.doc
- 1-构建嵌入式Linux开发环境.doc
- 2015级《程序设计基础实习》报告模板.docx
- arm+linux开发平台软件需求规格说明书.doc
- linux-2.6.39-(Fedro)系统定制和安装.doc
- Linux-C程序设计大全-目录.doc
- Linux-下简易同学录文档.doc
- linux-程序设计上机实习报告.doc
- Linux-课程设计.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 时速160公里动力集中动车组动力车(177页).pptx VIP
- 全国李氏家族字辈.pdf VIP
- 2025储能场站运营的价值定位、运营模式和收益示例-202508v3.pdf VIP
- 小学科学《斜面》优质课件.docx VIP
- 串联型感应加热电源的自动负载匹配技术.pdf VIP
- 2025年新课标《义务教育数学课程标准(2022年版)》测试题及答案.docx VIP
- 老年人谵妄中西医结合诊疗专家共识.pdf VIP
- 膨胀土基坑复合土钉墙试验研究.pdf VIP
- 2021年江苏省无锡市天一高级中学高二物理下学期期末试卷含解析.docx VIP
- 《贵州省公路工程施工监理电子招标文件示范文本(试行)》2025.docx VIP
原创力文档

文档评论(0)