用 C 编写的 UEFI 二进制文件在 UEFI 中运行时不会选择文本文件

Posted

技术标签:

【中文标题】用 C 编写的 UEFI 二进制文件在 UEFI 中运行时不会选择文本文件【英文标题】:UEFI binary written in C not picking text file while running in UEFI 【发布时间】:2021-12-21 20:18:27 【问题描述】:

我有以下代码。 efi 二进制文件和 new.txt 放置在同一位置。但看起来 fopen 没有捕获位于同一目录中的文本文件。可能是什么原因?

#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <string.h>


int main(int argc, char** argv)

    FILE* filePointer;
    const char* filename = "new.txt";
    int wordExist = 0;
    const int bufferLength = 255;
    char search[100];
    char line[bufferLength];
    filePointer = fopen(filename, "r");
    if (filePointer != NULL) 
        printf("correct method \n ");
    
    else 
        printf("not correct \n");
    
    for (int i = 0; i < 7; i++) 
        printf("%d \n", i);
    
    return 0;

我得到的输出: 不正确 0 1 2 3 4 5 6

我期待的输出: 正确的方法 0 1 2 3 4 5 6

【问题讨论】:

不清楚这段代码与 UEFI 的关系。您能否显示确切的预期结果与实际结果? 当前输出:不正确 0 1 2 3 4 5 6,我期望的是:正确的方法 0 1 2 3 4 5 6 我只是检查 fopen 是否正在选择文本文件,但在 UEFI shell 中运行时它没有选择。 我相信fopen。工作目录可能不是你想象的那样。如果在 posix 系统上,则调用 getcwd 以确认当前工作目录。 这些不是 UEFI 接口 - 您使用什么框架来构建代码? 【参考方案1】:

我假设您将 edk2 与 edk2-libc 一起使用。

确保将“DevShell”添加到应用程序 .inf 文件的“[LibraryClasses]”部分。

如果您尝试在没有 UEFI shell 的情况下运行程序,fopen 将失败。

【讨论】:

以上是关于用 C 编写的 UEFI 二进制文件在 UEFI 中运行时不会选择文本文件的主要内容,如果未能解决你的问题,请参考以下文章

nvme固态uefi启动主磁盘文件系统类型

UEFI 实战 HelloWorld 之一 helloworld及.inf文件

UEFI 实战 HelloWorld 之一 helloworld及.inf文件

UEFI 学习 - 运行第一个DXE Driver

UEFI 学习 - 运行第一个DXE Driver

UEFI和GPT下硬盘克隆后的BCD引导修复