一. UEFI shell 基础内置命令
其命令实现在ShellPkg/Library下:
主要有调试(Debug1),驱动(Driver1),网路(NetWork1),网路(NetWork2),安装(Install1),Level1,Level2,Level3。
1. Shell命令的通用选项
命令行参数 | 作用 |
---|---|
-b,-break | 输出信息分屏显示 |
-q,-quit | 不输出任何信息 |
-t,-terse | 用简洁格式输出信息 |
-sfo | 用标准格式输出 |
-? | 输出帮助信息 |
想要查询特定的命令,使用
help cmd
或者
cmd -?
2. 基础命令汇总
基础命令已经集成在shell内部,可以使用用help查看
命令 | 功能 |
---|---|
alias | 显示,创建,删除别名 |
attrib | 显示,更改文件或目录属性 |
bcfg | 管理启动项 |
cd | 更改当前目录 |
cls | 清空标准输出 |
comp | 比较两个文件 |
connect | 将driver绑定到指定的设备并启动driver |
cp | 将文件或文件夹复制到另一个位置 |
date | 显示或设置日期 |
dblk | 显示块设备里的块 |
devices | 列出所有设备 |
devtree | 显示设备树 |
dh | 显示设备句柄 |
disconnect | 从指定设备卸载驱动 |
dmem | 显示系统或设备内存的内容 |
dmpstore | 管理UEFI NVRAM变量 |
drivers | 显示设备驱动 |
drvcfg | 配置驱动 |
drvdiag | 调动Driver Disgnostis Protocol |
echo | 回显 |
edit | 编辑ASCII或UCS-2文件 |
eficompress | 压缩文件 |
efidecompress | 解压文件 |
exit | 退出Shell或脚本 |
help | 显示帮助 |
hexedit | 二进制编辑器,可编辑文件,块设备或内存 |
ifconfig | 配置IP地址 |
load | 加载UEFI驱动 |
loadpcirom | 加载PCI ROM |
ls | 列出目录内容或文件信息 |
map | 显示Mapping |
memmap | 显示目录映射 |
mkdir | 创建目录 |
mm | 列出或修改MEM/MMIO/IO/PCI/PCIE地址空间 |
mode | 列出或修改输出设备的模式 |
mv | 移动文件或目录 |
openinfo | 显示Protocols打开信息 |
pause | 暂停执行脚本,等待用户输入 |
pci | 显示PCI设备 |
ping | ping |
reconnect | 重新连接驱动与设备 |
reset | 重启系统 |
rm | 删除文件或目录 |
setmode | 设置串口属性 |
set | 显示或修改Shell中的环境变量 |
setsize | 调整文件大小 |
setvar | 设置UEFI变量 |
smbiosview | 显示SMBIOS信息 |
stall | 在指定的时间内暂停执行 |
time | 显示/设置时区 |
timezone | 显示/设置时区 |
touch | 更新文件时间设置 |
type | 显示文件类型 |
unload | 卸载驱动 |
vol | 显示/设置卷标 |
二. 写一个UEFI shell的内置命令
参考edk2/ShellPkg/Library/UefiShellNetwork1CommandsLib
源文件
1.inf文件
PATH:
edk2/ShellPkg/Library/UefiShellMyWriteCommandsLib/UefiShellMyWriteCommandsLib.inf
## @file
# Provides shell my write functions
#
#
#
##
[Defines]
INF_VERSION = 0x00010006
BASE_NAME = UefiShellMyWriteCommandsLib
FILE_GUID = 9A933F7E-3861-45ce-87AB-7221219AE255
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
LIBRARY_CLASS = NULL|UEFI_APPLICATION UEFI_DRIVER
CONSTRUCTOR = ShellMyWriteCommandsLibConstructor
DESTRUCTOR = ShellMyWriteCommandsLibDestructor
[Sources.common]
MyWriteCmd.c
UefiShellMyWriteCommandsLib.uni
UefiShellMyWriteCommandsLib.c
UefiShellMyWriteCommandsLib.h
[Packages]
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
MdeModulePkg/MdeModulePkg.dec
[LibraryClasses]
MemoryAllocationLib
BaseLib
BaseMemoryLib
DebugLib
ShellCommandLib
ShellLib
UefiLib
UefiRuntimeServicesTableLib
UefiBootServicesTableLib
PcdLib
HiiLib
FileHandleLib
[Pcd]
gEfiShellPkgTokenSpaceGuid.PcdShellProfileMask ## CONSUMES
[Protocols]
[Guids]
gShellMyWriteHiiGuid ## SOMETIMES_CONSUMES ## HII
2. Lib C文件
PATH:
edk2/ShellPkg/Library/UefiShellMyWriteCommandsLib/UefiShellMyWriteCommandsLib.c
/** @file
Main file for NULL named library for My Write shell command functions.
**
**
**/
#include "UefiShellMyWriteCommandsLib.h"
#include "UefiShellMyWriteCommandsLib.h"
CONST CHAR16 gShelMyWriteFileName[] = L"ShellMyWriteCommands";
EFI_HII_HANDLE gShellMyWriteHiiHandle = NULL;
/**
return the file name of the help text file if not using HII.
@return The string pointer to the file name.
**/
CONST CHAR16*
EFIAPI
ShellCommandGetManFileNameMyWrite (
VOID
)
{
return (gShelMyWriteFileName);
}
/**
Constructor for the Shell My Write Commands library.
Install the handlers for My Write UEFI Shell 2.0 profile commands.
@param ImageHandle The image handle of the process.
@param SystemTable The EFI System Table pointer.
@retval EFI_SUCCESS The shell command handlers were installed sucessfully.
@retval EFI_UNSUPPORTED The shell level required was not found.
**/
EFI_STATUS
EFIAPI
ShellMyWriteCommandsLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
gShellMyWriteHiiHandle = NULL;
//
// check our bit of the profiles mask
//
if ((PcdGet8(PcdShellProfileMask) & BIT3) == 0) {
return (EFI_SUCCESS);
}
gShellMyWriteHiiHandle = HiiAddPackages (
&gShellMyWriteHiiGuid,
gImageHandle,
UefiShellMyWriteCommandsLibStrings,
NULL
);
if (gShellMyWriteHiiHandle == NULL) {
return (EFI_DEVICE_ERROR);
}
//
// install our shell command handlers
//
ShellCommandRegisterCommandName(
L"MyWriteCmd",
ShellCommandRunMyWrite,
ShellCommandGetManFileNameMyWrite,
0,
L"MyWriteCmd",
TRUE,
gShellMyWriteHiiHandle,
STRING_TOKEN(STR_MY_WRITE_HELP_PING)
);
return (EFI_SUCCESS);
}
/**
Destructor for the library. free any resources.
@param ImageHandle The image handle of the process.
@param SystemTable The EFI System Table pointer.
**/
EFI_STATUS
EFIAPI
ShellMyWriteCommandsLibDestructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
if (gShellMyWriteHiiHandle != NULL) {
HiiRemovePackages(gShellMyWriteHiiHandle);
}
return (EFI_SUCCESS);
}
3. Lib H文件
PATH:
edk2/ShellPkg/Library/UefiShellMyWriteCommandsLib/UefiShellMyWriteCommandsLib.h
/** @file
header file for NULL named library for my write shell command functions.
**/
#ifndef _UEFI_SHELL_MYWRITE_COMMANDS_LIB_H_
#define _UEFI_SHELL_MYWRITE_COMMANDS_LIB_H_
#include <Uefi.h>
#include <Guid/ShellLibHiiGuid.h>
#include <Protocol/Cpu.h>
#include <Protocol/ServiceBinding.h>
#include <Protocol/Arp.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PcdLib.h>
#include <Library/ShellCommandLib.h>
#include <Library/ShellLib.h>
#include <Library/SortLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/HiiLib.h>
#include <Library/DevicePathLib.h>
#include <Library/PrintLib.h>
extern EFI_HII_HANDLE gShellMyWriteHiiHandle;
/**
Function for 'ping' command.
@param[in] ImageHandle Handle to the Image (NULL if Internal).
@param[in] SystemTable Pointer to the System Table (NULL if Internal).
**/
SHELL_STATUS
EFIAPI
ShellCommandRunMyWrite (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
#endif
4.UNI文件
PATH:
edk2/ShellPkg/Library/UefiShellMyWriteCommandsLib/UefiShellMyWriteCommandsLib.uni
// /**
//
//
//
//
// String definitions for UEFI Shell 2.0 my write commands
//
//
// **/
/=#
#langdef en-US "english"
#string STR_MY_WRITE_HELP_PING #language en-US ""
"------------------------------------------\r\n"
"------------------------------------------\r\n"
"test write uefi shell cmd for help !!! ...\r\n"
"------------------------------------------\r\n"
"------------------------------------------\r\n"
5. cmd C文件
PATH:
edk2/ShellPkg/Library/UefiShellMyWriteCommandsLib/MyWriteCmd.c
/** @file
The implementation for Shell command my write
(C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "UefiShellMyWriteCommandsLib.h"
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
{L"-v", TypeValue},
{L"-h", TypeValue},
{NULL, TypeMax}
};
/**
Function for my write command.
@param[in] ImageHandle Handle to the Image (NULL if Internal).
@param[in] SystemTable Pointer to the System Table (NULL if Internal).
@retval SHELL_SUCCESS The command completed successfully.
@retval Others The command failed.
**/
SHELL_STATUS
EFIAPI
ShellCommandRunMyWrite (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
LIST_ENTRY *CheckPackage;
CHAR16 *ProblemParam;
Status = ShellInitialize ();
ASSERT_EFI_ERROR (Status);
Status = ShellCommandLineParse (ParamList, &CheckPackage, &ProblemParam, TRUE);
ASSERT_EFI_ERROR (Status);
if (ShellCommandLineGetFlag (CheckPackage, L"-v")) {
ShellPrintEx (-1, -1, L"%V v1.0 %N\r\n");
return SHELL_SUCCESS;
}
if (ShellCommandLineGetFlag (CheckPackage, L"-h")) {
//ShellPrintEx (-1, -1, L"%V my write cmd for help... %N\r\n");
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_MY_WRITE_HELP_PING), gShellMyWriteHiiHandle, L"MyWriteCmd");
return SHELL_SUCCESS;
}
Print (L"this is my write cmd !\n");
return SHELL_SUCCESS;
}
操作
- 把该工程文件添加到OvmfPkg编译
PATH:
edk2/OvmfPkg/OvmfPkgX64.dsc
<LibraryClasses>
ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf
NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf
NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf
#my write ...
NULL|ShellPkg/Library/UefiShellMyWriteCommandsLib/UefiShellMyWriteCommandsLib.inf
#my write ....