• UEFI---(NT32)的第一个代码


    暑期实习,找到一份做固件的实习。跟我一直所追求的还是有一些差距。不过正是以前的积累,能够对我学习新的知识有很大帮助。

    第一个代码依然还是拥抱世界 hello world 啦

    我们需要修改三个文件

    text1.c

    text1.inf

    Nt32Pkg.dsc

    /** @file
      This is a simple shell application
    
      Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>
      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 PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
      WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
    
    **/
    
    #include <Uefi.h>
    #include <Library/UefiApplicationEntryPoint.h>
    #include <Library/UefiLib.h>
    
    /**
      as the real entry point for the application.
    
      @param[in] ImageHandle    The firmware allocated handle for the EFI image.
      @param[in] SystemTable    A pointer to the EFI System Table.
    
      @retval EFI_SUCCESS       The entry point is executed successfully.
      @retval other             Some error occurs when executing this entry point.
    
    **/
    EFI_STATUS
    EFIAPI
    main (
      IN EFI_HANDLE        ImageHandle,
      IN EFI_SYSTEM_TABLE  *SystemTable
      )
    {
      Print(L"hello world
    ");
      return EFI_SUCCESS;
    }
    text1.c
    ## @file
    #  Sample UEFI Application Reference EDKII Module
    #
    #  This is a simple shell application
    #
    #  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
    #
    #  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 PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
    #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
    #
    #
    ##
    
    [Defines]
      INF_VERSION                    = 0x00010005
      BASE_NAME                      = text1
      FILE_GUID                      = 1D73FF57-579C-40F2-BA4F-851DFE50B614
      MODULE_TYPE                    = UEFI_APPLICATION
      VERSION_STRING                 = 1.0
      ENTRY_POINT                    = main
    
    #
    # The following information is for reference only and not required by the build tools.
    #
    #  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
    #
    
    [Sources]
      text1.c
    
    [Packages]
      MdePkg/MdePkg.dec
    
    [LibraryClasses]
      UefiApplicationEntryPoint
      UefiLib
    text1.inf

    其实就编写的基本流程来说,分为一下几个步骤

    1.  复制要编写的程序模板,其中至少包括  *.c  *.inf 文件
    2. *.C 文件中,我们要做两件事情
      1.   修改想要的入口函数名
      2.        在主函数中实现想要的功能
    3.  *.inf 文件中,我们做以下事情
      1.   在defines中,
        1.        修改BASE_NAME --> 生成的模块名字
        2.        修改GUID标识(使用VS自带工具)
        3.        修改ENTRY_POINT  --> 入口函数名 (与 *.c 文件对应)
      2.      在sources中, 声明所包含的子文件。在本次实验中只包含 text1.c 一个文件
    4.   在NT32Pkg目录下找到Nt32Pkg.dsc ,将我们需要新编译的*.inf文件添加在 Components 之中完成声明。

    在编译过程中,出现了一点小问题。就是在根目录下采用 build -p Nt32PkgNt32Pkg.dsc  编译后并不能编译出新的可执行的 *.elf 文件

    只能采用build -p Nt32PkgNt32Pkg.dsc -a IA32 -m ShellPkgApplication ext1 ext1.inf  进入文件目录后编译才可以。

    另外一个问题就是如果在*.c文件中输出字符串后面不加 。 会导致字符输出不全,我的只显示   orld    四个字符。询问前辈得知是由于被覆盖,具体不详

  • 相关阅读:
    求树的重心
    牛客多校第七场B题
    高精度
    hdu 6763 Total Eclipse 并查集+思维
    substr用法
    置换群
    快速幂
    Winform+Mysql登录
    Rider C#连接MySQL
    C# winform组件
  • 原文地址:https://www.cnblogs.com/chu-yi/p/11227457.html
Copyright © 2020-2023  润新知