我想做一个受DOS启发的UEFI操作系统,简单,是一个很好的起点。接受命令并运行这些命令,但我不太明白“接受命令”这一部分。在POSIX-UEFI中,uefi. h有一个自定义的printf,所以我假设它需要一个自定义的scanf,给定一个不同的I/O系统(有根据的猜测)。我已经尝试了很多东西。我公然尝试在代码中放入scanf,但我得到了一个隐式函数声明警告,所以uefi. h中没有scanf。我搜索了很多东西,但没有得到任何与我的问题相关的东西,所以我来到这里。提前感谢:).
laik7k3q1#
从外观上看,您最终直接使用了uefi服务(相当)。在启动期间,它将一个名为ST的全局变量命名为指向UEFI系统表,它看起来像这样(uefi.h,第846行):
ST
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行):
ConIn
simple_input_interface_t
typedef struct { efi_input_reset_t Reset; efi_input_read_key_t ReadKeyStroke; efi_event_t WaitForKey; } simple_input_interface_t;
型猜测一下,您可能希望分配一个合理大小的缓冲区,然后使用WaitForKey/ReadKeyStroke读取键并将它们保存到缓冲区中,直到您得到一个回车。然后可以使用类似sscanf的东西来解析缓冲区的内容。
WaitForKey
ReadKeyStroke
sscanf
uefi.h
vojdkbi02#
在POSIX-UEFI中,由于其I/O系统的不同,处理用户输入可能会有所不同。由于uefi. h中不显式支持scanf,因此您可能需要为受DOS启发的操作系统实现自定义输入函数。请考虑探索其他方法,例如解析输入缓冲区或使用可用的UEFI功能创建自定义输入处理程序以实现命令接收。
2条答案
按热度按时间laik7k3q1#
从外观上看,您最终直接使用了uefi服务(相当)。在启动期间,它将一个名为
ST
的全局变量命名为指向UEFI系统表,它看起来像这样(uefi.h,第846行):字符串
要从键盘读取,您将使用
ConIn
,这是一个指向simple_input_interface_t
的指针,其定义如下(uefi.h,第576行):型
猜测一下,您可能希望分配一个合理大小的缓冲区,然后使用
WaitForKey
/ReadKeyStroke
读取键并将它们保存到缓冲区中,直到您得到一个回车。然后可以使用类似
sscanf
的东西来解析缓冲区的内容。参考
uefi.h
vojdkbi02#
在POSIX-UEFI中,由于其I/O系统的不同,处理用户输入可能会有所不同。由于uefi. h中不显式支持scanf,因此您可能需要为受DOS启发的操作系统实现自定义输入函数。请考虑探索其他方法,例如解析输入缓冲区或使用可用的UEFI功能创建自定义输入处理程序以实现命令接收。