鸡蛋煮几分钟,Linux内核中的设备模型及SCSI示例解析,点阵激光

频道:小编推荐 日期: 浏览:226

关于硬件架构

想要了解Linux操作系统的内核设备和驱动模型,最好先了解一鸡蛋煮几分钟,Linux内核中的设备模型及SCSI示例解析,点阵激光下现在计算机硬件的架构。对计算机硬件有必定了解之后,对了解Linux内核中的设重庆同志会所备和驱动模型十分有协助。如图1是惯例计算机的硬件架构简图。

图1 计算机硬件架研组词构简图

这儿边需求要点了解的概念包括:总线、PCI桥和设备三个概念。咱们下面大约介绍一下这几个概念的意义:

总线: 咱们知道计算机一般包丈母娘吧括几大件,CPU、内存、输入设备和输出设备等。这些设备之间进行通讯需求依靠一种通道,这个通道便是总线。说的直白写,总线便是传输数据的通道,能够类比日常日子中的马路,各个不同的城市经过马路来交流物资。总线有许多种,比方常见的PCI总线,ISA总线和I2C总线等等,咱们这儿就不信任介绍。

PCI桥: PCI桥是衔接PCI总线的枢纽鸡蛋煮几分钟,Linux内核中的设备模型及SCSI示例解析,点阵激光,其效果与网络范畴的网桥相似。其实咱们平常说的北桥,就包括PCI桥。PCI桥首要分3种,3种桥的具体意义如下:

  1. HOST/PCI桥:供给CPU和PCI设备相互访鸡蛋煮几分钟,Linux内核中的设备模型及SCSI示例解析,点阵激光问的通道,完成CPU空间和PCI空间的映射。
  2. PCI-PCI桥:实鸡蛋煮几分钟,Linux内核中的设备模型及SCSI示例解析,点阵激光现PCI设备的级联。
  3. PCI/ISA或LPC桥:完成对ISA设备的兼容。

设备:设备便是具体的设备了,比方网卡、键盘和鼠标等等。

Linux中的设备软件模型

为了下降设备多样性带来的Linux驱动开发的杂乱度,以及设备热拔插处理、电源办理等,Linux内人物搬运待定怎样撤销核提出了设备模型(也称作Driver Model)的概念。设备模型将硬件设备概括、分类,然后笼统出一套规范的数据结构和接口。驱动的开发,就简化为对内核所规则的数据结构的填充和完成。Linux中的软件概念与实践物理的概念有一个大致的对应联系,在内核中相关的概念首要包括Bus、Device、D鸡蛋煮几分钟,Linux内核中的设备模型及SCSI示例解析,点阵激光evice Driver和Class等。下面是Linux对上述概念的介绍:

Bus(总线):Linux以为(能够参阅include/linux/device.h中struct bus_type的注释)总线是CPU和一个或金大人的梦多个设备之间信息交互的通道。而为了便利设备模型的笼统,一切的设备都应衔接到总线上。Linux总线是在上述物理总线基础上做的笼统,它能够对应物理总线,也能够没有对应物理总线。

Device(设备):笼统系统中一切的硬件设备,描绘它的姓名、特点、隶属的Bus、隶属的Class等信息。

Device Driver(驱动):Linux设备模型用Driver笼统硬件设备的驱动程序,它包括设备初始化、电源办理相关的接口完成。而Linux内核中的驱动开发,根本都环绕该笼统进行(完成所规则的接口函数)。

Class(分类):在Linux设备模型中,Class的概念十分相似面向目标程序设计中的Class(类),它首要是调集具有相似功用或特点的设备,这样就能够笼统出一套能够在多个设备之间共用的数据结构和接口函数。因而隶属于相同Class的设备的驱动程序,就不再需求重复界说这些公共资源,直接从Class中承继即可。

设备模型的中心思维

前面介绍了Linux的设备软件模型相关的概念,下面介绍一下各种概念间的联系。关于Linux来说,其软件层面的模型与硬件根本是共同的。由图1, 假如把CPU和内存男儿行杀人歌开成一个树根的话,整个计算机的设备间的联系其实相似一个树,总线相似于树枝。Linux内核在具体完成的时分也是按照此规则进行的,最底层的是根总线(bus),然后是各种具体类型的总线(bus_type),而其下则是设备(device)。

图2 Linux内核驱动要害数据结构

如图2所示,Linux内核针对上面介绍的概念,完成了具体的数据结构。数据结构的称号根本与硬件类型称号共同。比韩雨芹孙宁如bus_type表明某种类型的总线,device表明一个物理设备等。

设备和驱动: 用Device(struct device)和Device Driver(struct device_drive邱小雄r)两个数据结构,分别从“有什么用”和“怎样用”两个视点描绘硬件设备。这样就一致了编写设备驱动的格局,使驱动开发从论述题变为填空体,然后简化了设备驱动的开发。

总线与设备: 经过"Bus-->Device”类型的树状结构处理设备之间的依靠,而这种依靠在开关机、电源办理等过程中尤为重要。

试想,一个设备挂载在一条总线上,要发动这个设备,有必要先发动它所挂载的总线。很显然,假如系统中设备十分多、依靠联系十分杂乱的时分,无论是内核仍是驱动的开发人员,都无力保护这种联系。

而设备模型中的这种树状结构,能够主动处理这种依靠联系。发动某一个设备前,内核会查看该设备是否依靠其它设备或许总线,假如依靠,则查看所依靠的目标是否现已发动,假如没有,则会先发动它们,直到发动该设备的条件具有停止。而驱动开发人员需求做的,便是在编写设备驱动时,真紧奉告内核该设备的依靠联系即可。

: 运用Class结构,在设备模型中引进面向目标的概念,这样能够最大极限地笼统共性,郭洪伟削减驱动开发过程中的重复劳动,下降工作量。在Linux内核驱动中,类是对具有共性的设备的笼统,比方显现设鸡蛋煮几分钟,Linux内核中的设备模型及SCSI示例解析,点阵激光备类,音频设备类和SCSI设备类等袁东操影视论坛等。比方SCSI设备类包括磁盘设备、光驱设备和USB设备等。

即插即用: 在现代操作系统中即插即用成为常态,咱们一般PC的U盘、光驱等都是即插即用的。而关于企业级的服务器乃至要求CPU和内存等组件都是能够即插即用的。

即插即用的完成相同借用Device和Device Driver两个数据结构。在Linux内核中,只需任何Device和Device Driver具有相同的姓名,内核就会履行Device Driver结构中的初始化函数(probe),该函数会初始化设备,使其为可用状况。

而对大多数热拔插设备而言,它们的Device Driv梁继志er一向存在内核中。当设备没有插入时,其Device结构不存在,因而其Driver也就不履行初始化操在异乡吉他谱作。当设备插入时,内核会创立一个Device结构(称号和Driver相同),此刻就会触发Driver的履行。这便是即插即用的概念。

SCSI设备示例

SCSI廖其胜设备是Linux内核中支撑的许多设备中的一种。SCSI设备也遵从上面介绍的设备、驱动和总线的结构进贡娘娘,但略有不同。Linux内核中笼统了一个称谓SCSI总线的虚拟总线。而在SCSI总线上又包括SCSI的驱动和设备。

图3 SCSI系统结构

SCSI整个架构分为3层,其间中心是中心层,用于完成SCSI的公共功用,比方错误处理等。而上面一层称谓高层,它代表各种scsi设备类型的驱动,如scsi磁盘驱动,scsi磁带驱动,高层驱动招领低层上海瑞轩食物有限公司驱动发现的scsi设备,为这些设备分配称号,将对设备的IO转化私房女婿为scsi指令,交由低层驱动处理。而最下面的称谓底层,它代表与SCSI的物理接口的实践驱动器,首要为各个厂商为其特定的主机适配器(Hos鸡蛋煮几分钟,Linux内核中的设备模型及SCSI示例解析,点阵激光t Bus Adapter, HBA)驱动,例如: FC卡驱动、SAS卡驱动和iSCSI(iSCSI能够使硬件HBA卡或许根据一般网卡的软件完成)等。

在图3中,Disk Driver便是一个SCSI磁盘驱动,经过该驱动对用户出现一个一般的磁盘。中心层的驱动是有必要第一个被内核加载的,假如编译成内核模块的话,该内核模块为scsi_mod。然后是上层的驱动和底层的驱动。以SCSI磁盘为例,加载的模块是sd_mod。

在SCSI中完成对应上述概念的结构体包括scsi_driver、scsi_device和SCSI类型的总线(bus)。其间SCSI类型的总线并没有界说一个特别的数据结构体,而是对bus_type数据结构的实例化。

需求阐明的是关于SCSI设备,其完成又是比较杂乱的。咱们以光纤适配卡为例,其间一个适配卡又包括多个通路挤b裤,而每个通路同网络的方法能够跟多个存储设备衔接。因而,关于SCSI设备来说,完成上要杂乱许多。

图4 光纤适配卡

在内核中经过Scsi_Host、scsi_target等结构体表明上述概念。具体细节本文不再胪陈,后边咱们再具体介绍SCSI系统架构、FC相恶魔胆汁关流程和iSCSI相关流程。

热门
最新
推荐
标签