有没有办法在操作系统后面运行的 UEFI 运行时驱动程序中模拟 I/O 设备(例如超级 IO 控制器)?
问问题
310 次
1 回答
1
您将需要创建一个 SMM 驱动程序来捕获特定的 I/O 范围,生成 SMI,它将这些访问路由到您的驱动程序。写入捕获的 I/O 范围的值可以由驱动程序从 CPU 保存状态区域检索,并由模拟设备的状态机进行相应处理。操作系统从捕获的 I/O 范围读取的值将由驱动程序返回,方法是替换 CPU 保存状态中 EAX 寄存器的保存状态,该值在 x86 系统上返回。
传统 BIOS 广泛使用此技术来模拟 8042 键盘控制器并在 BIOS 级别支持 USB HID 设备(AKA Legacy USB)。请注意,SMM 仅在 x86 系统上可用,并且非常依赖于平台,即您的驱动程序可以在一个平台上工作,但不能在另一个平台上工作。现代 UEFI 实现中有一个很好的 SMM 抽象级别,这有助于 SMM 代码的可扩展性,但不同芯片组的 I/O 捕获功能会有所不同。基于 SMM 的仿真功能在 AMD Geode 处理器中发挥到了极致,我们在其中仿真了大多数 PC 外围设备,不仅是 SuperIO,而且一直到音频和视频控制器。
于 2015-03-28T18:05:46.253 回答