帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:Visual Studio  vis  proj  
A project for allowing EDK-II Development with Visual Studio

  • 源代码名称:VisualUefi
  • 源代码网址:http://www.github.com/ionescu007/VisualUefi
  • VisualUefi源代码文档
  • VisualUefi源代码下载
  • Git URL:
    git://www.github.com/ionescu007/VisualUefi.git
  • Git Clone代码到本地:
    git clone http://www.github.com/ionescu007/VisualUefi
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/ionescu007/VisualUefi
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • 概要

    VisualUEFI

    • 解决和设置 Visual Studio 项目文件,不使用inf文件,python 和 50其他生成工具,自定义依赖跟踪器和生成系统以及个其它自定义代码块的解决方案和一组。 EDK和OpenSSL作为子模块出现,直接来自官方TianoCore树,并且没有对它们做任何更改。

    • 一个解决方案和几个 Visual Studio 项目文件来显示四个UEFI示例组件: 使用UEFI应用程序和关联的UEFI引导驱动程序。EDK ii示例FtdiUsbSerialDxe驱动程序以及使用 OpenSSL 1.1.0 e的EDK ii示例Cryptest应用程序。 代码是 100% EDK兼容,但用VisualUEFI构建。

    • 一份工作和快速的QEMU64 2.10副本,带有最近的UEFI 2.6 OVMF安全引导 ROM,其中包括支持用户注册密钥和注册密钥的实际 protected Flash 。 这些将根据需要进行更新。 这与 Visual Studio 示例解决方案集成,这样按F5就可以启动测试实例。

    如果你想了解我的研究或者工作,请查看我在 http://www.alex-ionescu.com的博客,以及我的培训&咨询公司,Winsider研讨会&解决方案公司,以及 http://www.windows-internals.com 解决方案。

    代码示例

    下面是一个与UEFI驱动程序通信的UEFI应用程序的非常简单的示例。 这里示例是VisualUefi的一部分。

    //// Basic UEFI Libraries//#include<Uefi.h>#include<Library/UefiLib.h>#include<Library/DebugLib.h>#include<Library/MemoryAllocationLib.h>//// Boot and Runtime Services//#include<Library/UefiBootServicesTableLib.h>#include<Library/UefiRuntimeServicesTableLib.h>//// Custom Driver Protocol//#include"../UefiDriver/drvproto.h"EFI_GUID gEfiSampleDriverProtocolGuid = EFI_SAMPLE_DRIVER_PROTOCOL_GUID;//// We run on any UEFI Specification//extern CONST UINT32 _gUefiDriverRevision = 0;//// Our name//CHAR8 *gEfiCallerBaseName = "UefiApplication";
    EFI_STATUS
    EFIAPIUefiUnload (
     IN EFI_HANDLE ImageHandle
     )
    {
     //// This code should be compiled out and never called//ASSERT(FALSE);
    }
    EFI_STATUS
    EFIAPIUefiMain (
     IN EFI_HANDLE ImageHandle,
     IN EFI_SYSTEM_TABLE* SystemTable
     )
    {
     EFI_STATUS efiStatus;
     SHELL_FILE_HANDLE fileHandle;
     UINT8 buffer[4];
     UINTN readSize;
     EFI_SAMPLE_DRIVER_PROTOCOL* sampleProtocol;
     //// Print stuff out // fileHandle = NULL;
     Print(L"Hello World! My handle is %lx and System Table is at %pn",
     ImageHandle, SystemTable);
     //// Initialize the shell library// efiStatus = ShellInitialize();
     if (EFI_ERROR(efiStatus))
     {
     Print(L"Failed to initialize shell: %lxn", efiStatus);
     goto Exit;
     }
     //// Open ourselves// efiStatus = ShellOpenFileByName(L"fs1:UefiApplication.efi",
     &fileHandle,
     EFI_FILE_MODE_READ,
     0);
     if (EFI_ERROR(efiStatus))
     {
     Print(L"Failed to open ourselves: %lxn", efiStatus);
     fileHandle = NULL;
     goto Exit;
     }
     //// Read 4 bytes at the top (MZ header)// readSize = sizeof(buffer);
     efiStatus = ShellReadFile(fileHandle, &readSize, &buffer);
     if (EFI_ERROR(efiStatus))
     {
     Print(L"Failed to read ourselves: %lxn", efiStatus);
     goto Exit;
     }
     //// Print it//Print(L"Data: %lxn", *(UINT32*)buffer);
     //// Check if the sample driver is loaded // efiStatus = gBS->LocateProtocol(&gEfiSampleDriverProtocolGuid, NULL, &sampleProtocol);
     if (EFI_ERROR(efiStatus))
     {
     Print(L"Failed to locate our driver: %lxn", efiStatus);
     goto Exit;
     }
     //// Print the value and exit //Print(L"Sample driver is loaded: %lxn", sampleProtocol->SampleValue);
    Exit:
     //// Close our file handle//if (fileHandle!= NULL)
     {
     ShellCloseFile(&fileHandle);
     }
     //// Sample complete!//return efiStatus;
    }

    动机

    EDK ii子系统支持 Visual Studio,但它不能与"内部"构建一起工作。 而特殊的. inf 文件和其他模板用来定义项目,并且必须运行由多个 3rd 方工具组成的自定义构建,包括依赖于。ruby 和Perl的依赖项。 对于已经经熟悉studio文件/msbuild的开发人员,以及它提供的IDE,这可以能会很麻烦和限制。 这里外,and"测试"环境的默认设置是在应用程序周围构建一个 Windows"nt32"层,并将它的作为 命令行 可以执行。 虽然这对于非常简单的应用程序很有用,但是它不可靠地提供了测试DXE驱动程序。运行时服务和。

    美国VisualUefi计划在不使用 3rd 和OVMF的情况下编译 100%库,并使用适当的Visual Studio 构建环境,在 Visual Studio 中添加一些VisualUefi专用胶水,并添加一些专用胶水,而不依赖于 Windows 仿真。

    安装

    你应该能够打开 EDK-II.SLN 文件并在 Visual Studio 2015或者 2017中没有任何问题。 WDK或者其他 3rd 方安装不需要。

    构建了EDK库之后,应该能够打开 SAMPLES.SLN 文件并构建示例,这将创建 UefiApplication.efi, UefiDriver.efi, Cryptest.efi, 和 FtdiUsbSerialDxe.efi 。

    文档

    请参阅 EDK ii/tianocore,了解有关 EDK ii的所有文档/帮助。

    测试

    在示例解决方案中可以按 F5,这样可以将QEMU实例与个内存进行旋转,并且你的发行版目录可以通过滚动访问虚拟文件系统:

    然后,你可以尝试加载驱动程序,如下所示:

    * load fs1:UefiDriver.efi

    可以通过使用以下任一命令来验证它的存在:

    * drivers (Should display"Sample Driver")
    * devtree (Should show a few"Sample Device" entries)

    你还可以启动示例应用程序,该应用程序应该找到驱动程序:

    * fs1:UefiApplication.efi

    贡献者

    请使用GitHub问题追踪器提交任何 bugs/requests/etc.

    对于其他反馈,你可以在 @aionescu Twitter at联系我

    许可证

    • 对于"样品"和"EDK ii"目录,将应用以下许可证:

       Copyright (c) 2015-2017, Alex Ionescu. All rights reserved.
       This program and the accompanying materials are licensed and made available under
       the terms and conditions of the BSD License which accompanies this distribution. 
       The full text of the license may be found at
       http://opensource.org/licenses/bsd-license.php
    • 对于"调试程序"目录,将应用以下许可证:

       The following points clarify the QEMU license:
       1) QEMU as a whole is released under the GNU General Public License,
       version 2.
       2) Parts of QEMU have specific licenses which are compatible with the
       GNU General Public License, version 2. Hence each source file contains
       its own licensing information. Source files with no licensing information
       are released under the GNU General Public License, version 2 or (at your
       option) any later version.
       As of July 2013, contributions under version 2 of the GNU General Public
       License (and no later version) are only accepted for the following files
       or directories: bsd-user/, linux-user/, hw/misc/vfio.c, hw/xen/xen_pt*.
       3) The Tiny Code Generator (TCG) is released under the BSD license
       (see license headers in files).
       4) QEMU is a trademark of Fabrice Bellard.
       Fabrice Bellard and the QEMU team
    • "openssl"模块有自己的授权信息,请阅读。

    • "edk2"模块有自己的授权信息,请阅读。



    文章标签:proj  vis  Visual Studio  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语