Step to UEFI (298)将 RU 装入 Shell 中

这次的实验是将 RU 内置在Shell 中,当你输入 zru 之后就可以执行 RU(特别命令为 zru 是为了和 ru 避免冲突)。代码是基于之前的 MyCmd 实现的。特别需要注意的地方是 RuCommand.c 文件中的 MyShellCommand() 函数中,我们调用 LoadImage 需要传递 ParentImageHandle, 但是MyShellCommand(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable) 传递进来的ImageHandle一直是0。这样会导致LoadImage调用失败。因此,这里使用了gImageHandle,给出的是 UEFI Shell 的 Handle。

        //
        // Load the image with:
        //
        Status = gBS->LoadImage(
                        FALSE,
                        gImageHandle,
                        DP,
                        (VOID*)&ru_efi[0],
                        ru_efi_size,
                        &NewHandle);     
        if (EFI_ERROR(Status)) {
                Print(L"Load image Error! %r\n",Status);
                return 0;
        }

最终生成的完整 UEFI Shell:

完整的代码(基于 EDK2 202411 ):

这样做的好处是方便用户使用,只用一个文件就可以实现很多功能,缺点是:更新内容不太容易。

参考:

1. https://www.lab-z.com/stu165/

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注