【我所认知的BIOS】—> uEFI AHCI Driver(1) — uEFI开始其实不是很复杂

本文介绍了BIOS中的uEFI AHCI驱动,通过比喻将driver理解为司机,解释了驱动如何使硬件按照预定步骤运行,探讨了uEFI驱动的简单性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【我所认知的BIOS】—> uEFI AHCI Driver(1) — uEFI开始其实不是很复杂

LightSeed

3/15/2014

有人问过没?啥叫driver?不就是司机么?其实这一点都没错,driver的中文意思却是有司机的意思。只是在英文的世界里面,他们也有一词多义,但是他们的根本意思都是一样的。你看司机把一堆冷冰冰的铁块块就这么驾驶起来,让它动起来了。汽车还能够在司机的驾驶操作下面完成多很很让人惊讶的事情,比如前空翻呀,侧空翻呀,或者自燃呀什么的。。。反正就是感觉很厉害。

软件领域的driver完全就是这个意思,软件写成的一堆代码模拟出了一个司机这样的一个虚拟人来,在特定的时候让硬件按照规定好的步骤去做事,所以就叫做驱动,让一堆铁块块动起来了。


[右键点击图片,在新窗口打开是可以放大看的]


### UEFI环境下AHCI的初始化过程 在UEFI环境中,AHCI(Advanced Host Controller Interface)的初始化是一个复杂的过程,涉及多个协议和驱动程序的加载与执行。以下是对AHCI初始化过程的详细描述: #### 1. EFI_DRIVER_BINDING_PROTOCOL 的安装 AHCI驱动程序的核心是通过 `EFI_DRIVER_BINDING_PROTOCOL` 协议实现的。这个协议的主要作用是将驱动程序绑定到特定的设备上[^4]。AHCI驱动程序在初始化时会创建一个 `EFI_DRIVER_BINDING_PROTOCOL` 的实例,并将其安装到对应的 `ImageHandle` 上[^4]。 #### 2. Supported() 方法的调用 当系统需要判断某个设备是否支持 AHCI 模式时,会调用 `Supported()` 方法。此方法会检查设备是否符合 AHCI 的规范,并返回相应的结果。如果设备支持 AHCI,则继续进行初始化;否则,跳过该设备[^4]。 #### 3. Start() 方法的调用 一旦确认设备支持 AHCI,系统会调用 `Start()` 方法来初始化设备。在此过程中,AHCI 驱动程序会执行以下操作: - 配置 AHCI 控制器的寄存器。 - 初始化中断处理机制。 - 加载并注册 `EFI_ATA_PASS_THRU_PROTOCOL` 协议,以便后续可以通过该协议访问 SATA 设备。 #### 4. EFI_ATA_PASS_THRU_PROTOCOL 的功能 `EFI_ATA_PASS_THRU_PROTOCOL` 是一个可选协议,用于封装 IDE 和 AHCI 等不同 SATA 控制器模式的操作。通过该协议,可以以统一的方式访问挂载在 SATA 控制器下的设备。 #### 5. Stop() 方法的调用 当需要卸载 AHCI 驱动程序时,系统会调用 `Stop()` 方法。此方法会释放所有分配的资源,并从设备上移除 `EFI_DRIVER_BINDING_PROTOCOL` 和 `EFI_ATA_PASS_THRU_PROTOCOL` 等协议。 #### 示例代码:AHCI 驱动程序入口点 以下是 AHCI 驱动程序入口点的一个示例代码片段: ```c EFI_STATUS EFIAPI InitializeAtaAtapiPassThru(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable) { EFI_STATUS Status; // 初始化驱动程序绑定协议 Status = AhciDriverBindingConstructor(ImageHandle, SystemTable); if (EFI_ERROR(Status)) { return Status; } // 安装其他必要的协议 return EFI_SUCCESS; } ``` ### 常见问题及解决方案 1. **设备无法识别 AHCI 模式** - 可能原因:BIOS 设置未正确配置为 AHCI 模式。 - 解决方案:进入 BIOS 设置界面,将存储控制器模式设置为 AHCI[^3]。 2. **驱动程序加载失败** - 可能原因:驱动程序文件损坏或不兼容。 - 解决方案:确保使用正确的 `.efi` 文件,并验证其版本是否与系统兼容[^1]。 3. **SATA 设备无法访问** - 可能原因:`EFI_ATA_PASS_THRU_PROTOCOL` 未正确注册。 - 解决方案:检查驱动程序是否成功调用了 `Start()` 方法,并确认协议已正确安装。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值