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。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//
// 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/

发表回复

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