1. 程式人生 > >如何編譯第一個uefi程式【轉載】

如何編譯第一個uefi程式【轉載】

配置:
win8.1 x64 + VS2013 + UDK2015
這裡略過初步的EDK原始碼編譯配置過程,在下載的UDK2015中有UDK2015-ReleaseNotes-MyWorkSpace.txt教如何搭建環境,照做完全沒有問題。

下面參考了某份老外教程,但找不到源頭了,還是註明轉載。

1,按EDK推薦,相應的子模組放到相應的資料夾中,所以新建資料夾hello,裡面放入hello.c和hello.inf,結構如下:
“C:\MyWorkSpace\MdeModulePkg\Application\hello\hello.c”
“C:\MyWorkSpace\MdeModulePkg\Application\hello\hello.inf”

2,記事本開啟”C:\MyWorkSpace\Nt32Pkg\Nt32Pkg.dsc”,在 [Components] 下,加入一句:
MdeModulePkg/Application/hello/hello.inf
//相當於Visual_studio在sln中加入一個proj.

3,hello.c的程式碼如下:

#include <Library/UefiApplicationEntryPoint.h> 
#include <Library/UefiLib.h>

EFI_STATUS         
EFIAPI
UefiMain 
(IN EFI_HANDLE ImageHandle, IN
EFI_SYSTEM_TABLE *SystemTable) { SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello World\r\n"); // Body return EFI_SUCCESS; }

4,hello.inf的程式碼如下:

[Defines]  
 INF_VERSION         = 0x00010005 
 BASE_NAME           = Hello
 FILE_GUID           =  08f58693-1cba-4ddf-a204-f10a7dd01fae
 MODULE_TYPE         = UEFI_APPLICATION
 VERSION_STRING      = 1.0
ENTRY_POINT = UefiMain [Sources] Hello.c [Packages] MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec [LibraryClasses] UefiApplicationEntryPoint UefiLib [GUIDS] [Protocols]

//進入命令列:
cd C:\MyWorkSpace

//執行批處理以設定環境:
edksetup.bat

//編譯
build –p Nt32 Pkg\Nt32Pkg.dsc –a IA32 -m MdeModulePkg\Application\Hello\Hello.inf
//生成的檔案在MyWorkSpace\Build\NT32IA32\DEBUG_VS2013x86_IA32下。

Build run //執行模擬器
Fs0: //這個目錄即生成檔案的目錄
dir h*
hello.efi //執行

//結果:

這裡寫圖片描述

相關推薦

如何編譯一個uefi程式轉載

配置: win8.1 x64 + VS2013 + UDK2015 這裡略過初步的EDK原始碼編譯配置過程,在下載的UDK2015中有UDK2015-ReleaseNotes-MyWorkSpace.txt教如何搭建環境,照做完全沒有問題。 下面參考了某

編寫一個Shell指令碼TLCL

怎樣編寫一個 Shell 指令碼 編寫一個指令碼 使指令碼檔案可執行 把指令碼放到Shell能夠找到的地方 指令碼檔案格式 #!/bin/bash # This is our first script. echo 'Hello World!' #

Linux下G++編譯一個C++程式(Hello, world)

安裝完各種環境工具之後(sudo apt install g++) 繼而新建一個空白文件Helloworl.cpp,貼上進最簡單的程式碼: #include<iostream>

python用Notepad++編寫出一個python程式

首先我們要安裝Notepad++ 官網下載:https://notepad-plus-plus.org/ 網盤下載:https://pan.baidu.com/s/1b3FNZ8w47HYes57YeG3KmA 提取碼: cu89 安裝簡單,選擇簡體中文安裝就好了,中間會有個配置安裝路徑

OpenGL詳解一個OpenGL程式

/////////////////////////////////////////////////////////////////////// // // triangles.cpp // ////////////////////////////////////////////////////////////

教她寫程式碼使用Intellij建立一個Springboot程式

首先先介紹一下Springboot:Spring是Java開發中,十分著名的一個框架。但是該框架的使用必須結合大量的XML配置檔案,這一點讓開發人員痛苦無比。Springboot是Spring官方重新構造的一個框架,將Spring的配置簡化了很多。 著名IDE,Intellij介紹:老牌的Java程式碼I

VS開發OpenGL開發OpenGL---Windows下配置與一個OpenGL程式

面記錄一下Windows下配置OpenGL與我的第一個OpenGL程式。 第一步:選擇一個編譯環境 現在Windows系統的主流編譯環境有Visual Studio,Broland C++ Builder,Dev-C++等,它們都是支援OpenGL的。但這裡我選擇的是V

SignalR學習系列2. 一個SignalR程式

新建專案 1.使用VisualStudio 2015 新建一個Web專案 2.選擇空模板 3.新增一個新的SignalR Hub Class (v2)類檔案,並修改類名為ChatHub   4.修改ChatHub程式碼 using System; using Sys

轉載5天不再懼怕多線程——四天 信號量

win 釋放 對象 sem eap 調用 state logs 一份 今天整理“信號量”的相關知識,其實想想也蠻有趣的,鎖,互斥,信號量都可以實現線程同步,在framework裏面主要有三種。 <1>:ManualResetEvent <2>:Aut

轉載5天不再懼怕多線程——五天 線程池

執行 targe 空閑 timer max als htm port 電腦 說到多線程,不可不說線程池,C#中關於池的概念很多,今天來整理下ThreadPool的使用。 是的,如果你很懶,如果你的執行任務比較短,如果你不想對線程做更精細的控制,那麽把這些繁瑣的東西

轉載5天不再懼怕多線程——三天 互斥體

多線程 str .get 整理 tle ram nbsp line 一點 沒想到我的前兩篇文章還挺受歡迎的,謝謝大家,今天整理下Mutex的使用。 一:Mutex 首先看下MSDN對它的解釋: 不錯,出現了一個亮點,可用於“進程間同步“,既然進程間都可以同步,那

一個優秀的程序員所具備的14個品質轉載

大公司 靈活 安排 有時 style 樣式 執行 文檔 以及 慎於說Yes在沒有搞清楚開發需求、任務工作量、團隊期望值之前,有前途的程序員不會輕易答應。特別是對於新人來說,比較急於表現自己,對於同事或者老板的工作安排來者不拒,精神可嘉,方法不可取。承諾太多,會出現自己無法按

轉載每天一個Linux命令

mkdir 命令 結構 oca archive mic post rmdir 命令 每天 sof 每天一個linux命令(1) : ls 命令 每天一個linux命令(2) : cd 命令 每天一個linux命令(3) : pwd 命令 每天一個linux命令(4)

php編譯參數註解--不明白許多參數的作用 慎用 –with-curlwrappers參數轉載

大小 debug ttext s參數 without freetype sql安裝 exif ati 在Linux下安裝PHP,源代碼方式安裝,總需要配置很多參數。這裏列出常用配置參數,並詳細用中文解釋說明了。給大家一些參考 編譯PHP的時候慎用 –with-curlwra

轉載編譯型語言、解釋型語言、靜態類型語言、動態類型語言概念與區別

自己 運行 是把 修改 lin 鏈接 時代 dll 系統 編譯型語言和解釋型語言 1、編譯型語言 需通過編譯器(compiler)將源代碼編譯成機器碼,之後才能執行的語言。一般需經過編譯(compile)、鏈接(linker)這兩個步驟。編譯是把源代碼編譯成機器碼,鏈接是把

每天一個linux命令(文件操作):轉載find命令之xargs

溢出 系統性能 問題 ameba pri 幾分鐘 body 只有一個 獲取參數   在使用 find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之

每天一個linux命令(文件上傳下載文件操作):轉載tar命令

設備 mil second compress bsp 新的 body 創建 命令格式   通過SSH訪問服務器,難免會要用到壓縮,解壓縮,打包,解包等,這時候tar命令就是是必不可少的一個功能強大的工具。linux中最流行的tar是麻雀雖小,五臟俱全,功能強大。   tar

每天一個linux命令(文件上傳下載文件操作):轉載gzip命令

明顯 相關信息 users 版本信息 通過 inux 備份 示例 strong   減少文件大小有兩個明顯的好處,一是可以減少存儲空間,二是通過網絡傳輸文件時,可以減少傳輸的時間。gzip是在Linux系統中經常使用的一個對文件進行壓縮和解壓縮的命令,既方便又好用。gzip

轉載寫給省選失利的童鞋們·沒有一個節點叫失敗

記得 不能 不難 tarjan google div 準備 童鞋 屏幕 我想我十八年來記憶最深刻的夜晚,大概便是在吉林大學燥熱的宿舍裏,穿著橘黃色的短袖,努力咽下大口大口的雪碧。那天晚上我仰躺在吉大熱得幾乎不能入眠的床板上,一動不動,看夏夜裏打不盡的蚊子在慘白的天花板下飛過

轉載一個c程序在執行main函數之前和main之後都做了那些事情

loss -- text ould 很多 int win 部分 不知道 轉自:https://bbs.csdn.net/topics/300103318#r_78088969 main函數之前--真正的函數執行入口或開始一種解釋實際上,在可執行文件被加載之後,控制權立即交給