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原理与编程》

  • 相关阅读:
    hdu 1269 迷宫城堡 (并查集)
    hdu 1272 小希的迷宫 (深搜)
    hdu 1026 Ignatius and the Princess I (深搜)
    hdu 1099 Lottery
    hdu 1068 Girls and Boys (二分匹配)
    几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
    hdu 1072 Nightmare (广搜)
    hdu 1398 Square Coins (母函数)
    hdu 1253 胜利大逃亡 (深搜)
    hdu 1115 Lifting the Stone (求重心)
  • 原文地址:https://www.cnblogs.com/zedd/p/12522259.html
Copyright © 2011-2022 走看看