piggy
驱动牛犊
驱动牛犊
  • 注册日期2001-08-24
  • 最后登录2012-01-14
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:3582回复:9

Linux下的分层驱动程序

楼主#
更多 发布于:2001-12-04 10:58
各位高手,有哪位知道在Linux下如何开发分层驱动程序。也就是说驱动A能够截获发向和来自驱动B的所有数据信息。这类似于NT下的过滤器驱动程序。请指点迷津。到哪里可以找到这方面的资料,能否提供个例子程序。万分感谢。

最新喜欢:

LeopardLeopar...
sunsetyang
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-01-29 00:02
各位高手,有哪位知道在Linux下如何开发分层驱动程序。也就是说驱动A能够截获发向和来自驱动B的所有数据信息。这类似于NT下的过滤器驱动程序。请指点迷津。到哪里可以找到这方面的资料,能否提供个例子程序。万分感谢。

有了源代码还不好做啊?直接修改原来的或者添加自己的处理不久可以了么?windows下的hook只是为了保护代码提供的灵活的机制而已,本身也和windows的设计相关,而linux下基本上不需要。linux下的分层做得不好!
  传统的monolithic和micorkernel的争吵就是在这方面的效率上的。
[color=red]Optimization[/color] In Progress . . . Welcome to http://mail.ustc.edu.cn/~chyang/
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-02-19 10:50
可以参考/drivers/net/bonding.c这个程序
eastman
驱动小牛
驱动小牛
  • 注册日期2001-12-02
  • 最后登录2004-02-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-27 20:42
很好!
李问
zhengq
驱动牛犊
驱动牛犊
  • 注册日期2002-03-05
  • 最后登录2003-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-19 23:03
linux的文件系统和磁盘阵列的驱动程序都是分层的例子,如磁盘阵列中的Raid 0的驱动是/linux/drivers/md/raid0.c,生成/dev/md0的设备节点,实际对它的访问是在将数据分割后调用了具体的硬碟驱动程序。
zhengq
驱动牛犊
驱动牛犊
  • 注册日期2002-03-05
  • 最后登录2003-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-19 23:04
dos
dos
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
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。最终要维持链表的完整性。
以上是我的想法,没有实践过,可能会存在一些问题,希望大家多多讨论。
sunsetyang
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-25 22:38
我从来没有尝试过在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。最终要维持链表的完整性。
以上是我的想法,没有实践过,可能会存在一些问题,希望大家多多讨论。

呵呵,替换系统调用什么的思想差不多。
实际上就失取到原来的,提花掉自己的,自己的做完后恢复原来的。而filter hook方面的,只是win在没有很多公开材料情况下的一中变通的解决方法。实际上内部的工作原理还是一样的。不同的只是linux下相对的可能更高效,因为可以直接操控,相对而言,win下的可能要更加适用。因为它的统一的一个界面也许可以在很多的win下跑,而linux的话似乎只能是一个版本出一个。
lids典型的一个例子。呵呵
[color=red]Optimization[/color] In Progress . . . Welcome to http://mail.ustc.edu.cn/~chyang/
smile525
驱动牛犊
驱动牛犊
  • 注册日期2005-10-27
  • 最后登录2011-12-15
  • 粉丝1
  • 关注0
  • 积分112分
  • 威望13点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-02-22 15:29
顶就一个字
原来,人生不过是一场梦!
zhaoyanghong
驱动小牛
驱动小牛
  • 注册日期2004-11-13
  • 最后登录2008-08-05
  • 粉丝0
  • 关注0
  • 积分341分
  • 威望92点
  • 贡献值0点
  • 好评度91点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-02-25 09:19
linux没有象windows那样统一抽象接口,有人做这个工作吗?---统一抽象接口会数据包变大影响效率和失去灵活性.
游客

返回顶部