阅读:3582回复:9
Linux下的分层驱动程序
各位高手,有哪位知道在Linux下如何开发分层驱动程序。也就是说驱动A能够截获发向和来自驱动B的所有数据信息。这类似于NT下的过滤器驱动程序。请指点迷津。到哪里可以找到这方面的资料,能否提供个例子程序。万分感谢。
|
|
最新喜欢:Leopar... |
沙发#
发布于:2002-01-29 00:02
各位高手,有哪位知道在Linux下如何开发分层驱动程序。也就是说驱动A能够截获发向和来自驱动B的所有数据信息。这类似于NT下的过滤器驱动程序。请指点迷津。到哪里可以找到这方面的资料,能否提供个例子程序。万分感谢。 有了源代码还不好做啊?直接修改原来的或者添加自己的处理不久可以了么?windows下的hook只是为了保护代码提供的灵活的机制而已,本身也和windows的设计相关,而linux下基本上不需要。linux下的分层做得不好! 传统的monolithic和micorkernel的争吵就是在这方面的效率上的。 |
|
|
板凳#
发布于:2002-02-19 10:50
可以参考/drivers/net/bonding.c这个程序
|
|
地板#
发布于:2002-03-27 20:42
很好!
|
|
|
地下室#
发布于:2002-04-19 23:03
linux的文件系统和磁盘阵列的驱动程序都是分层的例子,如磁盘阵列中的Raid 0的驱动是/linux/drivers/md/raid0.c,生成/dev/md0的设备节点,实际对它的访问是在将数据分割后调用了具体的硬碟驱动程序。
|
|
5楼#
发布于:2002-04-19 23:04
|
|
6楼#
发布于:2002-04-21 12:21
我从来没有尝试过在linux下做分层驱动,Windows下filter driver是通过修改注册表来改变driver的加载顺序。也就是说有一个管理器在控制driver的加载,系统体系完全清楚driver之间的符号连接关系,同时为filter driver的加载提供了机会。
Linux缺乏这样统一的管理机制,但我觉得仍然是有机可乘的。Linux下设备driver之间的关系主要是靠List来维持的。PCI总线driver维持一个所有PCI设备的链表,USB总线driver维持一个USB设备的链表等等。一般情况下每一个链表包含每一个设备的硬件信息和driver信息。而driver的信息多半是以一种类似于file_operations的结构存在的,各个总线(指某种类型的设备)略有不同。每一个设备driver通过这个标准结构向总线driver注册对自己进行操作的functions(类似于callback function)。总线在需要时通过这些function对特定设备进行操作。例如,要open一个device,总线在List中找到该device的file_operations,从中提取device_open(),执行它。 那么,现在进入主题。这些List在内核态相当于全局变量,可以访问。做一个分层driver的重点就在利用某种安全的方式操作这些链表,将分层driver的模块信息插入这个链表。让总线在操作设备driver之前,先调用分层driver的function。最终要维持链表的完整性。 以上是我的想法,没有实践过,可能会存在一些问题,希望大家多多讨论。 |
|
7楼#
发布于:2002-04-25 22:38
我从来没有尝试过在linux下做分层驱动,Windows下filter driver是通过修改注册表来改变driver的加载顺序。也就是说有一个管理器在控制driver的加载,系统体系完全清楚driver之间的符号连接关系,同时为filter driver的加载提供了机会。 呵呵,替换系统调用什么的思想差不多。 实际上就失取到原来的,提花掉自己的,自己的做完后恢复原来的。而filter hook方面的,只是win在没有很多公开材料情况下的一中变通的解决方法。实际上内部的工作原理还是一样的。不同的只是linux下相对的可能更高效,因为可以直接操控,相对而言,win下的可能要更加适用。因为它的统一的一个界面也许可以在很多的win下跑,而linux的话似乎只能是一个版本出一个。 lids典型的一个例子。呵呵 |
|
|
8楼#
发布于:2008-02-22 15:29
顶就一个字
|
|
|
9楼#
发布于:2008-02-25 09:19
linux没有象windows那样统一抽象接口,有人做这个工作吗?---统一抽象接口会数据包变大影响效率和失去灵活性.
|
|