我想做一个受DOS启发的UEFI操作系统,简单,是一个很好的起点.接受命令并运行这些命令,但我不太理解"接受命令"这一部分.在POSIX-UEFI中,uefi.h有一个定制的printf,所以我假设它需要一个定制的scanf,给出一个不同的I/O系统(有根据的猜测).
我试过好几种方法.我明目张胆地try 将scanf放入我的代码中,但收到了一个隐式函数声明警告,因此uefi.h中似乎没有scanf.我搜索了很多东西,但没有找到任何与我的问题相关的东西,所以我来到了这里.
提前感谢:).
我想做一个受DOS启发的UEFI操作系统,简单,是一个很好的起点.接受命令并运行这些命令,但我不太理解"接受命令"这一部分.在POSIX-UEFI中,uefi.h有一个定制的printf,所以我假设它需要一个定制的scanf,给出一个不同的I/O系统(有根据的猜测).
我试过好几种方法.我明目张胆地try 将scanf放入我的代码中,但收到了一个隐式函数声明警告,因此uefi.h中似乎没有scanf.我搜索了很多东西,但没有找到任何与我的问题相关的东西,所以我来到了这里.
提前感谢:).
从表面上看,您最终将(相当地)直接使用UEFI服务.在启动期间,它将一个名为ST
的全局变量初始化为指向UEFI系统表,该表如下所示(uefi.h,第846行):
typedef struct {
efi_table_header_t Hdr;
wchar_t *FirmwareVendor;
uint32_t FirmwareRevision;
efi_handle_t ConsoleInHandle;
simple_input_interface_t *ConIn;
efi_handle_t ConsoleOutHandle;
simple_text_output_interface_t *ConOut;
efi_handle_t ConsoleErrorHandle;
simple_text_output_interface_t *StdErr;
efi_runtime_services_t *RuntimeServices;
efi_boot_services_t *BootServices;
uintn_t NumberOfTableEntries;
efi_configuration_table_t *ConfigurationTable;
} efi_system_table_t;
要从键盘上读取,您将使用ConIn
,它是指向simple_input_interface_t
的指针,其定义如下(uefi.h,第576行):
typedef struct {
efi_input_reset_t Reset;
efi_input_read_key_t ReadKeyStroke;
efi_event_t WaitForKey;
} simple_input_interface_t;
在猜测中,您可能想要分配一个合理大小的缓冲区.然后使用WaitForKey
/ReadKeyStroke
读取关键点并将它们保存到缓冲区,直到得到回车.
然后,您可以使用类似sscanf
的代码来解析缓冲区的内容.