Linux中设备文件管理硬件设备简介
设备管理是操作系统五大管理中最复杂的部分。与Unix系统一样,Linux系统采用设备文件统一管理硬件设备,从而将硬件设备的特性及管理细节对用户隐藏起来,实现用户程序与设备无关性。在Linux系统中,硬件设备分为两种,即块设备和字符设备。
1 特别文件
用户是通过文件系统与设备接口的,所有设备都作为特别文件,从而在管理上就具有一些共性。
(1)每个设备都对应文件系统中的一个索引节点,都有一个文件名。设备的文件名一般由两部分构成,第一部分是主设备号,第二部分是次设备号。
主设备号代表设备的类型,可以惟一地确定设备的驱动程序和界面,如hd表示IDE硬盘,sd表示SCSI硬盘,tty表示终端设备等;次设备号代表同类设备中的序号,如hda表示IDE主硬盘,hdb表示IDE从硬盘等。
(2)应用程序通常可以通过系统调用open( )打开设备文件,建立起与目标设备的连接。
(3)对设备的使用类似于对文件的存取。打开设备文件以后,就可以通过read( )、write( )、ioctl( )等文件操作对目标设备进行操作。
(4)设备驱动程序都是系统内核的一部分,它们必须为系统内核或它们的子系统提供一个标准的接口。例如,一个终端驱动程序必须为Linux内核提供一个文件I/O接口;一个SCSI设备驱动程序应该为SCSI子系统提供一个SCSI设备接口,同时SCSI子系统也应为内核提供文件I/O和缓冲区。
(5)设备驱动程序利用一些标准的内核服务,如内存分配等。另外,大多数Linux设备驱动程序都可以在需要时装入内核,不需要时可以卸载下来。
处于应用层的进程通过文件描述字fd与已打开文件的file结构相联系。在文件系统层,按照文件系统的操作规则对该文件进行相应处理。
对于一般文件(即磁盘文件),要进行空间的映射—从普通文件的逻辑空间映射到设备的逻辑空间,然后在设备驱动层做进一步映射—从设备的逻辑空间映射到物理空间(即设备的物理地址空间),进而驱动底层物理设备工作。
对于设备文件,则文件的逻辑空间通常就等价于设备的逻辑空间,然后从设备的逻辑空间映射到设备的物理空间,再驱动底层的物理设备工作。
2 设备驱动程序和内核之间的接口
Linux系统和设备驱动程序之间使用标准的交互接口。无论是字符设备、块设备还是网络设备的驱动程序,当内核请求它们提供服务时,都使用同样的接口。
Linux提供了一种全新的机制,就是“可安装模块”。可安装模块是可以在系统运行时动态地安装和拆卸的内核模块。利用这个机制,可以根据需要在不必对内核重新编译连接的条件下,将可安装模块动态插入运行中的内核,成为其中一个有机组成部分,或者从内核卸载已安装的模块。设备驱动程序或与设备驱动紧密相关的部分(如文件系统) 都是利用可安装模块实现的。
在应用程序界面上,利用内核提供的系统调用来实现可安装模块的动态安装和拆卸。但通常情况下,用户是利用系统提供的插入模块工具和移走模块工具来装卸可安装模块。插入模块的工作主要如下:
(1) 打开要安装的模块,把它读到用户空间。这种“模块”就是经过编译但尚未连接的.o文件。
(2) 必须把模块内涉及对外访问的符号(函数名或变量名)连接到内核,即把这些符号在内核映像中的地址填入该模块需要访问这些符号的指令及数据结构中。
(3) 在内核创建一个module数据结构,并申请所需的系统空间。
(4) 最后,把用户空间中完成了连接的模块映像装入内核空间,并在内核中“登记”本模块的有关数据结构(如file_operations结构),其中有指向执行相关操作函数的指针。
如前所述,Linux系统是一个动态的操作系统。用户根据工作中的需要,会对系统中设备重新配置,如安装新的打印机、卸载老式终端等。这样,每当Linux系统内核初启时,它都要对硬件配置进行检测,很有可能会检测到不同的物理设备,就需要不同的驱动程序。
在构建系统内核时,可以使用配置脚本将设备驱动程序包含在系统内核中。在系统启动时对这些驱动程序初始化,它们可能未找到所控制的设备,而另外的设备驱动程序可以在需要时作为内核模块装入到系统内核中。
为了适应设备驱动程序动态连接的特性,设备驱动程序在其初始化时就在系统内核中进行登记。Linux系统利用设备驱动程序的登记表作为内核与驱动程序接口的一部分,这些表中包括指向有关处理程序的指针和其它信息。
上一篇:Linux下定期检查和维护必要性及技巧 下一篇:实现Windows与Unix、Linux间数据交换
相关文章
- 一招一式攻克Linux
- linux下配置无密码的rsh访问
- 学会Linux下C语言编程--基础知识
- SAN和NAS两种产品的概念对比介绍
- 介绍守护进程XINETD与SOCKET程序的含义
- Linux系统常用命令和相关工具详细介绍
- 嵌入式Linux的DiskOnChip设备驱动开发
- Linux系统文件优化及磁盘检查方法介绍
- Linux操作系统中的防火墙技术及其应用
- RedHat7.2下ADSL双网卡共享上网实战
- Linux操作系统下推荐的应用程序列表介绍
- Linux实用技巧 用ICMP实现简单的Ping功能
- 关于Linux系统中的常用操作疑难解答
- 使用ISO文件安装Linux
- RHEL5新特性-Conga集群管理软件
- RHEL5安装Postfix+CyrusSASL+dovecot
- Linux日志管理的技巧
- Linux“锁骨功” 一张软盘上的嵌入应用
- 在Centos5的环境下搭建安全的SSH服务器
- Linux系统环境下的Socket编程详细解析
站长推荐
- Oracle Portal及其门户网站开发概述
- 超级PK:Sybase与Oracle的十二场性能比拼
- 保证Oracle数据库安全性的策略和方法
- PL/SQL中用光标查询多条记录
- PL/SQL编程经验小结
- Oracle数据库体系框架及SQL语句性能探讨
- PL/SQL中的多进程通信技术简介
- 关于Oracle和SQL存储调试和出错处理
- 利用UTL_FILE包实现文件I/O操作
- Oracle PL/SQL编程风格与系统性能提高
- Oracle建立二进制文件索引的方法
- 在Oracle里加快SQL执行的三种方法
- 基于Oracle的面向对象技术基础简析
- 在.NET中如何使用Oracle数据库事务
- Oracle9i的全文检索技术
- PL/SQL和Java开发Oracle8i应用程序
- Oracle PL/SQL入门之案例实践
- Oracle中临时文件File#和Db_files关系
- Oracle中三种上载文件技术
- Oracle与MSSQL过程之间的转化
最近更新
- 软件与硬件负载均衡的区别比较
- Linux下vi的用法
- 应用2.6内核超线程模式
- 重装Windows后LILO被覆盖的解决办法
- 如何利用Windows引导Linux+Redhat9.0
- Linux下安装和使用Mplayer完美播放DVD
- 如何制作和使用Jffs2文件系统
- 实用技巧一则 Linux系统对文件进行加锁
- 进行类Unix小型机系统管理的八项注意
- Fedora Core 5所支持的特定硬件体系
- 巧用Linux字符终端命令
- Linux操作系统中的7件武器详解
- 在Linux上安装ORiNOCO无线网卡实战技巧
- 构建一个 SELinux 就绪的 Gentoo 系统
- 怎样使Linux象Windows一样安装卸载
- Linux中利用Procmail来反击垃圾邮件
- 三种嵌入式操作系统的深入分析与比较
- Kubuntu 6.10 安装指南(图)
- Linux系统下串行通信调试工具SCT简介
- 自已动手制作Linux下拼音五笔输入法
