在Ubuntu下面编译EDK2 模拟器

本文介绍如何在Ubuntu 10.04上安装必要的软件包,并使用BaseTools编译EDK2。文章详细记录了编译过程中的步骤及遇到的bug修复方法,同时提供了配置文件修改指南,帮助读者成功搭建EDK2模拟器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天看别人用VS2005编译EDK的代码,然后调试,很惊奇,以前我都是在命令提示符下面编的。

第一次用VS2005编译EDK2的代码,感觉和以前的改变蛮大的,不过说明文档还是很详细的。

 

 

昨天晚上突然想到EDK2模拟器已经可以在Linux下面编译运行了!

也随便熟悉下新的Ubuntu 10.04.

http://docs.google.com/Doc?docid=0Ae9pEjPwQY7KZGc0dDV3emtfMGdkcjQzdg&hl=en

 

 

 

Build EDKII in Ubuntu 10.04


1.in ~:
 bash$ sudo apt-get install build-essential uuid-dev texinfo /
       bison flex libgmp3-dev libmpfr-dev subversion
bash$ mkdir ~/src
bash$ cd ~/srcsvn co /
 --username guest
bash$ make -C edk2/BaseTools
bash$ cd ~/src/edk2/BaseTools/gcc
2.
X64:
bash$ ./mingw-gcc-build.py --arch=x64 --prefix=~/programs/gcc/x64

in EDKII(svn revision:10467), there is a bug:
BaseTools/gcc/mingw-gcc-build.py (line:217)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    source_files_x640 = {
        'gcc': {
            'url': 'http://ftpmirror.gnu.org/gcc/' + /
                   'gcc-$version/gcc-$version.tar.bz2',
            'version': '4.3.0',
            'md5': '197ed8468b38db1d3481c3111691d85b',
            },
        'mingw_hdr': {
            'url': 'http://sourceforge.net/projects/' + /
                   'mingw-w64/files/mingw-w64/mingw-w64-snapshot/' + /
                   'mingw-w64-v1.0-snapshot-$version.tar.bz2/download',
            'extract-dir': os.path.join('mingw-w64-v1.0-$version',
'mingw-w64-headers'),
            'version': '20100223',
            'md5': '700b9f54e740b1b962c8a3a0f52b7c04',
            },
        }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Should modify to:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    source_files_x64 = {
        'gcc': {
            'url': 'http://ftpmirror.gnu.org/gcc/' + /
                   'gcc-$version/gcc-$version.tar.bz2',
            'version': '4.3.0',
            'md5': '197ed8468b38db1d3481c3111691d85b',
            },
        'mingw_hdr': {
            'url': 'http://sourceforge.net/projects/' + /
                   'mingw-w64/files/mingw-w64/mingw-w64-snapshot/' + /
                   'mingw-w64-v1.0-snapshot-$version.tar.bz2/download',
            'extract-dir': os.path.join('mingw-w64-v1.0-$version',
'mingw-w64-headers'),
            'version': '20100228',
            'md5': '7aafb39c768c087e78f845957fd69f74',
            },
        }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Modify Conf Files

You will need to edit the Conf/tools_def.txt and Conf/target.txt files. These changes will enable the MdeModulePkg to be built using the gcc x64 compiler.

Enable GCC X64 Cross-Compiler

For the Conf/tools_def.txt file, find the following entry and comment the line out:

DEFINE UNIXGCC_X64_PETOOLS_PREFIX = /opt/tiano/x86_64-pc-mingw64/x86_64-pc-mingw64/bin/

Next, find the following entry and uncomment the line:

DEFINE UNIXGCC_X64_PETOOLS_PREFIX = ENV(HOME)/programs/gcc/x64/bin/x86_64-pc-mingw32-

To enable building your target image with X64 support the Conf/target.txt will also need to be modified.

Find the TARGET_ARCH definition in Conf/target.txt and change the corresponding line to match this

TARGET_ARCH = X64


or
IA32:
bash$ cd ~/src/edk2/BaseTools/gcc bash$ ./mingw-gcc-build.py --arch=ia32 / --prefix=~/programs/gcc/ia32
Modify Conf Files

Once the cross-compiler has been successfully built the Conf/tools_def.txt will need to be updated so the cross-compiler can be used.

Find the following statement in Conf/tools_def.txt and comment the line out:

DEFINE UNIXGCC_IA32_PETOOLS_PREFIX = /opt/tiano/i386-tiano-pe/i386-tiano-pe/bin/

Next, find the following statement and uncomment the line:

DEFINE UNIXGCC_IA32_PETOOLS_PREFIX = ENV(HOME)/programs/gcc/ia32/bin/i686-pc-mingw32-

To enable building your target image with IA32 support the Conf/target.txt will also need to be modified.

Find the TARGET_ARCH definition in Conf/target.txt and change the corresponding line to match this

TARGET_ARCH = IA32

3.Modify Conf/target.txt for Linux
ACTIVE_PLATFORM       = UnixPkg/UnixPkg.dsc
#set for *inux OS:
TOOL_CHAIN_TAG = ELFGCC


4.C ompile & build run:
bash$ cd ~/src/edk2
bash$ export EDK_TOOLS_PATH=~/src/edk2/BaseTools
bash$ . edksetup.sh BaseTools
bash$ build
bash$ cd ~/src/edk2/UnixPkg
bash$ ./build.sh run

   bash$ (gdb) run

Then it would be:

Run EDK2 Emulator in Ubuntu

 

---xt

<think>好的,用户想学习EDK2的相关知识或教程,特别是入门资料。首先,我需要明确EDK2是什么。EDK2是UEFI固件开发的开源项目,主要用于系统启动和硬件初始化。用户可能是嵌入式开发者、系统工程师或者对固件开发感兴趣的人。 接下来,用户需要的是学习资料和入门教程。我应该先列出官方资源,因为这是最权威的。比如EDK2的GitHub仓库和官方文档,这些能提供基础的结构和编译指南。然后,UEFI论坛的规范文档也很重要,帮助理解UEFI标准。 用户可能对实际操作更感兴趣,所以需要推荐一些实践步骤,比如搭建开发环境、编译示例项目。这可能包括安装必要的工具链,配置环境变量,以及如何构建固件镜像。 另外,社区资源如博客、视频教程和书籍也是重要的补充。比如一些开发者的经验分享,或者入门书籍,能够帮助用户更快上手。还要注意中文资源,因为用户使用中文提问,可能需要中文教程,但EDK2的资料可能以英文为主,需要指出这一点。 用户可能遇到的困难包括环境配置的复杂性,或者对UEFI规范的不熟悉。因此,建议分阶段学习,先理解基础概念,再逐步深入。同时,参考站内的引用资料,虽然这些引用看起来和EDK2关系不大,但可能涉及网络协议和分布式系统,但暂时不确定是否有直接关联,可能需要忽略或仅作为次要参考。 最后,生成相关问题时,要围绕EDK2的学习路径、开发环境搭建、核心模块、调试方法以及UEFI规范的应用等方面,帮助用户进一步探索。</think>### EDK2 学习资料与入门教程 EDK2(EFI Development Kit II)是用于开发符合UEFI(统一可扩展固件接口)标准的固件工具集,广泛应用于操作系统引导、硬件初始化等领域。以下是系统的学习路径和资源推荐: --- #### **一、官方核心资源** 1. **EDK2 GitHub仓库** 官方代码库包含完整源代码、示例模块及文档: [https://github.com/tianocore/edk2](https://github.com/tianocore/edk2) - 重点文件:`Readme.md`、`BaseTools`(编译工具链)、`MdeModulePkg`(核心模块) - 编译指南:参考`edk2/BaseTools/Build_Instructions.txt` 2. **UEFI规范文档** - UEFI Forum官网提供最新标准文档: [https://uefi.org/specifications](https://uefi.org/specifications) - 必读章节:UEFI驱动模型、Protocol/PPI接口、SMM(系统管理模式)[^1] --- #### **二、实践入门步骤** 1. **环境搭建** - **工具链安装**: ```bash # Ubuntu示例 sudo apt install build-essential uuid-dev nasm acpica-tools ``` - **代码拉取与初始化**: ```bash git clone https://github.com/tianocore/edk2.git cd edk2 && git submodule update --init source edksetup.sh ``` 2. **编译第一个固件** - 修改`Conf/target.txt`,设置: ``` ACTIVE_PLATFORM = EmulatorPkg/EmulatorPkg.dsc TOOL_CHAIN_TAG = GCC5 ``` - 执行编译: ```bash build -p EmulatorPkg/EmulatorPkg.dsc -a X64 -t GCC5 ``` --- #### **三、推荐学习资料** 1. **TianoCore官方教程** - 《EDK II Module Writer’s Guide》:详细说明模块开发流程,包含Protocol实现、事件处理等核心机制[^2]。 2. **社区资源** - **博客**: - [PJT's Blog: EDK2从零开始](https://pjw.io/articles/2020/edk2-tutorial/)(中文) - [EDK II for Dummies](https://firmware-security.com/)(英文实践案例) - **视频教程**: YouTube搜索“EDK2 UEFI Tutorial”获取实操演示。 3. **书籍推荐** - 《Beyond BIOS: Developing with the Unified Extensible Firmware Interface》 系统讲解UEFI架构与开发实践,含EDK2代码分析。 --- #### **四、进阶方向** 1. **核心模块开发** - 驱动开发:实现`EFI_DRIVER_BINDING_PROTOCOL`控制硬件 - 应用开发:通过`ShellApp`创建交互式工具 2. **调试技巧** - 使用QEMU模拟器调试: ```bash qemu-system-x86_64 -bios Build/EmulatorX64/DEBUG_GCC5/FV/EMULATOR.fd ``` - 日志输出:通过`DEBUG()`宏和串口输出日志。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值