阅读:1412回复:4
两个弱问, 不要见笑
1 请问设备与驱动是怎么联系在一起的
对不住了,弱了 就是想问,驱动怎么知道它该控制哪个设备呢? 比如有两块网卡,eth0 , eth1 eth0 的 驱动程序怎么知道把发送数据的命令发给eth0,而不是eth1 而 eth0 在接收到数据后,怎么知道把处理权交给其驱动程序,而不是eth1的处理程序? 2 谁能说说2k中在陷入内核时的栈切换过程呀??? 内核态的栈当前值在哪保存的呀??? 谢谢 [编辑 - 11/15/04 by comealong] |
|
沙发#
发布于:2004-11-16 10:58
第一个问题很多讲驱动的书应该都要讲的。
|
|
|
板凳#
发布于:2004-11-16 10:34
谢谢各位大侠
hehe,原来各环的esp ss 保存在tss里 以前看的时候,也没往心里去 第一个问题还是没弄明白 哪位大哥能不能说说,要弄明白该看哪些书呀 [编辑 - 11/16/04 by comealong] |
|
地板#
发布于:2004-11-16 07:19
第二个问题
How do Windows NT System Calls REALLY work? http://www.summitsoftconsulting.com/NtSystemCalls.htm |
|
地下室#
发布于:2004-11-16 06:48
第一个问题...
如果自己的驱动都不知道自己在控制什么设备...那还有谁会知道某个驱动在操作哪个设备呢...呵呵... 一般的讲..一个设备对应一个pdo,一个pdo上面会有一个fdo..os会把对设备的请求发送到你的fdo..fdo有责任保存他对应的pdo的指针..这样就能操作设备了... 至于你举的网卡的例子...复杂多了...你要发送出去的数据..不仅仅是发送到某个网卡这么简单的... fdo当然知道自己操作的硬件是什么了..其实也没有必要去区分某个硬件..以为一般的讲..操作硬件并不需要知道自己的硬件是哪个..而只是需要跟这个硬件相关联的信息..比如寄存器.比如中断..这些就是区分硬件的方式..如果你要问这些信息是怎么来的..那就跟麻烦了...呵呵 第二个问题intel架构下的这些东西都保存在一个tss结构里面..你可以查查intel的资料...那个vol3 system programming.. 至于windows嘛...稍微有些不同..windows会把这些信息保存到kernel thread block里面...大致的讲..windows能从fs:[xx]里面寻址到这个东西..然后更新诸多的寄存器....你可以看看windows的源代码 以上....都为回忆的结果...不一定对 |
|