上一次【参考1】介绍的屏幕旋转项目中还带有 Shell Command的内容。就是说可以把他调用驱动的Application”包”到Shell 中。这次介绍一下具体的实现。
源代码放置的位置目录和上一次实验相同。之后进行下面的步骤:
1.在 C:\EDK\ShellPkg\ShellPkg.dsc的
ShellPkg/Application/Shell/Shell.inf { <LibraryClasses> NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf !ifndef $(NO_SHELL_PROFILES) NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf !ifdef $(INCLUDE_DP) NULL|ShellPkg/Library/UefiDpLib/UefiDpLib.inf !endif #$(INCLUDE_DP) !endif #$(NO_SHELL_PROFILES) ##LABZDEBUG_Start NULL|GopRotatePkg/Library/GopRotateShellCommandLib/GopRotateShellCommandLib.inf ##LABZDEBUG_End }
2. 使用编译命令 重新编译 Shell。具体方法还可以在【参考2】看到
build by build -a IA32 -p ShellPkg\ShellPkg.dsc -b RELEASE
3.正常编译之后shell.efi 可以在这个目录中找到 C:\EDK\Build\Shell\RELEASE_MYTOOLS\IA32
4.从C:\EDK\Nt32Pkg\Nt32Pkg.fdf) 可以看到,NT32Pkg 用的是 FullShell
5.用生成的Shell .efi 替换C:\EDK\EdkShellBinPkg\FullShell\Ia32中的 Shell_Full.efi
6.用 Build 重新编译Nt32 项目,然后再用 Build run 运行模拟器
7.在模拟器中先加载Driver Load GopRotate.efi
8.枚举一下当前Shell中有 GraphicsOutput Protocol支持的 Device Handle。模拟器中有两个设备,分别对应2个窗口
下面是重新编译通过的 shell 有兴趣的朋友可以直接使用
参考:
1. http://www.lab-z.com/stu88/ Step to UEFI (88) 一个转屏驱动
2. http://www.lab-z.com/how2buildshell/ Step to UEFI (35) —– How to build Shell.efi
您好,
想请教您一个问题
"ShellBinPkg" and "EdkShellBinPkg" 里面都有 build 好的 shell binary
到底那一个才是我们平常说的 UEFI Shell 呢?
谢谢
我之前的实验是 shell_full 那个。具体你可以看一下之前的文章
http://www.lab-z.com/how2buildshell/
另外,最简单的方法是修改binary 的名称然后重新编译看看是否报错,这样很容易确定是哪个。