UEFI规范驱动模型(二):驱动加载过程

上一节介绍了UEFI Driver模型的实现方式,本节介绍UEFI Driver的加载过程,驱动程序的加载分为两个过程,即注册和执行:

        1、注册:在DXE阶段,通过LoadImage();函数驱动程序加载到内存,生成Image Handle,然后通过调用StartImage();调用驱动程序入口函数(xx.inf文件中定义的EntryPoint函数),入口函数中通过DRIVER_BINDING_PROTOCOL类型的实例,将驱动程序(Support();、Start();、Stop();函数)注册到Image Handle上,仅是注册,驱动程序不会执行,即不会操作任何硬件。详细的代码实现过程为:

UEFI规范驱动模型(二):驱动加载过程_第1张图片

图1 DXE入口及启动DXE dispatcher


UEFI规范驱动模型(二):驱动加载过程_第2张图片

                                                                              图2 调用LoadImage函数,将驱动拷贝到内存

UEFI规范驱动模型(二):驱动加载过程_第3张图片

                                                        图3 调用StartImage函数,调用驱动模块EntryPoint();函数,实现驱动的注册


UEFI规范驱动模型(二):驱动加载过程_第4张图片

                                                                                     图4 PS2键盘驱动的EntryPoint函数

2、执行:DXE阶段驱动程序注册完成后,BDS阶段当查询到一个控制器后,会利用ConnectController() 函数为

该控制器寻找最好的驱动,通过调用该驱动的Support();函数确认是否支持该控制器,调用Start();函数启动该驱动。具

体代码实现过程为:

UEFI规范驱动模型(二):驱动加载过程_第5张图片

图1 调用gBS->ConnectController()函数,寻找合适驱动

UEFI规范驱动模型(二):驱动加载过程_第6张图片

图2-1 System table、Boot Service的初始化在DxeMain();函数中

UEFI规范驱动模型(二):驱动加载过程_第7张图片

图2-2 System table函数定义

UEFI规范驱动模型(二):驱动加载过程_第8张图片

图2-3 Boot Service函数定义

UEFI规范驱动模型(二):驱动加载过程_第9张图片

图3 gBS->connectcontroller()里调用support、start函数,检验驱动与激活驱动

你可能感兴趣的:(UEFI规范驱动模型(二):驱动加载过程)