设备管理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设备文件与与普通文件的差异 设备文件没有象普通文件那样的文件实体, 设备文件没有象普通文件那样的文件实体,不在外存占据数据块 来存放数据 进程访问普通文件是读写磁盘分区中的数据, 进程访问普通文件是读写磁盘分区中的数据,访问设备文件是对 硬件设备进行读写, 硬件设备进行读写,完成设备与内存之间的数据传送
34
若major=0,由系统自动分配一个主设备号给驱动程序 由系统自动分配一个主设备号给驱动程序 即为主设备号, 若major!=0,major即为主设备号,但主设备号不能与系统中其它主 , 即为主设备号 设备号冲突。 设备号冲突。 使用注册函数可以变更设备名或驱动程序
chrdevs[major].name = name; chrdevs[major].fops = fops; return 0;
35
设备注销: 设备注销: 当设备需要撤销时,可以使用注销函数从设备注册表中删除。 当设备需要撤销时,可以使用注销函数从设备注册表中删除。
int unregister_chrdev(unsigned int major, const char * name)
36
if (!chrdevs[major].fops || strcmp(chrdevs[major].name, name)) { return -EINVAL; } chrdevs[major].name = NULL; chrdevs[major].fops = NULL;
19
设备管理
对于设备来说,只要它们使用得驱动程序一样, 对于设备来说,只要它们使用得驱动程序一样,那么它们的主设 备号就是一样的, 备号就是一样的,次设备号来区分使用同一个驱动程序的个体设 备。 主次设备号值都是从0~255 主次设备号值都是从
20
驱动是什么? 驱动是什么? 驱动与系统和应用程序之间有何关系? 驱动与系统和应用程序之间有何关系?
33
if (major == 0) { write_lock(&chrdevs_lock); for (major = MAX_CHRDEV-1; major > 0; major--) { if (chrdevs[major].fops == NULL) { chrdevs[major].name = name; chrdevs[major].fops = fops; write_unlock(&chrdevs_lock); return major; } } write_unlock(&chrdevs_lock); return -EBUSY; }
Linux 操作系统
1
设备管理
Linux设备分类与识别 设备分类与识别 设备驱动程序与设备注册 Linux的I/O控制 的 控制 Linux设备 操作 设备I/O操作 设备
2
设备管理功能
设备管理: 管理 负责管理设备和控制I/O传输操作 管理, 设备管理:I/O管理,负责管理设备和控制 传输操作 功能: 功能: 1 设备分配与回收 2 设备控制 3 设备状态跟踪
8
IDE的设备是以 命名,第一个 设备是hda,第二个是hdb... 的设备是以hd命名 第一个ide设备是 ,第二个是 的设备是以 命名 第一个 设备是 SCSI接口设备是用 命名 接口设备是用sd命名 接口设备是用
Ex:例如 例如hda1代表 代表hda这个硬盘设备上的第一个分区。每个硬盘可以最多有四个主 这个硬盘设备上的第一个分区。 例如 代表 这个硬盘设备上的第一个分区 分区,因此1-4命名硬盘的主分区 逻辑分区是从5开始的 每多一个分区, 命名硬盘的主分区。 开始的, 分区,因此 命名硬盘的主分区。逻辑分区是从 开始的,每多一个分区,数字 就可以。 加1就可以。 就可以
7
设备管理
Linux的设备文件一般置于 的设备文件一般置于/dev目录下 目录下 的设备文件一般置于 设备文件名由两个部分组成,第一部分2~3个字符,表示设备的种 设备文件名由两个部分组成,第一部分 个字符, 个字符 类;第二部分通常是字母或数字,区分同种设备中的单个设备 第二部分通常是字母或数字,
15
/dev/fd0 /dev/fd0.18 /dev/fd0h /dev/fd0l /dev/rfd0 /dev/rfd0.18 /dev/rfd0h /dev/rfd0l 以上所有的逻辑设备全部对应于同一个物理设备(软盘驱动器 。 以上所有的逻辑设备全部对应于同一个物理设备 软盘驱动器)。此 软盘驱动器 系统中有一些逻辑设备只是一些虚拟设备, 外,系统中有一些逻辑设备只是一些虚拟设备,它们不对于任何 实际的物理设备,例如/dev/error和 /dev/null。 实际的物理设备,例如 和 。
16
设备独立性
例如系统拥有A、 两台卡片输入机 现有作业J2申请一台卡 两台卡片输入机, 例如系统拥有 、B两台卡片输入机,现有作业 申请一台卡 片输入机,如果它指定使用A,那么作业J1已经占用 或者设备A 已经占用A或者设备 片输入机,如果它指定使用 ,那么作业 已经占用 或者设备Βιβλιοθήκη Baidu坏了,虽然系统还有同类设备B是好的且未被占用 是好的且未被占用, 坏了,虽然系统还有同类设备 是好的且未被占用,但也不能接受 作业J2,显然这样做很不合理。 作业 ,显然这样做很不合理。 为了解决这一问题,通常用户不指定特定的设备, 为了解决这一问题,通常用户不指定特定的设备,而指定逻辑 设备,使得用户作业和物理设备独立开来, 设备,使得用户作业和物理设备独立开来,再通过其它途径建立 逻辑设备和物理设备之间的对应关系,我们称这种特性为“ 逻辑设备和物理设备之间的对应关系,我们称这种特性为“设备 独立性” 独立性”。设备管理的功能之一就是把逻辑设备名转换成物理设 备名
32
设备管理
设备注册函数 设备注册的过程实际上是构建结构体device_struct的过程:向设 的过程: 设备注册的过程实际上是构建结构体 的过程 备注册表写入设备名,以及file_operations结构。 结构。 备注册表写入设备名,以及 结构 设备注册是通过系统调用实现的
int register_chrdev(unsigned int major, const char * name, struct file_operations *fops)
17
设备控制块dcb 设备控制块 记录设备硬件特性、 记录设备硬件特性、链接和使用情况的数据结构 与PCB联系起来 联系起来
18
设备管理
Linux设备的识别 设备的识别 Linux内核对设备的识别是通过 内核对设备的识别是通过 设备类型+设备号 主 次设备号) 设备类型 设备号(主、次设备号 设备号 设备类型指字符设备还是块设备 设备号是系统内部识别设备的标识 使用同一个驱动程序的每种设备有一个唯一的主设备号 除主设备号外还使用次设备号来区分同种设备中的各个具体设备
24
设备管理
把数据从内存传送到设备 检测设备状态 驱动程序由内核统一管理, 驱动程序由内核统一管理,处于内核态
25
设备管理
file_operations结构 结构 文件操作函数指针的集合,在设备管理中, 文件操作函数指针的集合,在设备管理中,该结构体各个成员项 指向的操作函数就是设备驱动程序的各个操作例程。 指向的操作函数就是设备驱动程序的各个操作例程。 编制设备驱动程序的工作就是使用汇编或c语言编写控制设备完成 编制设备驱动程序的工作就是使用汇编或 语言编写控制设备完成 各种操作的例程, 各种操作的例程,然后把这些操作例程的入口地址赋予 file_operations结构体的有关成员项即可。 结构体的有关成员项即可。 结构体的有关成员项即可
29
30
设备管理
字符设备注册表
file_operations name fops lseek read write readdir … … 驱动程序 read write
31
设备管理
**: 设备注册表的下标是某种设备的主设备号。 设备注册表的下标是某种设备的主设备号。使用主设备号作为索引 就可以从设备注册表得到这种设备的驱动程序。 就可以从设备注册表得到这种设备的驱动程序。
3
设备管理
Linux设备的分类 设备的分类 字符设备 块设备 网络设备
4
设备管理
字符设备 以字符为单位输入输出数据的设备, 以字符为单位输入输出数据的设备,并且以字符为单位对设备中 的信息进行组织和处理。显示器、 的信息进行组织和处理。显示器、键盘等 块设备 以一定大小的数据块为单位输入输出数据, 以一定大小的数据块为单位输入输出数据,并且设备中的数据也 是以物理块为单位进行组织和管理的。硬盘、软盘、光盘等。 是以物理块为单位进行组织和管理的。硬盘、软盘、光盘等。
14
设备独立性
多道系统用户进程不能直接访问物理设备, 多道系统用户进程不能直接访问物理设备,为此系统提供了物理 设备的逻辑名。 设备的逻辑名。 逻辑设备名:面向用户的,用户在需要使用设备时, 逻辑设备名:面向用户的,用户在需要使用设备时,使用逻辑设 备名(设备类型)向系统提出使用资源的请求。 备名(设备类型)向系统提出使用资源的请求。 物理设备名: 物理设备名:物理设备是指以某种方式与计算机系统相连的实际 硬件。例如显示器、终端、磁带机等。。 硬件。例如显示器、终端、磁带机等。。
9
盘符 C:
名称 Hda1
D:
hda5
E:
hda6
F:
hda7
10
设备管理
设备文件 /dev/fd0
说明
软盘设备
/dev/console
控制台设备
/dev/ttys0
第一个串口设备
/dev/null
“黑洞”设备 黑洞”
11
设备管理 ls –l /dev
12
设备文件inode 设备文件
13
设备管理
21
引例
fd = open("/dev/v4l/video0",O_WRONLY) read(fd,buf,number);
问题: 问题: /dev/v4l/video0 ??
read 从哪读? 从哪读?
22
设备管理
23
设备管理
设备驱动程序 控制设备的硬件完成指定的I/O操作, 控制设备的硬件完成指定的 操作,设备驱动程序直接和硬件设 操作 备打交道。 备打交道。 设备驱动程序包括对设备的各种操作,在操作系统的控制下, 设备驱动程序包括对设备的各种操作,在操作系统的控制下, cpu通过执行驱动程序来实现对设备底层硬件设备的处理和操作。 通过执行驱动程序来实现对设备底层硬件设备的处理和操作。 通过执行驱动程序来实现对设备底层硬件设备的处理和操作 Linux设备驱动程序的主要功能是: 设备驱动程序的主要功能是: 设备驱动程序的主要功能是 对设备进行初始化 启动、 启动、停止设备的运行 把设备上的数据传到内存
26
struct file_operations test_fops={ read:read_test, write:write_test, open:open_test, release:release_test, ioctl:ioctl_test };
27
设备管理
设备注册 设备的驱动程序是系统在启动时装载到系统中的。对于“ 设备的驱动程序是系统在启动时装载到系统中的。对于“即装即 设备,驱动程序作为程序模块可以随时加载到系统中, 用”设备,驱动程序作为程序模块可以随时加载到系统中,驱动 程序加载到系统中是通过设备注册实现的。 程序加载到系统中是通过设备注册实现的。 设备注册表 字符设备注册表 块设备注册表
28
设备管理
字符设备注册表定义: 字符设备注册表定义:
static struct device_struct chrdevs[MAX_CHRDEV];
struct device_struct { const char * name; struct file_operations * fops; };
5
设备管理
网络设备 通过网络与外部近程或远程计算机进行通信的设备。 通过网络与外部近程或远程计算机进行通信的设备。网卡
6
设备管理
设备文件 linux设备管理的特点 设备管理的特点 物理设备抽像化,把物理设备看成文件, 物理设备抽像化,把物理设备看成文件,采用文件系统的接口和 系统调用来管理和控制设备。 系统调用来管理和控制设备。 设备读:从设备向内存输入数据 设备读: 设备写: 设备写:数据从内存输出到设备 Linux设备就是一种特殊文件,称为设备文件 设备就是一种特殊文件, 设备就是一种特殊文件