【问题标题】:UEFI Shelllib - ASSERT implies initialization of ShellLib?UEFI Shelllib - 断言意味着 ShellLib 的初始化?
【发布时间】:2016-06-08 04:37:24
【问题描述】:

我想方便地控制命令行参数。因此我想使用 ShellLib。

我的代码如下所示:

...
#include <Library/ShellLib.h>
...
EFI_STATUS
EFIAPI
UefiMain (
    EFI_HANDLE        ImageHandle,
    EFI_SYSTEM_TABLE  *SystemTable
  )
{
    EFI_STATUS  Status;
    LIST_ENTRY  *ParamPkg;
    CHAR16      *ProblemParam;

    Status = ShellCommandLineParseEx (CmdLineCheckList, &ParamPkg, &ProblemParam, TRUE, FALSE);
...
}

我也初始化了CmdLineCheckList。但是当我运行程序时,我得到一个

ASSERT: UefiShellLib.c (2242): mEfiShellInterface != (void *) 0

我查看了代码行,似乎没有调用 ShellLibConstructor()。但它应该来自 shell 本身,除了直接调用 ShellCommandLineParseEx 之外,我也找不到执行某些操作的示例。 由于包含问题,我也未能手动启动构造函数。

您能帮我如何正确初始化我的应用程序以运行 ShellLib 吗?

【问题讨论】:

  • 我现在设法手动调用构造函数 - 没有帮助。 ShellCOMmandLineParseEx 检查代表旧 EFI shell 和新 EFI shell 的两个变量。如果我调用相应的代码 sn-p 来检查这些表示,它将返回新 EFI shell 的代码 - 我看不出它为什么会失败。
  • 虽然使用隐蔽的脏话可以有效地表达您对手头的编码问题的挫败感,但在公共场合是不合适的。 (已编辑)问题本身是一个很好的问题,并且与发布的所有问题一样,应该以简洁和专业的方式发布。欢迎来到 SO,祝您编码顺利。

标签: c uefi


【解决方案1】:

这是一个从 ShellLib 访问参数的示例:https://github.com/tianocore/edk2/blob/master/ShellPkg/Application/ShellCTestApp/ShellCTestApp.c:

INTN
EFIAPI
ShellAppMain (
  IN UINTN Argc,
  IN CHAR16 **Argv
  )
{
  UINTN  Index;
  if (Argc == 1) {
    Print (L"Argv[1] = NULL\n");
  }
  for (Index = 1; Index < Argc; Index++) {
    Print(L"Argv[%d]: \"%s\"\n", Index, Argv[Index]);
  }

  return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2023-03-02
    相关资源
    最近更新 更多