字符设备基础
- 格式:doc
- 大小:48.00 KB
- 文档页数:7
AIX操作系统概述2、两个或多个命令可以在同一行输入,中间以分号;隔开。
3、命令作业放在后台执行,在命令最后加上符号&。
7、创建命令别名时用alias Name=String,例如$alias dir="/usr/bin/ls -alF"。
使用AIX系统6、目录换名mv SourceDirectory TargetDirectory7、目录拷贝cp SourceDirectory TargetDirectory五、文件管理1、文件拷贝cp SourceFile TargetFilecp SourceFile TargetDirectory2、文件删除rm File3、文件链接ln SourceFile TargetFile4、文件移动/换名mv SourceFile TargetFile or TargetDirectory5、显示文件内容morepgcatheadtail6、文件查找find / -name .profile -printfind . -perm 0600 -printfind . -ctime 1 -printfind . -inum 2145 -printfind . -user abc -print六、改变文件/目录属性每一个文件或目录都有一个属主、一个组名和一组存取权限、访问时间等等。
1、改变文件或目录的最近访问时间touch2、改变文件或目录的属主chown3、改变文件或目录的属组chgrp4、改变文件或目录的存取权chmodchmod g+w Filechmod u+r Filechmod u=rwx Filechmod 755 File八、进程控制1、查询进程状态psps -aps -efps -lps -u uid2、终止进程的执行kill 19160kill -9 191603、对进程的控制nohupnicesleepwait4、在指定的时间运行程序atbatchcron /usr/bin/crontabcrontab和/var/spool/cron/crontabs/ 九、退出系统和关机exitCtr + dlogoutshutdown [ -option ] [ +time message ]当shutdown不带任何参数时,机器会向连在其上的所有终端发出一条关机信息,接着在一分钟后关闭所有终端,杀掉所有在系统上运行的进程,卸除所有文件系统,最后关闭系统。
1. 键盘键盘(Keyboard)是最常见的输⼊设备。
标准键盘上的按键排列可以分为三个区域:字符键区,功能键区,数字键区(数字⼩键盘)。
(l)、字符键区由于键盘的前⾝是英⽂打字机,键盘排列已经标准化。
因此,计算机的键盘最初就全盘采⽤了英⽂打字机的QWERTY排列⽅式。
(2)、功能键区在键盘的最上⼀排,主要包括F1~F12这12个功能键,通常⼈们⼜称它们为热键,因为⽤户可以根据⾃已的需要来定义它们的功能,以减少重复击键的次数,⽅便操作。
(3)、数字键区⼜称⼩键盘区。
安排在整个键盘的右都。
它原来是为专门从事数字录⼊的⼯作⼈员提供⽅便的。
计算机键盘中⼏种键位的功能详细列表如下: ·Enter键:回车键,将数据或命令送⼊计算机时即按此键。
·Space bar键:空格键,它是在字符键区的中下⽅的长条键。
因为使⽤频繁,它的形状和位置使左右⼿都很容易打着。
·Backspace键:退格键,按下它可使光标回退⼀格。
常⽤于删除当前⾏中的错误字符。
·Shift键:换档键。
由于整个键盘上有30个双字符键,即每个键⾯上标有两个字符,并且英⽂字母还分⼤⼩写,因此通过此键可以转换。
在计算机刚启动时,每个双符键都处于下⾯的字符和⼩写英⽂字母的状态。
·Ctrl键:控制键。
⼀般不单独使⽤,通常和其它键组合成复合控制键。
ESC:强⾏退出键。
在菜单命令中,它常是退出当前环境、返回原菜单的按键。
·Alt键:交替换档键。
它与其它键组合成特殊功能键或复合控制键。
·Tab键:制表定位键。
⼀般按下此键可使光标移动8个字符的距离。
·光标移动键:⽤箭头↑、↓、←、→分别表⽰上、下、左、右移动光标。
·屏幕翻页键:PgUP(Page Up)翻回上⼀页;PgDn(Page Down)下翻⼀页。
·打印屏幕键: Prtsc(Print Screen),把当前屏幕显⽰的内容全部打印出来。
计算机软硬件基础知识及网络安全常识1.计算机系统组成2.处理机3.基本输入出设备4.存储系统5.操作系统的中断控制、进程管理、线程管理中断控制6.处理机管理,存储管理,设备管理,文件管理,作业管理处理机管理存储管理设备管理文件管理作业管理7.网络操作系统和嵌入式操作系统基础知识网络操作系统嵌入式操作系统8.操作系统的配置9.数据库基本原理1.数据库管理系统的功能和特征2.数据库语言与编程3.中间件基础知识4.网络分类,体系结构与网络协议网络分类按通信距离分-广域网、局域网、城域网按信息交换方式分-电路交换网、分组交换网、综合交换网按网络拓扑结构分-星形、树形、环形、总线型按通信介质分-双绞线网、同轴电缆网、光纤网、卫星网按传输带宽分-基带网、宽带网按使用范围分-公用网、专用网按速率分-高速网、中速网、低速网按通信传播方式分-广播式、点到点式体系结构采用ISO/OSI网络体系结构,OSI参考模型从低到高为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;1~3层:负责通信功能,为通信子层5~7层:资源子网层网络协议7.网络管理8.信息安全基本概念计算机安全:指计算机资产的安全,要保证这些计算机资产不受自然和人为的有害因素的威胁和危害;计算机资产由系统资源和信息资源组成信息安全基本要素:机密性、完整性、可用性、可控性、可审查性计算机安全等级:技术安全性、管理安全性、政策法律安全性物理层:采用防窃听技术数据链路层:采用通信保密机进行加密和解密网络层:采用防火墙技术传输层:采用SSL安全套接安全技术应用层:身份认证、访问控制、数据加密安全性攻击包括:(1)被动攻击:对信息的保密性进行攻击,通过窃听信息加以分析,得到情报,但不修改信息内容,包括窃听、电磁/射频截获、业务流分析(2)主动攻击:攻击信息来源的真实性、信息传输的真实性和系统服务的可用性,有意对信息进行修改、删除,包括截获/修改、伪装、重放、拒绝服务、非法使用、特洛伊木马、陷门安全服务:认证、数据完整性、数据保密性、抗抵赖性、访问控制安全机制:加密机制、数据签名机制、访问控制机制、数据完整性机制、认证机制、通信业务填充机制、路由控制机制、公证机制9.防火墙定义:建立在内外部网络边界上的过滤封锁机制作用:防止不希望的、未经授权的通信进出被保护的内部网络,通过边界强化内部网络的安全政策类型:10.入侵检测定义:从计算机网络或计算机系统中的若干关键点搜集信息并对其进行分析,从中发现网络或系统中是否存在违反安全策略的行为和遭到袭击的迹象的一种机制。
考研计算机学科专业基础综合-7-2(总分:150.00,做题时间:90分钟)一、{{B}}单项选择题{{/B}}(总题数:40,分数:80.00)1.在OSI参考模型中,会话层使用( )层的服务来完成自己的功能。
(分数:2.00)A.物理层B.数据链路层C.网络层D.传输层√解析:在OSI参考模型中,每一层使用它下层的服务来完成自己的功能,在会话层下面是传输层,所以会话层采用传输层的服务来完成自己的功能。
2.如果二叉树T2是由有序树T1转换而来的二叉树,那么T1中结点的先序就是T2中结点的( )。
(分数:2.00)A.先序√B.中序C.后序D.层次序解析:一般树中一个结点的孩子是无序的,所谓有序树是指树中任一结点的孩子是有序的。
由树转换成二叉树的过程可知本题答案为A。
3.某计算机主存容量为64KB,其中ROM区为4KB,其余为RAM区,按字节编址。
现要用2K×8位的ROM芯片和4K×4位的RAM芯片来设计该存储器,则需要上述规格的ROM芯片数和RAM芯片数分别是( )。
(分数:2.00)A.1、15B.2、15C.1、30D.2、30 √解析:根据题意可知,该机主存由4K×8位ROM和60K×8位RAM组成;又现有ROM芯片为2K×8位,故ROM需进行字扩展,用2片2K×8位ROM串联组成4K×8位ROM;RAM芯片为4K×4位,故RAM需进行位字扩展,用2片4K×4位RAM并联构成4K×8位RAM,再用15片4K×8位RAM串联组成60K×8位RAM,即共需2×15=30片4K×4位的RAM芯片。
4.某机字长32位,其主存储器容量为64MB,按字节编址,则该计算机的主存地址寄存器和主存数据寄存器的位数分别为( )。
(分数:2.00)A.26,32B.26,8 √C.22,32D.无法确定解析:主存按字节编址,64MB=226×8位,故主存地址寄存器为26位,主存数据寄存器为8位。
字符设备的注册:1》杂项设备主设备号:10需要一个核心结构体变量来描述这个设备。
struct miscdevice dev_misc = {.minor = 次设备号/255.name = 设备节点名.f_ops = 操作函数集};次设备为255时,自动分配一个次设备号,其它值则是分配一个固定的设备号。
杂项设备注册时自动生成设备节点。
.name 就是设备节点的名字。
基础函数不用管,只看注册方面:/*使用杂项设备方式注册分设备,主设备号固定为10 设备名:miscstruct miscdevice {int minor; //次设备号const char *name; //设备节点名const struct file_operations *fops;//操作函数集指针};*//*这是gcc编译器对C语言的语法扩充*/static struct miscdevice led_dev = { .fops = &led_fops,.name = "myled",.minor = 255, //表示自动分配};static int myled_init(void){/*注册:往登记表中添加设备*//*使用杂项设备的注册方式*/int ret;ret = misc_register(&led_dev);if(ret < 0){printk("register error\n");return -1;}//物理地址到虚拟地址的映射gpbbase = ioremap(0x56000010,16);printk("led_driver register done\n");return 0;}static void myled_exit(void){/*注销卸载*/misc_deregister(&led_dev);iounmap(gpbbase);}2》经典注册方式注册函数:int register_chrdev(unsigned int major,const char * name,const struct file_operations * fops)向内核注册一类字符设备:major :主设备号name : 设备名fops :操作函数集返回值为0表示让内核自动分配一个没使用的设备号,执行make成功,则把分配的的设备号返回,失败则返回负值。
Linux底层驱动开发从入门到精通的学习路线推荐Linux底层驱动开发是一项涉及操作系统核心的技术,对于想要深入了解Linux系统内部工作原理的开发人员来说,是一门重要的技能。
本文将为你推荐一条学习路线,帮助你从入门到精通掌握Linux底层驱动开发。
一、基础知识学习阶段在开始学习Linux底层驱动开发之前,你需要掌握一些基础知识。
以下是你可以参考的学习路线:1.1 Linux操作系统基础学习Linux操作系统的基础知识是理解和使用Linux底层驱动的前提。
可以选择阅读《鸟哥的Linux私房菜》等入门书籍,了解Linux的基本概念、命令行操作等。
1.2 C语言编程C语言是Linux底层驱动开发的主要语言。
建议学习《C Primer Plus》等经典教材,掌握C语言的基本语法和编程技巧。
1.3 Linux系统编程学习Linux系统编程是理解Linux内核和驱动开发的关键。
推荐学习《Linux系统编程手册》等教材,学习Linux系统调用、进程管理等知识。
1.4 数据结构与算法良好的数据结构和算法基础对于优化和设计高效的驱动程序至关重要。
可以学习《算法导论》等经典教材,掌握数据结构和常用算法的原理和实现。
二、Linux内核了解与分析阶段在掌握了基础知识后,你需要进一步了解Linux内核和驱动的工作原理。
以下是你可以参考的学习路线:2.1 Linux内核源码阅读通过阅读Linux内核源码,你可以深入了解Linux的内核机制和实现细节。
可以选择《深入理解Linux内核》等相关书籍,逐步学习Linux内核代码的组织结构和关键部分。
2.2 设备驱动模型了解Linux内核的设备驱动模型对于编写高效且可维护的驱动程序至关重要。
可以学习Linux设备驱动模型的相关文档和教程,例如Linux Device Drivers (LDD)等。
2.3 内核调试与分析工具掌握一些常用的内核调试和分析工具是进行底层驱动开发的必要技能。
linux驱动面试题及答案一、概述在Linux开发领域,驱动程序是至关重要的组成部分。
为了帮助读者更好地准备Linux驱动开发面试,本文将介绍一些常见的Linux驱动面试题及其答案。
二、Linux驱动基础知识1. 什么是Linux驱动?答:Linux驱动是一段软件程序,用于与特定硬件设备进行通信,实现对硬件设备的控制和数据传输。
2. Linux驱动由哪些组成部分构成?答:Linux驱动由多个组成部分构成,包括设备和驱动模块。
设备代表硬件设备,而驱动模块负责驱动设备并与内核进行交互。
3. 内核态和用户态之间的区别是什么?答:内核态是操作系统的核心部分,具有最高的权限。
用户态是应用程序运行的环境,权限较低。
在内核态中,驱动可以直接访问硬件设备。
4. 请解释Linux设备树(Device Tree)是什么?答:Linux设备树是一种描述硬件设备及其连接方式的数据结构,用于在启动时为设备提供必要的参数和配置信息。
5. 使用哪个命令来加载和卸载Linux驱动?答:insmod命令用于加载驱动模块,rmmod命令用于卸载驱动模块。
三、Linux驱动开发相关问题6. 在Linux驱动中,什么是Platform驱动?答:Platform驱动是一种Linux内核驱动,用于支持与硬件设备直接连接的平台设备。
其驱动模块通过设备树(Device Tree)来识别和初始化设备。
7. 请解释字符设备驱动是什么?答:字符设备驱动是一种Linux驱动,用于支持以字符为单位进行I/O操作的设备,如串口、终端等。
8. 什么是中断处理程序?如何在Linux驱动中实现中断处理程序?答:中断处理程序是在CPU接收到硬件设备发出的中断信号时执行的函数。
在Linux驱动中,可以通过注册中断处理程序的方式来实现,通常使用request_irq函数来注册中断处理函数。
9. 在Linux驱动中,如何进行内存管理?答:在Linux驱动中,可以使用kmalloc和kfree函数来进行动态内存的分配和释放。
[模拟] 计算机学科专业基础综合模拟28单项选择题第1题:在OSI参考模型中,会话层使用( )层的服务来完成自己的功能。
A.物理层B.数据链路层C.网络层D.传输层参考答案:D在OSI参考模型中,每一层使用它下层的服务来完成自己的功能,在会话层下面是传输层,所以会话层采用传输层的服务来完成自己的功能。
第2题:如果二叉树T2是由有序树T1转换而来的二叉树,那么T1中结点的先序就是T2中结点的( )。
A.先序B.中序C.后序D.层次序参考答案:A一般树中一个结点的孩子是无序的,所谓有序树是指树中任一结点的孩子是有序的。
由树转换成二叉树的过程可知本题答案为A。
第3题:某计算机主存容量为64KB,其中ROM区为4KB,其余为RAM区,按字节编址。
现要用2K×8位的ROM芯片和4K×4位的RAM芯片来设计该存储器,则需要上述规格的ROM芯片数和RAM芯片数分别是( )。
A.1、15B.2、15C.1、30D.2、30参考答案:D根据题意可知,该机主存由4K×8位ROM和60K×8位RAM组成;又现有ROM芯片为2K×8位,故ROM需进行字扩展,用2片2K×8位ROM串联组成4K×8位ROM;RAM芯片为4K×4位,故RAM需进行位字扩展,用2片4K×4位RAM并联构成4K×8位RAM,再用15片4K×8位RAM串联组成60K×8位RAM,即共需2×15=30片4K×4位的RAM芯片。
第4题:某机字长32位,其主存储器容量为64MB,按字节编址,则该计算机的主存地址寄存器和主存数据寄存器的位数分别为( )。
A.26,32B.26,8C.22,32D.无法确定参考答案:B主存按字节编址,64MB=226×8位,故主存地址寄存器为26位,主存数据寄存器为8位。
第5题:下列关于进程的叙述,( )是最不符合操作系统对进程的理解。
ASCII码、HEX、字符、BCD等等基础知识思考每每遇到这些问题就要想个半天,想不明⽩还不舒服,今天特别把所想整理下避免以后再次进⼊思想漩涡计算机存储和传输都是以字节为单位1 bit = 1 ⼆进制数据1 byte = 8 bit1 字母 = 1 byte = 8 bit1 汉字 =2 byte = 16 bit1. bit:位⼀个⼆进制数据0或1,是1bit;2. byte:字节存储空间的基本计量单位,如:MySQL中定义 VARCHAR(45) 即是指 45个字节;1 byte = 8 bit3. ⼀个英⽂字符占⼀个字节;1 字母 = 1 byte = 8 bit4. ⼀个汉字占2个字节;1 汉字 =2 byte = 16 bit5. 标点符号A>. 汉字输⼊状态下,默认为全⾓输⼊⽅式;B>. 英⽂输⼊状态下,默认为半⾓输⼊⽅式;C>. 全⾓输⼊⽅式下,标点符号占2字节;D>. 半⾓输⼊⽅式下,标点符号占1字节;故:汉字输⼊状态下的字符,占2个字节 (但不排除,⾃⼰更改了默认设置);英⽂输⼊状态下的字符,占1个字节 (但不排除,⾃⼰更改了默认设置);ASCII码 因为信息在计算机上是⽤⼆进制表⽰的,这种表⽰法让⼈理解就很困难。
因此计算机上都配有输⼊和输出设备,这些设备的主要⽬的就是以⼀种⼈类可阅读的形式将信息在这些设备上显⽰出来供⼈阅读理解。
为保证⼈类和设备,设备和计算机之间能进⾏正确的信息交换,⼈们编制的统⼀的信息交换代码,这就是ASCII码表,它的全称是“美国信息交换标准代码”。
BCD码 BCD码(Binary-Coded Decimal?)亦称⼆进码⼗进数或⼆-⼗进制代码。
⽤4位⼆进制数来表⽰1位⼗进制数中的0~9这10个数码。
是⼀种⼆进制的数字编码形式,⽤⼆进制编码的⼗进制代码。
BCD码这种编码形式利⽤了四个位元来储存⼀个⼗进制的数码,使⼆进制和⼗进制之间的转换得以快捷的进⾏。
设备基础模板项目编码引言设备基础模板项目编码是指为设备基础模板项目创建一个唯一的编码标识。
这个编码标识可以用于跟踪、管理和识别设备基础模板项目,以便更好地组织和管理项目,提高项目的可追踪性和可维护性。
设备基础模板项目编码的重要性设备基础模板项目编码具有以下重要性: 1. 唯一性:每个设备基础模板项目都应有一个唯一的编码标识,以便可以准确地识别和定位该项目。
2. 可追踪性:通过设备基础模板项目编码,可以方便地追踪设备基础模板项目的历史记录、变更和版本信息。
3. 可管理性:设备基础模板项目编码可以用于对项目进行分类、组织和管理,提高项目的可管理性和可维护性。
4. 可搜索性:设备基础模板项目编码可以用于在大量项目中进行快速搜索和定位,节省时间和精力。
设备基础模板项目编码的要求设备基础模板项目编码应满足以下要求: 1. 唯一性:每个设备基础模板项目的编码应是唯一的,不会与其他项目的编码冲突。
2. 简洁性:编码应该尽量简洁明了,便于记忆和输入。
可以使用字母、数字和特殊字符组合来构成编码,避免使用过长或复杂的编码。
3. 易读性:编码应具有一定的可读性,尽量避免使用难以理解或混淆的字符组合。
4. 可扩展性:编码应具有一定的扩展性,可以根据需要在不同级别的设备基础模板项目中添加更多的编码元素。
设备基础模板项目编码的格式设备基础模板项目编码的格式可以根据实际需求进行定义,但一般应包括以下要素:1. 项目类型标识:用于标识设备基础模板项目的类型,可以使用字母、数字或特殊字符来表示。
2. 项目序号:用于标识设备基础模板项目在同类型项目中的序号,一般使用数字表示。
3. 版本号:用于标识设备基础模板项目的版本,可以使用数字或字母来表示。
设备基础模板项目编码的示例格式为:[项目类型标识]-[项目序号]-[版本号],例如:D-001-V1。
设备基础模板项目编码的管理设备基础模板项目编码的管理应考虑以下方面: 1. 编码分配:对于新建的设备基础模板项目,应由专人负责分配、管理和维护编码,确保每个项目都有唯一的编码标识。
计算机学科专业基础综合计算机操作系统-12(总分100,考试时间90分钟)一、单项选择题1. 逻辑文件的组织形式是由______决定的。
A. 存储介质特性B. 操作系统的管理方式C. 主存容量D. 用户2. 对磁盘进行磁头调度的目的是为了缩短______时间。
A. 寻道B. 旋转C. 传送D. 启动3. 在文件系统中引入“当前目录”的主要目的是______。
A. 方便用户B. 提高系统性能C. 增强系统安全性D. 支持共享访问4. 有关文件系统层次结构的叙述中正确的是______。
A. 逻辑文件系统必须建立在访问控制模块之上,利用其安全机制保证用户数据的安全B. 物理文件系统必须建立在文件信息缓冲区之上,利用缓冲提高系统性能C. 文件目录系统必须建立在访问控制模块之上,利用其安全机制保证用户数据的安全D. 物理文件系统必须与文件信息缓冲区管理集成在一层,在提高系统性能的同时减少跨层访问的次数5. 有关文件操作的系统调用的叙述中不正确的是______。
A. 在一个用户使用OPEN之后CLOSE之前,另一个用户使用DELETE系统调用时会返回错误B. 在一个用户使用OPEN之后CLOSE之前,另一个用户使用DELETE系统调用删除同一个文件时会返回错误C. 当一个用户正在READ时,另一个用户使用DELETE系统调用删除同一个文件时会返回错误D. 当一个用户正在WRITE时,另一个用户使用CREATE系统调用创建同一个文件时会返回错误6. 加密保护和访问控制两种机制相比______。
A. 加密保护机制的灵活性更好B. 访问控制机制的安全性更高C. 加密保护机制必须由系统实现D. 访问控制机制必须由系统实现7. 在磁盘调度算法中叙述正确的是______。
A. SSTF算法性能最好B. 磁盘调度算法的性能与队列中请求服务的数目无关C. 对I/O队列中的服务请求进行预处理有利于提高C-LOOK算法的性能D. C-SCAN算法适用于磁盘负载较小的系统8. 在下列有关旋转延迟的叙述中,不正确的是______。
Linux 字符设备基础字符设备驱动程序在系统中的位置操作系统内核需要访问两类主要设备,简单的字符设备,如打印机,键盘等;块设备,如软盘、硬盘等。
与此对应,有两类设备驱动程序。
分别称为字符设备驱动程序和块设备驱动程序。
两者的主要差异是:与字符设备有关的系统调用几乎直接和驱动程序的内部功能结合在一起。
而读写块设备则主要和快速缓冲存储区打交道。
只有需要完成实际的输入/输出时,才用到块设备驱动程序。
见下图:Linux 设备驱动程序的主要功能有:● 对设备进行初始化;● 使设备投入运行和退出服务;● 从设备接收数据并将它们送到内核;● 将数据从内核送到设备;●检测和处理设备出现的错误。
当引导系统时,内核调用每一个驱动程序的初始化函数。
它的任务之一是将这一设备驱动程序使用的主设备号通知内核。
同时,初始化函数还将驱动程序中的函数地址结构的指针送给内核。
内核中有两X 表。
一X 表用于字符设备驱动程序,另一X 用于块设备驱动程序。
这两X 表用来保存指向file_operations 结构的指针,设备驱动程序内部的函数地址就保存在这一结构中。
内核用主设备号作为索引访问file_operations结构,因而能访问驱动程序内的子程序。
从开机到驱动程序的载入系统启动过程中可能出现几种不同的方式检测设备硬件。
首先机器硬件启动时BIOS会检测一部分必要的设备,如内存、显示器、键盘和硬盘等等。
机器会把检测到的信息存放在特定的位置,如CMOS数据区。
而另外某些设备会由设备驱动程序进行检测。
1 开机2 引导部分(linux/config.h,arch/i386/boot/bootsect.S)3 实模式下的系统初始化(arch/i386/boot/setup.S)4 保护模式下的核心初始化5 启动核心(init/main.c)init函数中函数调用关系如下:main.c init()filesystems.c sys_setup()genhd.c device_setup()mem.c chr_dev_init()至此,驱动程序驻入内存。
设备驱动程序基本数据结构:struct device_struct系统启动过程中要登记的块设备和字符设备管理表的定义在文件fs/devices.c中:struct device_struct {const char * name;struct file_operations * fops;};static struct device_struct chrdevs[MAX_CHRDEV];static struct device_struct blkdevs[MAX_BLKDEV];其实块设备表和字符设备表使用了相同的数据结构。
在某些系统中,这些设备表也称作设备开关表,不同的是它们直接定义了一组函数指针进行对设备的管理。
而这里系统用文件操作(file_operations)代替了那组开关。
文件操作是文件系统与设备驱动程序之间的接口,系统特殊文件在建立的时候并没有把两者对应起来,只是把设备的缺省文件结构和i节点结构赋给设备文件,而真正的对应定义在系统启动之后,当设备被打开时时才进行的。
操作blkdev_open和chrdev_open定义在文件devices.c中,它们的基本功能是当设备文件初次打开时,根据该文件的i节点信息找到设备真正的文件操作接口,然后更新原来的设备表项;最后再调用该设备的open操作。
/include/linux/major.h中定义了设备表的长度。
设备表中不同的表项表示不同种类的设备,也就是说,LINUX系统分别支持各128种不同的块设备和字符设备。
Struct file_operations操作系统将一个字符设备当作文件来处理,内核通过file_operations结构来访问driver 的功能。
这也是linux的OO思想的体现之一。
file_operations的定义在文件<linux/fs.h>中。
每个字符设备都有一个file_operatioins结构。
这个结构指向一组操作函数(open,read…). 每个函数的定义由driver提供。
当然,有些标准操作某些设备并不支持,这时,file_operatons 结构中对应表项为NULL(.随着linux内核的不断升级,file_operatioins结构也不断变大。
最新的版本中,甚至函数原型也发生了一些变化。
当然,新版本总会向下兼容的。
)下面是2.0.35中的file_operations结构定义:struct file_operations {int (*lseek) (struct inode *, struct file *, off_t, int);int (*read) (struct inode *, struct file *, char *, int);int (*write) (struct inode *, struct file *, const char *, int);int (*readdir) (struct inode *, struct file *, void *, filldir_t);int (*select) (struct inode *, struct file *, int, select_table *);int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);int (*mmap) (struct inode *, struct file *, struct vm_area_struct *);int (*open) (struct inode *, struct file *);void (*release) (struct inode *, struct file *);int (*fsync) (struct inode *, struct file *);int (*fasync) (struct inode *, struct file *, int);int (*check_media_change) (kdev_t dev);int (*revalidate) (kdev_t dev);};Struct inodefile_operations中的大多数操作都将inode做为第一个参数。
Linux的VFS是对物理文件系统,物理设备的一个封装。
Inode结构就是VFS与下层模块对话的重要结构。
文件系统由子目录和文件构成。
每个子目录或文件只能由唯一的inode描述。
每个设备也是用inode来描述的。
inode 是LINUX管理文件系统的最基本单位,也是文件系统连接任何子目录、任何文件,设备的桥梁。
struct inode {kdev_t i_dev; /* 文件所在设备的设备号,第一个IDE硬盘为0x0301 */ unsigned long i_ino; /* 外存inode的节点号,(i_dev,i_ino)在VFS中是唯一的 */umode_t i_mode;/* 表示文件类型以及存取权限 */nlink_t i_nlink;/* 连接到该文件的link数 */uid_t i_uid; /* 用户标识号 */gid_t i_gid; /* 用户组标识号 */kdev_t i_rdev;/* 根设备的设备号 */off_t i_size;/* 文件长度 */time_t i_atime;/* 文件访问时间 */time_t i_mtime; /* 文件修改时间 */time_t i_ctime; /* 文件创建时间 */unsigned long i_blksize;/* 以字节为单位的块大小,一般为1024字节 */ unsigned long i_blocks; /* 文件块数 */unsigned long i_version;unsigned long i_nrpages;/* 文件在内存中所占页数 */struct semaphore i_sem; /* 信号量 */struct inode_operations *i_op;/* 指向一组针对该文件的操作函数,见fs.h */struct super_block *i_sb; /* 指向内存中VFS的超级块 */struct wait_queue *i_wait; /* 在该文件上的等待队列 */struct file_lock *i_flock;struct vm_area_struct *i_mmap;struct page *i_pages; /* 由文件占用页面构成的单向链,通过它可访问内存中的文件数据 */ struct dquot *i_dquot[MAXQUOTAS];struct inode *i_next, *i_prev; /* inode资源管理中使用的链表指针 */ struct inode *i_hash_next, *i_hash_prev; /* inodecache的链表指针 */ struct inode *i_bound_to, *i_bound_by;struct inode *i_mount; /* 指向下挂文件系统的inode的根目录 */unsigned long i_count; /* 引用记数,0表示是空闲inode */unsigned short i_flags;unsigned short i_writecount;unsigned char i_lock; /* 对inode加锁标志 */unsigned char i_dirt;unsigned char i_pipe;unsigned char i_sock;unsigned char i_seek;unsigned char i_update;unsigned char i_condemned;union { /* 各类文件系统inode的特定信息 */ ............struct ext2_inode_info ext2_i;............} u;};对于设备管理而言,主要用到的是inode结构的kdev I_rdev字段。
Struct kdev_t文件系统中,字符设备是通过名字来访问的。
通常字符设备都在/dev下。
在系统内部,每个字符设备都用设备号来表示。
设备号由主,副设备号来表示。
主设备号表示与设备对应的设备驱动程序。
如:设备/dev/zero 和/dev/null都用1作为主设备号,表示他们使用相同的设备驱动程序。