SCSI子系统编程求助

发布于 2022-09-18 18:59:41 字数 345 浏览 14 评论 0

现在在将一个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的接口函数?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

℉絮湮 2022-09-25 18:59:41

2.6下你是哪个一版本, 2.6.12还有Struct Scsi_Host in scsi_host.h

鱼窥荷 2022-09-25 18:59:41

谢谢你的回复。我目前用的是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。

惜醉颜 2022-09-25 18:59:41

原帖由 raysmile 于 2009/3/24 00:08 发表 [url=http://linux.chinaunix.net现在在将一个Linux 2.4内核下的SCSI命令截获内核模块移植到Linux 2.6环境中.

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

囚我心虐我身 2022-09-25 18:59:41

看了一下, Scsi_Host中已经没有next项. 应该不再用next把各Host串起来.

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

峩卟喜欢 2022-09-25 18:59:41

谢谢你的回复。

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

夕色琉璃 2022-09-25 18:59:41

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文