C语言 如何在POSIX-UEFI中获取输入?

osh3o9ms  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(107)

我想做一个受DOS启发的UEFI操作系统,简单,是一个很好的起点。接受命令并运行这些命令,但我不太明白“接受命令”这一部分。在POSIX-UEFI中,uefi. h有一个自定义的printf,所以我假设它需要一个自定义的scanf,给定一个不同的I/O系统(有根据的猜测)。
我已经尝试了很多东西。我公然尝试在代码中放入scanf,但我得到了一个隐式函数声明警告,所以uefi. h中没有scanf。我搜索了很多东西,但没有得到任何与我的问题相关的东西,所以我来到这里。
提前感谢:).

laik7k3q

laik7k3q1#

从外观上看,您最终直接使用了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的东西来解析缓冲区的内容。

参考

uefi.h

vojdkbi0

vojdkbi02#

在POSIX-UEFI中,由于其I/O系统的不同,处理用户输入可能会有所不同。由于uefi. h中不显式支持scanf,因此您可能需要为受DOS启发的操作系统实现自定义输入函数。请考虑探索其他方法,例如解析输入缓冲区或使用可用的UEFI功能创建自定义输入处理程序以实现命令接收。

相关问题