4. 使用UEFI Shell命令

任务目标

在UEFI Shell环境中,通过实际操作掌握常用命令(ls、cd、edit)的用法,并编写一个可执行的Shell脚本(.nsh文件),实现基本的文件操作与信息显示。

环境准备

  • 一台支持UEFI Shell的物理机或QEMU虚拟机(推荐使用QEMU + OVMF固件快速验证)。
  • 启动进入UEFI Shell(在OVMF启动菜单中通常有 UEFI Internal Shell 选项)。
  • 准备一个FAT32格式的USB驱动器或QEMU虚拟磁盘,用于存放脚本文件。

核心命令说明

命令功能示例
ls列出当前目录或指定路径下的文件与子目录ls FS0:\EFI
cd切换当前工作目录cd FS0:\EFI\BOOT
edit内置文本编辑器,可创建/修改文件edit FS0:\test.nsh
map显示当前映射的文件系统设备map
reset重启系统reset

操作步骤与脚本实现

以下操作均在UEFI Shell命令行中完成。首先通过 map 确认文件系统映射(通常第一个FAT分区为 FS0:)。

1. 目录导航与文件查看

FS0:\> ls
FS0:\> cd EFI\BOOT
FS0:\EFI\BOOT> ls -l

说明:ls -l 以长格式显示文件大小与属性。若需返回上级目录,使用 cd ..。

2. 使用 edit 创建Shell脚本

执行以下命令创建脚本文件:

FS0:\> edit FS0:\myscript.nsh

在编辑器中输入以下内容,然后按 Ctrl+S 保存,Ctrl+Q 退出:

@echo -off
echo "=== UEFI Shell Script Demo ==="
echo "Current directory: %cwd%"
ls
echo "Creating a test file..."
echo "Hello from UEFI Shell" > FS0:\hello.txt
echo "File content:"
type FS0:\hello.txt
echo "Script finished."

3. 运行Shell脚本

在Shell提示符下直接输入脚本文件名(无需扩展名)即可执行:

FS0:\> myscript.nsh

验证方法与通过标准

  • 脚本执行后,屏幕依次显示:=== UEFI Shell Script Demo ===、当前目录路径、目录列表、Creating a test file...、Hello from UEFI Shell、Script finished.。
  • 执行 type FS0:\hello.txt 能再次看到文件内容,证明文件写入成功。
  • 若脚本无法执行,检查文件是否以 .nsh 结尾,且文件系统为FAT格式(UEFI Shell不识别NTFS)。

常见问题

  • 脚本无法运行:确认文件编码为ASCII/UTF-8无BOM,且换行符为LF(Unix风格)。
  • 找不到文件系统:在QEMU中需确保磁盘已分区并格式化为FAT32,OVMF启动时按 Esc 进入固件设置,在 Boot Maintenance Manager 中确认启动顺序包含Shell。
  • edit编辑器无响应:部分Shell版本需先加载 edit 命令,可尝试 help edit 查看是否支持;若不支持,可用 echo 重定向方式创建脚本(见下方替代方案)。

替代方案:不使用edit创建脚本

若 edit 不可用,可通过逐行重定向创建脚本:

FS0:\> echo @echo -off > FS0:\myscript.nsh
FS0:\> echo echo "Hello" >> FS0:\myscript.nsh
FS0:\> echo ls >> FS0:\myscript.nsh

注意:> 创建新文件,>> 追加内容。此方法同样能生成可执行脚本。