免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2455 | 回复: 6
打印 上一主题 下一主题

SCSI子系统编程求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-21 02:17 |只看该作者 |倒序浏览
20可用积分
现在在将一个Linux 2.4内核下的SCSI命令截获内核模块移植到Linux 2.6环境中,发现一个比较棘手的问题。
在原有的Linux 2.4子系统中,有一个全局变量scsi_hostlist,它是一个Scsi_Host类型的头指针,所有的scsi_host都挂在该指针上,并通过成员指针next互相链接起来。原来的内核模块通过遍历该指针链比较host_no变量,来查找具体的某个是否要截获命令的scsi_host。但Linux 2.6中没有对应的数据接口,也没有了next指针成员。于是不知道该如何进行类似的操作。请大家帮忙看看,谢谢!
我想可能的入手点可能是sysfs或者procfs,或者是Linux 2.6内核提供了专门遍历scsi_host的接口函数?

论坛徽章:
5
2 [报告]
发表于 2009-03-23 15:02 |只看该作者
2.6下你是哪个一版本, 2.6.12还有Struct Scsi_Host in scsi_host.h

论坛徽章:
0
3 [报告]
发表于 2009-03-24 00:08 |只看该作者
谢谢你的回复。我目前用的是Linux 2.6.15的内核。目前的内核版本中都有Struct Scsi_Host in scsi_host.h这个数据结构,但是没有像2.4内核中有一个该数据结构类型的头指针Struct Scsi_Host *scsi_hostlist,用来挂接所有系统中发现的 Scsi_Host类型的实例。所以我现在在Linux 2.6无法遍历Scsi_Host类型的实例从而找到我想找的scsi_host。

论坛徽章:
5
4 [报告]
发表于 2009-03-24 01:05 |只看该作者
原帖由 raysmile 于 2009/3/24 00:08 发表 [url=http://linux.chinaunix.net现在在将一个Linux 2.4内核下的SCSI命令截获内核模块移植到Linux 2.6环境中.

这个是LZ自己开发的模块吗, 关注中

论坛徽章:
5
5 [报告]
发表于 2009-03-24 10:41 |只看该作者
看了一下, Scsi_Host中已经没有next项. 应该不再用next把各Host串起来.

不过你还是可以借鉴Kernel中其它Driver的实现. 2.4中有很多module利用scsi_hostlist, 你研究2.6下是怎么实现的.

论坛徽章:
0
6 [报告]
发表于 2009-03-24 12:03 |只看该作者
谢谢你的回复。

我在网上搜索了一下,发现有人曾经在2002年的时候提过类似的问题。但是Linux内核的大牛们都不建议这样操作scsi_host的链表结构,这样直接操作链表的方法,需要人为控制好ref count,当有的内核模块退出时容易产生问题。所以,我猜测在新的2.6内核中scsi_hostlist和next指针都没有了的原因,相信正是出于这样保证系统内核安全的目的。同时,他们也给出建议看看SCSI Generic的代码,它里面有操作scsi设备的方法。

论坛徽章:
0
7 [报告]
发表于 2009-03-24 12:06 |只看该作者

回复 #4 yidou 的帖子

这个模块不是我开发的,我是下载的一个代码,准备做实验用途的。如果短期解决不了该问题。最坏的结果是安装一个Red Hat 9.0, 满足当时代码的运行环境,呵呵,投机取巧的办法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP