构建EDK2 UEFI shell之Shell.efi

如何搭建EDK2开发环境以及编译UEFI程序,请参考:ubuntu20.04下搭建EDK2开发环境 。

编译EDK2 UEFI shell程序:

cd edk2
export WORKSPACE=$PWD
export EDK_TOOLS_PATH="$PWD/edk2/BaseTools"
export PACKAGES_PATH="$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi"
. edk2/edksetup.sh
build -a X64 -t GCC5 -p ShellPkg/ShellPkg.dsc 

编译完成后,在Build/Shell/DEBUG_GCC5/X64/ShellPkg/Application/Shell/Shell/OUTPUT/目录下会生成Shell.efi。

另:如果想通过U盘启动进入UEFI shell,自动执行某些命令,可以更改Shell源码,位于:ShellPkg/Application/Shell/,更改完成后重新编译生成Shell.efi。

自动执行UEFI shell的U盘制作步骤:

  1. 找一个U盘,格式化成FAT32,然后在U盘根目录下建立/efi/boot目录。
  2. 把Shell.efi改名成BOOTX64.efi,然后把BOOTX64.efi拷贝到U盘/efi/boot/目录下。
  3. U盘插入电脑,开机后按F10(不同厂商电脑可能有所不同)进入UEFI menu选择页面,选择从U盘启动。

然后就会自动进入UEFI Shell,然后执行你在Shell.efi里所加的操作。

UEFI shell下自动执行的脚本

进入了UEFI shell环境,会查找根目录下有没有startup.nsh脚本,如果有的话,会自动执行startup.nsh脚本。

我们如果想要调用其他UEFI程序,可以不用更改Shell.efi的源码来实现,可以在上述制作好的U盘的根目录下添加startup.nsh脚本,脚本里加上想要做的操作,实现起来更简单:

比如U盘在UEFI shell下的盘符为 FS0: ,我们想要执行myUefiApp.efi程序,startup.nsh脚本如下:

FS0:
MyUefiApp.efi

注意:上述FS0:的‘:’不能少,也可以用绝对路径执行MyUefiApp.efi,即 FS0:\MyUefiApp.efi 。

 

posted @ 2023-12-07 19:29  闹闹爸爸  阅读(730)  评论(0编辑  收藏  举报