zoukankan      html  css  js  c++  java
  • UEFI Shell 下的程序设计

      今天简单介绍一些shell下的程序设计:

      和其他的语言的程序设计有所区别,shell环境下的程序设计需要借助package(包)来完成。在edk2的目录下可以清楚的看到有很多package:比如ShellPkg、MdePkg、MdeModulePkg等等。每个Pkg里面包含的函数又有所区别,所以编写一般的简单的程序一般都会放在默认的编译的Pkg里面(特殊的除外)。

      默认的编译的Pkg的路径在  edk2/Conf/target.txt  可以找到比如我使用的就是  “  ACTIVE_PLATFORM=EmulatorPkg/EmulatorPkg.dsc”  这个.txt文件里面还包括默认的编译器,编译模式,IA32还是X64等等,这其实是一个基础的配置文件。

      shell下的可执行程序文件形式为 .efi 文件,编译生成它最少需要一个.inf 文件和一个.c 文件(也常被叫做工程文件和源文件)

      应用程序模块常见的分三种,分别为标准的应用程序模块,shell应用程序模块,使用main函数的应用程序工程模块。(其中最后一种我没弄出来,它需要借助标准的C库中的stdio.h 尝试了一段时间并没有成功)  先说说标准的应用程序模块 

      首先是工程文件代码:

    [Defines]
        INF_VERSION=0x00010005
        BASE_NAME=UefiMain              //最终生成的efi文件的名字,例如UefiMain.efi
        FILE_GUID=6987936E-ED34-ffdb-AE97-1FA5E4ED2117
        MODULE_TYPE=UEFI_APPLICATION
        VERSION_STRING=1.0
        ENTRY_POINT=UefiMain            //入口函数    
    [Sources]
        main.c                                     //源文件路径
    [Packages]
        MdePkg/MdePkg.dec                 //引用到的包的声明文件   
    [LibraryClasses]                               //链接到的库模块
        UefiApplicationEntryPoint
        UefiLib

      源文件代码:

    #include<Uefi.h>
    EFI_STATUS UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable)
    {
        SystemTable->ConOut->OutputString(
    SystemTable->ConOut,L"hello,,,,,ourworld
    "
    );
        return EFI_SUCCESS;
    }

      源文件和工程文件放在一起,然后去默认的Pkg里面的.dsc文件里面把它的路径加上

    如上图右下角所示把工程文件的路径添加完成即可。

    最后打开cmd 运行edksetup 然后再build (参考上一篇博客)不出意外应该能编译成功 。编译所得的efi文件在build文件夹里面,以我的为例是在

    edk2/Build/EmulatorIA32/DEBUG_VS2015x86/IA32 里面(因为我的默认编译是emulatorpkg)

    打开uefi shell 虚拟环境 输入fs0:按回车  注意冒号

    然后ls查看所有文件 应该能看到uefimain.efi

    输入uefimain.efi 回车即可运行程序,输出想要的结果

    如有遇到什么问题可以参考书籍《UEFI原理与编程》

  • 相关阅读:
    XML 特殊字符
    asp.net Application、 Session、Cookie、ViewState、Cache、Hidden 的区别
    Oracle 和 SqlServer 的区别
    TFS源代码管理的8大注意事项
    json 排序
    网页中内容的显示问题
    e.target与事件委托简例(转)
    form 中的 table元素过滤定位事件
    (转) Ajax 重定向
    Django ajax post 403 问题
  • 原文地址:https://www.cnblogs.com/zedd/p/12522259.html
Copyright © 2011-2022 走看看