- 5
- 0
- 约1.68万字
- 约 19页
- 2017-02-07 发布于重庆
- 举报
linux设备驱动程序之字符设备驱动
linux设备驱动程序之字符设备驱动
一、linux系统将设备分为3类:字符设备、块设备、网络设备
字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的符设备有鼠标、键盘、串口、LED设备等。字符设备的上层没有文件系统,其中file_oprations是字符设备驱动的核心。2、块设备:是指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等。块设备的上层有磁盘文件系统(如ext2、jffs2、fat等),这些文件系统对实现对VFS的file_oprations的成员函数,块设备驱动层看不到file_oprations的存在,磁盘文件系统和设备驱动会将对磁盘上的文件的访问最终转换为对磁盘上柱面和扇区的访问。
每一个字符设备或块设备都在/dev目录下对应一个设备文件(或称设备节点)。Linux用户程序通过设备文件来使用驱动程序操作字符设备或块设备。
字符设备驱动程序基础:1、主设备号和次设备号(二者一起为设备号): 一个字符设备或块设备都有一个主设备号和一个次设备号。主设备号是与驱动对应的概念,用来反映设备类型,同一类设备一般使用相同的主设备号(也不排除在同一主设备号下包含一定差异的设备,因为同一驱动可以支持多个同类设备)。次设备号用来区分同类型的设备,用来描述使用该驱动的设备的序号(一般从0开始),即驱动程序利用次设备号来辨别操作的是哪个设备。可利用cat /proc/devices查看申请到的设备号。 Linux内核中,设备号用dev_t来描述,2.6.28中定义如下: typedef u_long dev_t; // 在32位机中是4个字节,高12位表示主设 备号,低12位表示次设备号。 可以使用下列宏从dev_t中获得主次设备号:
MAJOR(dev_t dev); MINOR(dev_t dev); 也可以使用下列宏通过主次设备号生成设备号dev_t:?
MKDEV(int major,int minor);
// 宏定义:#define MINORBITS 20#define MINORMASK ((1U MINORBITS) - 1)#define MAJOR(dev) ((unsigned int) ((dev) MINORBITS))#define MINOR(dev) ((unsigned int) ((dev) MINORMASK))#define MKDEV(ma,mi) (((ma) MINORBITS) | (mi))
分配设备号(两种方法):
(1)静态申请:int register_chrdev_region(dev_t from, unsigned count, const char *name);View Code
/** * register_chrdev_region() - register a range of device numbers * @from: the first in the desired range of device numbers; must include * the major number. * @count: the number of consecutive device numbers required * @name: the name of the device or driver. * Return value is zero on success, a negative error code on failure. */
(2)动态分配:
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name);/*
* alloc_chrdev_region() - register a range of char device numbers * @dev: output parameter for first assigned number * @baseminor: first of the requested range of minor numbers * @count: the number of minor numbers required * @name: the name of the associated device or drive
您可能关注的文档
- isis元件-符号-对照表.doc
- ISO90012015转版考试题及答案.doc
- IT项目管理论文.doc
- IT系统机房搬迁服务方案.doc
- IOS打包注意事项和说明.docx
- J2EE期末练习题.doc
- java_程序设计模式之工厂模式《程序设计模式》结课论文.doc
- JAVA复习知识点.doc
- Java多线程19定时器Timer.doc
- JAVA实训报告.doc
- 2025年版汽车趋势报告 The 2025 EPA Automotive Trends Report.docx
- 2026年边缘计算开源平台EdgeX Foundry入门与二次开发.docx
- 2026年超声内镜放大内镜早癌诊断AI辅助识别系统临床评价.docx
- 2026年报废汽车回收与再制造逆向物流体系.docx
- 2026年产品碳足迹核算方法学:从摇篮到大门与从摇篮到坟墓.docx
- 2026年城乡要素平等交换双向流动政策创新试点申报材料.docx
- 2026年超导半导体接口电路架构与电平转换驱动器设计.docx
- 2026年财政贴息不再以再贷款支持为前提后的风险防范与合规要点.docx
- 2026年不动产信托登记试点政策对遗嘱信托支持.docx
- 2026年城乡有机废弃物协同处理技术方案.docx
最近下载
- 2025年唐山市路北区辅警(协警)招聘考试题库附答案解析.docx VIP
- 《4.2 大学之道》教案、导学案、同步练习(附教学设计).docx
- Unit 6 Birthdays Lesson 1(课件)-三年级英语上学期(人教新起点版).pptx VIP
- 初一初中语文现代文阅读理解专题训练含答案(完整打印版).pdf VIP
- Q321183 JH005-2020 JH先张法预应力超高强混凝土管桩.pdf VIP
- 2025年锦州师范高等专科学校单招职业适应性考试题库及答案参考.docx
- 年产300吨猕猴桃果酒的工厂设计.docx VIP
- 2024年广东省航道事务中心所属事业单位招聘考试真题.pdf VIP
- 点到为止、不得罪人的简短生活会相互批评意见100条.docx VIP
- 2025年演出经纪人紧急事件处理中的团队沟通与决策专题试卷及解析.pdf VIP
原创力文档

文档评论(0)