zoukankan      html  css  js  c++  java
  • 即插即用型设备驱动的加载过程

    抄来的 https://blog.csdn.net/sunliangyuan/article/details/99768649

    现假设驱动程序已被正确安装:
    1.某种PnP总线驱动发现了即插即用设备的存在:
    ①对于热插拔设备,则发现过程发生于插入设备的瞬间;
    ②如果是非热插拔设备,则发现过程发生于系统启动时
    2.PnP总线驱动利用即插即用协议询问设备的ID信息
    设备的ID信息是一个能够唯一标识该设备的字符串,一般格式为:总线类型&厂商ID&产品ID&设备ID&版本号
    3.PnP总线驱动将该ID信息上报给OS
    4.OS利用该设备ID信息查找硬件键(注册表HKLM SYSTEMCurrentControlSetEnum的某个子目录)
    5.OS查找到该设备的硬件键之后,再通过硬件键的Service子键查到该设备的服务键(HKLMSYSTEM CurrentControlSetServices的某个子目录)
    6.通过服务键的ImagePath子键的值就可以找到该设备所对应的驱动程序。
    7.OS扫描内存,看该驱动是否已被加载,如果没有,则立即加载该驱动,并调用该驱动的“DiverEnry”回调函数。
    8.加载完毕之后,OS调用该驱动的“AddDevice”回调函数通知驱动程序有新的设备到来。
    9.PnP总线驱动利用即插即用协议询问设备的I/O资源请求,并将请求信息上报给OS;
    10.OS根据目前系统资源使用情况进行资源分配,并将分配结果反馈给总线驱动和该设备的驱动;
    11.现在该设备的硬件和驱动都知道了资源分配结果就可以正常工作了。
  • 相关阅读:
    Binary Tree Maximum Path Sum
    ZigZag Conversion
    Longest Common Prefix
    Reverse Linked List II
    Populating Next Right Pointers in Each Node
    Populating Next Right Pointers in Each Node II
    Rotate List
    Path Sum II
    [Leetcode]-- Gray Code
    Subsets II
  • 原文地址:https://www.cnblogs.com/a-s-m/p/12374310.html
Copyright © 2011-2022 走看看