searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

简单开发UEFI Shell下的程序

2023-08-16 09:11:41
128
0

服务器UEFI固件提供了一个命令行界面UEFI Shell,可以允许用户无需安装操作系统来运行一些命令获取服务器的信息或执行操作。因此可以借助EDKII/UDK开源软件包构建UEFI开发环境,通过C/C++语言开发相应的应用程序通过框架编译后在UEFI Shell下运行。本文章简单介绍了环境搭建的过程和配置方法。

一、基本环境搭建

安装操作系统:Ubuntu 16.04.2 LTS
开发包:UDK2018开发包--因为EDKII包还是缺了不少的Package,所以这里选择了UDK开发包
开发包路径:~/src/MyWorkspace
编译工具:gcc --version :5.4.0
其它必须安装的软件:build-essential, uuid-dev, iasl, nasm,在Ubuntu下使用apt-get install安装即可
Python2.7.12:由于UDK开发包中有build.py存在,因此需要Python执行环境是必要的

二、配置开发环境

1.下载OpenSSL库,并放在~/src/Myworkspace/CryptoPkg/Library/OpensslLib/openssl/
2.进入~/src/MyWorkspace/Conf修改target.txt下面说明其中内容:
-- ACTIVE_PLATFORM:对应编译的工具包,可以指定自己创建的,比如我用的TestModulePkg
-- TARGET_ARCH:开发工具对应的架构,默认选择了X64
-- TOOL_CHAIN_TAG:编译工具版本,使用的GCC5,其中版本定义可以在Conf/tools_def.txt中看到
其它设置可以保持默认。
注:target.txt中其实设置了build的默认参数,我们完全可以在build的时候自己指定这些参数:
例如: build -a X64 -p TestModulePkg/TestModulePkg.dsc
3.在开发根目录(~/src/Myworkspace,以下均代表此路径)下运行:
. edksetup.sh #将开发包中工具等路径设置为环境变量;
4. 输入命令:build #无报错则环境正常,可以开始开发。
 

三、UEFI应用程序开发

1.创建应用程序代码存放的位置,在开发根目录创建一个自己的目录:TestModulePkg/Application
此时我们为自己的应用程序创建一个文件夹,里面包含该应用程序需要的.c文件、.inf文件等。.c文件为我们程序的主要代码文件。
.inf文件存放编译c文件必须的信息,包含版本、入口函数等一系列信息...
2.因为编译时需要使用很多库,所以我们编译时还是用现成的MdeModulePkg/MdeModulePkg.dsc
3.写好inf文件路径必须添加到MdeModulePkg.dsc中的[Components]下,并写好相对开发根目录的路径;
4.结束后使用build就可以在开发根目录下Build目录中按照build参数逐层找到编译出来的efi文件

四、在虚拟环境下实验自己开发的应用程序

1.注意到开发根目录下有OvmfPkg,直接build,会在/Build/OvmfX64/DEBUG_GCC5/FV下生成一个fd文件,OVMF.fd
2.使用qemu模拟器打开这个镜像文件,可以成功启动到UEFI Shell下;
qemu-system-x86_64 -bios OVMF.fd
3.如何把我们编写好的UEFI应用程序放进去呢?
-- 创建一个img镜像文件,使用dd if=/dev/zero of=dos.img bs=50M count=1
-- mkdosfs dos.img
-- mount dos.img /mnt
将efi文件放在/mnt下
-- umount /mnt
-- qemu-system-x86_64 -bios OVMF.fd -hdd dos.img
进入UEFI Shell后,输入fsx:进入dos.img目录中就可以找到并运行efi程序。
0条评论
0 / 1000
x****n
2文章数
0粉丝数
x****n
2 文章 | 0 粉丝
x****n
2文章数
0粉丝数
x****n
2 文章 | 0 粉丝
原创

简单开发UEFI Shell下的程序

2023-08-16 09:11:41
128
0

服务器UEFI固件提供了一个命令行界面UEFI Shell,可以允许用户无需安装操作系统来运行一些命令获取服务器的信息或执行操作。因此可以借助EDKII/UDK开源软件包构建UEFI开发环境,通过C/C++语言开发相应的应用程序通过框架编译后在UEFI Shell下运行。本文章简单介绍了环境搭建的过程和配置方法。

一、基本环境搭建

安装操作系统:Ubuntu 16.04.2 LTS
开发包:UDK2018开发包--因为EDKII包还是缺了不少的Package,所以这里选择了UDK开发包
开发包路径:~/src/MyWorkspace
编译工具:gcc --version :5.4.0
其它必须安装的软件:build-essential, uuid-dev, iasl, nasm,在Ubuntu下使用apt-get install安装即可
Python2.7.12:由于UDK开发包中有build.py存在,因此需要Python执行环境是必要的

二、配置开发环境

1.下载OpenSSL库,并放在~/src/Myworkspace/CryptoPkg/Library/OpensslLib/openssl/
2.进入~/src/MyWorkspace/Conf修改target.txt下面说明其中内容:
-- ACTIVE_PLATFORM:对应编译的工具包,可以指定自己创建的,比如我用的TestModulePkg
-- TARGET_ARCH:开发工具对应的架构,默认选择了X64
-- TOOL_CHAIN_TAG:编译工具版本,使用的GCC5,其中版本定义可以在Conf/tools_def.txt中看到
其它设置可以保持默认。
注:target.txt中其实设置了build的默认参数,我们完全可以在build的时候自己指定这些参数:
例如: build -a X64 -p TestModulePkg/TestModulePkg.dsc
3.在开发根目录(~/src/Myworkspace,以下均代表此路径)下运行:
. edksetup.sh #将开发包中工具等路径设置为环境变量;
4. 输入命令:build #无报错则环境正常,可以开始开发。
 

三、UEFI应用程序开发

1.创建应用程序代码存放的位置,在开发根目录创建一个自己的目录:TestModulePkg/Application
此时我们为自己的应用程序创建一个文件夹,里面包含该应用程序需要的.c文件、.inf文件等。.c文件为我们程序的主要代码文件。
.inf文件存放编译c文件必须的信息,包含版本、入口函数等一系列信息...
2.因为编译时需要使用很多库,所以我们编译时还是用现成的MdeModulePkg/MdeModulePkg.dsc
3.写好inf文件路径必须添加到MdeModulePkg.dsc中的[Components]下,并写好相对开发根目录的路径;
4.结束后使用build就可以在开发根目录下Build目录中按照build参数逐层找到编译出来的efi文件

四、在虚拟环境下实验自己开发的应用程序

1.注意到开发根目录下有OvmfPkg,直接build,会在/Build/OvmfX64/DEBUG_GCC5/FV下生成一个fd文件,OVMF.fd
2.使用qemu模拟器打开这个镜像文件,可以成功启动到UEFI Shell下;
qemu-system-x86_64 -bios OVMF.fd
3.如何把我们编写好的UEFI应用程序放进去呢?
-- 创建一个img镜像文件,使用dd if=/dev/zero of=dos.img bs=50M count=1
-- mkdosfs dos.img
-- mount dos.img /mnt
将efi文件放在/mnt下
-- umount /mnt
-- qemu-system-x86_64 -bios OVMF.fd -hdd dos.img
进入UEFI Shell后,输入fsx:进入dos.img目录中就可以找到并运行efi程序。
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0