LIBSAS层分析

来源:互联网 发布:sem seo怎么做 编辑:程序博客网 时间:2024/05/29 04:43


1.LLDD -> SAS传输层 -> SCSI层
1).LLDD实例化一个scsi host,然后在系统中声明存在,以后发给该LLDD的I/O就经过scsi host,
scsi host又调用LLDD在实例化scsi host时指定的传输层的函数实现I/O。
因此所有需要实例化scsi host的LLDD需要提供一个struct scsi_transport_template的结构体变量,将该变量赋值给scsi host的成员transportt。

2).而该struct scsi_transport_template结构体的变量一般不是由LLDD来定义的,都是通过调用LLDD上面一层的传输层(SAS传输层,FC传输层,iscsi传输层...)的函数返回的,
如调用SAS传输层的sas_attach_transport函数,就会返回该struct scsi_transport_template结构体的变量。

3).不过调用sas_attach_transport函数需要的参数是一个struct sas_function_template结构体的变量,因此LLDD直接调用sas_attach_transport函数的就需要定义一个
struct sas_function_template结构体的变量,这个变量就是LLDD同SAS传输层直接的接口,SAS传输层返回给LLDD的那个给scsi host的struct scsi_transport_template结构体的变量
中的函数的实现内容,也是依赖于LLDD提供给SAS传输层的这个接口的。

实质上,都是上层使用下层提供的可调用的接口,实现本层的一系列函数,然后再从一系列函数中取重要的一部分,实现一个对上层提供服务的接口。
软件分层的实现方法就是调用下层提供的接口,向上层提供服务接口。软件分层的意义就在于代码的复用。


2.增加的LIBSAS层:LLDD -> LIBSAS层 -> SAS传输层 -> SCSI层

1).LIBSAS层介于SAS传输层和LLDD之间,它需要LLDD提供的调用接口:static struct sas_domain_function_template。

2).LIBSAS层向SAS传输层提供的服务接口:struct sas_function_template。

3).因此当LLDD使用LIBSAS层的时候,要定义一个struct sas_function_template结构体的变量,把它注册到LIBSAS层,
LIBSAS层将它定义的struct sas_function_template sft注册到SAS传输层,然后SAS传输层返回提供给SCSI层的struct scsi_transport_template结构体的变量,
LIBSAS层将该提供给SCSI层的结构体变量返回给LLDD,LLDD用该结构体变量实例化scsi host,完成在SCSI层的注册。


4)LLDD也可以不使用LIBSAS层而直接同SAS传输层沟通,那就需要自己实现SAS协议相关的代码,然后实现SAS传输层需要的调用接口。
mptsas驱动就是没有使用libsas层,直接同sas transport层沟通工作的。

5).LIBSAS层存在的意义就是为一些可以利用它的LLDD提供代码复用。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝不在床上睡觉怎么办呢 瑜伽球表面粘了怎么办 鞋子洗了很臭怎么办 在社区开瑜伽馆怎么办 腿被开水烫伤了怎么办 狗狗的腿脱臼了怎么办 手火辣辣的烧疼怎么办 网贷收到告知函怎么办 收到捷信催收律师函怎么办 快钱贷款不还怎么办 快易花逾期3个月怎么办 欠微粒贷一万多没还找上门了怎么办 装修公司骚扰电话太多了怎么办 总有大便的感觉怎么办 黎明杀机无网络连接怎么办 监控视频电脑播放不了怎么办 绝地手游击倒了怎么办? 绝地求生全军出击倒地后怎么办 黑魂3杀了npc怎么办 菜刀背容易割手怎么办 商铺厨房太热怎么办 农村自建房厨房卫生间怎么办 宾利车门不会开怎么办 两岁的宝宝好动怎么办 被别人坏了名声怎么办 在单位混臭了怎么办 在公司名声臭了怎么办 怀孕三个月吐的厉害怎么办 孕38周轻微贫血怎么办 孕38周中度贫血怎么办 孕38周贫血严重怎么办 孕38周有点贫血怎么办 脚被热水烫红了怎么办 学员练车撞死人怎么办 三胎意外来了该怎么办 因为飞机延误耽误行程怎么办 伤了朋友的心怎么办 羊蹄被绳子缠肿了怎么办 新老师教的不好怎么办 跟老公三观不合怎么办 突然有社保补扣怎么办