UEFI基础认识和编程练习
文章平均质量分 86
简单的UEFI编程练习
Mr.小张
这个作者很懒,什么都没留下…
展开
-
uefi开发环境搭建
一、windows下编译环境搭建1.1 软件环境操作系统:windows10编译器:VS2019Python38 :python-3.8.0-amd64.exeASL :iasl-win-20210730.zipNASM :nasm-2.13.03-installer-x64.exegit1.2 具体步骤1.2.1 下载最新edk2我这里在gitee上面同步了github的edk2仓库,所以直接从gitee下载git clone https://gitee.com/zl_wo原创 2021-09-22 11:20:50 · 2666 阅读 · 5 评论 -
AMD显卡更新UEFI GOP
一、简介很多老版本显卡vBIOS仅支持leagcy,所以在UEFI版本的BIOS下不能显示,本文以HD6570其中一款显卡进行操作。二、操作步骤2.1 操作环境windows操作系统GPU-Z 下载地址NV或者AMD显卡BIOS的刷新工具NVFlash或者ATIFlash下载地址制作给显卡BIOS添加或者更新UEFI GOP支持的软件AMD and Nvidia GOP update 下载地址Python 下载地址,下载安装后,点击开始Win按钮,输入CMD,打开CMD命令行模式,输入指令原创 2021-09-14 13:35:02 · 21651 阅读 · 8 评论 -
BMP图像 - UEFI shell下显示bmp图片
实现在uefi shell显示一张bmp图片1.inf文件TestShowBmp.inf## @file# # head for bmp test#####[Defines] INF_VERSION = 0x00010006 BASE_NAME = TestShowBmp FILE_GUID = 079E8E98-AE93-1111-8A71-88C8原创 2020-05-29 14:54:22 · 1370 阅读 · 2 评论 -
BMP图像 - BMP格式
BMP - (全称Bitmap)是Windows操作系统中的标准图像文件格式,采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时, 图像的扫描方式是按从左到右、从下到上的顺序。所以图案加载到内存后,行数据和显示的行顺序是上下颠倒的BMP文件格式如下:数据段名称大小(Byte)作用bmp文件头14提供文件的格式、大小等信息位图信息头4原创 2020-05-29 14:54:11 · 925 阅读 · 0 评论 -
UEFI shell - shell下实现加载标准应用程序
写一个shell app实现加载标准应用应用程序(HelloWrold.efi)代码实现:1. c文件edk2/ShellPkg/Application/TestLoadImage/TestLoadImage.c/** @file This is a test for Test Load Image**/#include "TestLoadImage.h"/** UEFI application entry point which has an interface simi原创 2020-05-29 14:48:27 · 1651 阅读 · 0 评论 -
UEFI shell - 标准应用程序的编译和加载过程
首先了解下,应用程序是怎么被编译成.efi文件:UefiMain.c首先被编译成目标文件UefiMain.obj连接器将目标文件UefiMain.obj和其他库连接成UefiMain.dllGenFw工具将UefiMain.dll转换成UefiMain.efi本文来源:《UEFI原理与编程》戴正华著...原创 2020-05-29 11:28:19 · 2511 阅读 · 0 评论 -
UEFI shell - shell app
这个UEFI shell app跟我们平时用的C语言的main函数有点像,支持传参数…写个例子测试下:PATH:edk2/ShellPkg/Application/TestShellApp/TestShellApp.inf## @file# This is the shell application## Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>## SPDX-Licens原创 2020-05-29 11:26:51 · 1430 阅读 · 0 评论 -
UEFI shell - 脚本文件
UEFI shell下的脚本文件的命名格式为: ****.nsh脚本的语法和规范参考:《EFI Shell User’s Guide》《UEFI原理与编程》1. 写一个简单的脚本测试下:脚本名为test.nsh,内容如下:pci2.开机自启动脚本UEFI shell有一个开机自启动脚本,命名startup.nsh编辑下startup.nsh,内容为date开启虚拟机,不做任何操作,结果如下:3.开机自启动脚本的代码实现参考edk2/ShellPkg/Applicati原创 2020-05-29 11:26:04 · 16414 阅读 · 2 评论 -
UEFI shell - 内置命令
一. UEFI shell 基础内置命令其命令实现在ShellPkg/Library下:主要有调试(Debug1),驱动(Driver1),网路(NetWork1),网路(NetWork2),安装(Install1),Level1,Level2,Level3。已经集成在shell内部,可以使用用help查看想要查询特定的命令,使用help cmd 或者cmd -?1. Shell命令的通用选项命令行参数作用-b,-break输出信息分屏显示-q,-quit原创 2020-05-29 11:24:21 · 5840 阅读 · 0 评论 -
UEFI shell - 简单认识
1. UEFI shell作用EFI Shell是EFI提供的一个交互式的命令行Shell环境,在这里你可以执行一些efi应用程序,加载efi设备驱动程序.一般从Setup下面的Boot Manager或者快捷启动进入,其画风如下:2. UEFI shell的加载在edk2下面的ShellPkg就是UEFI shell对应的开源包从开发者角度讲其实就是一个UEFI_APPLICATION类型的应用程序,只是它的功能比较特殊而已.其工程文件ShellPkg/Application/Shell原创 2020-05-29 11:22:26 · 10769 阅读 · 0 评论 -
BDS简单认识
1. BDS (Boot Device Select)DXE阶段最后会调用BDS.下面是DxeMain.c的代码部分// // Transfer control to the BDS Architectural Protocol // gBds->Entry (gBds); BDS 阶段负责加载额外的驱动,与用户交互,必要的硬件初始化,并转入操作系统。2. 代码流程分析BDS的入口在 MdeModulePkg/Universal/BdsDxe/BdsEntry.c下面看原创 2020-05-22 15:19:21 · 5131 阅读 · 0 评论 -
SMBIOS-UEFI下实现add table
目的完成两个APPAPP1 添加一张新的数据表APP2 修改新添加表的内容添加表c文件/** @file add a type smbios table Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-...原创 2020-04-29 16:19:35 · 1619 阅读 · 1 评论 -
SMBIOS-UEFI下实现打印EPS
目的把 EPS (Entry Piont Structure)-入口结构表 打印出来,然后把数据表类型打印出来。参考edk2/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/LibSmbiosView.c代码实现c文件/** @file test smbios Copyright (c) 2006 - 2018,...原创 2020-04-29 15:56:54 · 1229 阅读 · 1 评论 -
SMBIOS-UEFI代码实现理解
1.SMBIOS在UEFI下实现分两部分:SmbiosDxe驱动SmbiosTableSmbiosDxe驱动主要功能是为了SmbiosTable部分提供接口函数。2. SmbiosDxe2.1 驱动入口函数SmbiosDriverEntryPoint2.2 驱动代码段SMBIOS_INSTANCE mPrivateData;/** Driver to produ...原创 2020-04-29 15:50:33 · 1534 阅读 · 0 评论 -
SMBIOS-初识
一、SMBIOS和DMI1.1 SMBIOS简单认识系统管理BIOS (System Management BIOS )是主板或者系统制造厂商以标准格式显示产品信息所遵循的统一规范。每个主板厂商或者OEM厂商所生产的电脑,在出厂的时候都会按照smbios标准将信息写入到bios中。这些信息包括BIOS信息、系统信息、处理器信息、设备信息等。1.2 DMI简单认识桌面管理接口 (De...原创 2020-04-29 15:49:17 · 7545 阅读 · 1 评论 -
DXE-Event和Timer练习
UEFI内部只使用时钟中断,摒弃了其他中断,所以异步操作通过Event实现。至于使用event替代中断的优点,个人认为在于,使用中断不方便代码在不同平台的移植。原创 2020-01-15 10:15:23 · 694 阅读 · 0 评论 -
使用qemu调试OvmfPkg
一、OVMF介绍OVMF二、环境搭建1.安装qemuX86_642.edk环境参考前面EmulatorPkg模拟器搭建环境https://editor.csdn.net/md/?articleId=1034687601.调试方法先build OvmfPkgrun qemu虚拟机qemu-system-x86_64 -bios "/home/zl/workspace/edk2...原创 2019-12-30 10:52:42 · 1348 阅读 · 1 评论 -
DXE编程 - Handle和Protocol的简单运用
一、Handle和Protocol的API描述如下:NameDescriptionInstallProtocolInterfaceRemoves a protocol interface from a device handle.UninstallProtocolInterfaceRemoves a protocol interface from a device...原创 2019-12-27 14:59:24 · 2369 阅读 · 0 评论 -
PEI编程练习 - hob简单练习
1原创 2019-12-26 15:12:30 · 3103 阅读 · 12 评论 -
PEI编程练习 - Ppi练习
主要分为两部分,一部分install ppi,一部分locate ppi。 需要用到前面写的LibInstallc文件PATH:edk2/EmulatorPkg/TestByMy/PeiTest/MyFirstPeiLib/MyFirstPeiLib.c代码部分:/*++ @fileCopyright (c) 2019a peim**/#include <Uef...原创 2019-12-26 15:12:05 · 2153 阅读 · 6 评论 -
PEI编程练习 - 写一个Lib静态库
写一个在PEI阶段用的Lib静态库,里面封装简单的API,方便后面写PPI调用。具体实现如下:head文件Head文件PATH:edk2/EmulatorPkg/Include/Library/MyFirstPeiLib.h/** @fileCopyright (c) 2019**************/#ifndef _MY_FIRST_PEI_LIB#defin...原创 2019-12-26 15:11:45 · 675 阅读 · 0 评论 -
PEI - PEI阶段分析
本文参考:UEFI Platform Initialization specification (PI)Pre-EFI Initialization (PEI) PhaseThe PI Architecture requires the PEI phase to configure a system to meet the minimum prerequisit...原创 2019-12-26 15:11:09 · 2194 阅读 · 0 评论 -
使用EmulatorPkg 模拟器调试
一、Windows下环境的搭建1.安装windows下nasm汇编支持2.安装python(安装PATH方式)3.安装vs2017操作执行: 在根目录执行edksetup.bat,确认PATH是否正确在BaseTool里面,编译工具,使用make然后buildEmulatorPkg ,最后跑模拟器调试(在buildEmulatorPkg 的ReadMe查看)二、linux下环境搭建...原创 2019-12-26 15:10:21 · 1393 阅读 · 0 评论 -
简单了解UEFI 系统的启动过程
1原创 2019-12-26 15:09:41 · 2697 阅读 · 0 评论 -
初识Legacy和UEFI
BIOS (Basic Input Output System)1975年由IBM 提出,在主板上电时,执行硬件初始化,再加载操作系统。现在一般使用“legacy”表示。2.UEFI统一可扩展固件接口(Unified Extensible Firmware Interface)...原创 2019-12-26 14:57:03 · 975 阅读 · 0 评论