02.Mac OS X驱动程序的匹配和加载 20100628.ppt
文本预览下载声明
Mac OS X 驱动程序的匹配和加载 终端MMB产品线 驱动组 目录 第一章 驱动程序的匹配信息 匹配信息是指设备的固有属性,例如idVendor,idProduct,bcdDevice等,当设备插入时,系统会根据设备的这些属性为设备加载合适的驱动。 在Mac系统中,驱动文件(例如HuaweiDataCardACMData.kext)都对应了一个info.plist文件,其中的IOKitPersonalities段记录了该驱动可匹配设备的信息。 IOKitPersonalities USB设备驱动的匹配 对于一个特定的 USB 设备,IOUSBFamily 与 I/O Kit 共同作用,探测相关驱动的匹配度数值IOProbeScore,这个数值来源于驱动程序中Info.plist 的相应匹配关键字的匹配结果。 系统在候选驱动程序中选出IOProbeScore 最大的一个作为最终匹配的驱动。注意,不能添加额外的匹配字。下面的表格显示探测匹配度数值的原则: 匹配 USB 设备接口的属性组合 匹配 USB 设备的属性组合 第二章 kextd kextd 驱动程序的管理进程(运行在用户态)。 检测所有驱动程序文件 生成驱动程序的缓存 向操作系统内核提供驱动程序的匹配信息 驱动程序的安装步骤: Step 1: 把.kext复制到/System/Library/Extensions目录下 Step 2: 给.kext设置正确的权限:chown –R root:wheel, chmod –R 755 Step 3: 执行touch / System/Library/Extensions 命令 Step 4: 向kextd进程发送HUP消息 上述第3,4步不是必须的,但是如果不执行它们,则必须重新启动机器才能让新安装的驱动生效。 驱动程序的匹配 驱动程序的匹配是为连接到系统上的硬件设备寻找最合适的驱动程序的过程。 驱动程序的匹配主要在两种情况下发生: 操作系统每次启动时 当有新的硬件设备连接到正在运行的系统上时 驱动程序的匹配 当新的设备被系统检测到之后,首先会生成一个结点对象。随后,I/O Kit框架就会分三个不同的阶段,逐个阶段对候选驱动程序对象进行筛减,来为该结点找到并装载最合适的驱动程序: Step 1: 类匹配,即检查kextd提供的所有驱动程序的匹配信息,如果其声明的IOProviderClass的类型和此设备结点的类型不同,则此驱动程序被排除在外。 Step 2: 被动匹配,即确定provider的家族专用的属性是否匹配。 Step 3: 主动匹配,即驱动程序自身通过判断provider(即结点)的一些属性来确定是否要加载到该结点上。 驱动程序的匹配 在被动匹配过程中,所有满足类匹配的驱动程序的匹配信息会被依次传入结点的这个函数中: 此函数会解析驱动程序的匹配信息,并计算出对应的IOProbeScore。I/O Kit根据这个匹配分数来找出最合适的驱动程序—即分数越高越则驱动匹配的优先级越高。 从IOUSBInterface的源代码中可以看出,我们前面所说的USB设备和接口的驱动匹配度数值是如何计算出来的。 驱动程序的匹配 在主动匹配过程中,I/O Kit会为所有的候选驱动创建实例,并依次调用这些驱动中的下面几个函数: Step 1: bool init(OSDictionary *properties); Step 2: bool attach(IOService *provider); Step 3: IOService* probe(IOService *provider, SInt32* score); 驱动程序的加载 在上述驱动程序匹配过程完成之后,匹配分数最高的驱动程序的start()函数会被调用。 start()函数的作用是对硬件设备和驱动程序进行初始化。 当start()函数完成初始化,并返回true时,其它候选驱动的实例就会被释放。 如果start()函数返回false(即失败),则I/O Kit会将此驱动从结点上分离,随后尝试加载匹配积分次高的候选驱动。 第三章 kextload kextutil * 1. 驱动程序的匹配信息 2. 驱动程序的匹配和加载 3. kextload和kextutil命令 1. 驱动程序的匹配信息 2. 驱动程序的匹配和加载 3. kextload和kextutil命令 驱动程序的唯一标识 驱动程序的类名 驱动程序的Provider类 USB设备的特有匹配信息 50000 仅当 bDeviceClass 非 0xFF 时 bInterfaceClass + bInterfaceSubClass 60000
显示全部