在EFI模式下启动是否意味着我无法访问BIOS中断?

Lor*_*oh. 3 boot operating-system bios osdev efi

我正在尝试开发一个简单的操作系统.我以前做过一些装配程序,不得不INT 10h用来在屏幕上显示字符.我知道UEFI支持传统BIOS,并且仍然可以使用INT 10h服务.但是,如果我选择构建纯UEFI可引导操作系统,我应该避免使用INT 10h吗?或者我是以错误的方式看事情的?

换句话说,它的向下钻取printfstdout(屏幕)最终调用的BIOS INT 10h?或者是问题 - " SYS_WRITE函数调用基于INT 10h吗?" 更合适?

我是否仍然需要创建一个512字节的引导扇区并将它们作为第0扇区放在磁盘(或磁盘映像)上?该位置是否0x7c00具有重要意义?

Sec*_*att 6

如果您的引导加载程序是UEFI引导加载程序(您将知道它是否),那么您可能根本不使用BIOS,包括int 0x10 - 您必须使用UEFI引导服务,它提供BIOS否则将为传统引导系统提供的所有功能.

如果您没有编写UEFI引导加载程序,但您的硬件已启用UEFI,则引导加载程序将以"传统"模式加载,您将能够像以前一样使用BIOS.

或者换句话说,您的启动映像可以是UEFI引导加载程序,也可以是旧版BIOS映像.传统BIOS映像无法使用UEFI,UEFI引导加载程序无法使用BIOS.

换句话说,向下钻取printf到stdout(屏幕)最终调用BIOS INT 10h?或者是问题 - "SYS_WRITE函数是否基于INT 10h调用?" 更合适?

取决于谁写了你的printf函数(你是操作系统,你下面没有人).如果你调用Int 0x10并且没有设置IDT来处理它作为调用UEFI来向屏幕写入一个字符,那么你只是使用未定义的行为.

我是否仍然需要创建一个512字节的引导扇区并将它们作为第0扇区放在磁盘(或磁盘映像)上?0x7c00的位置是否具有重要意义?

不,不.UEFI支持更大的引导加载程序,并且不会加载到0x7C00.如果您想知道哪些内存区域具有特殊意义,您必须要求UEFI为您提供内存映射.