- 博客(1177)
- 资源 (77)
- 收藏
- 关注
原创 SeaBIOS实现简单分析
当段寄存器被重新赋值的时候,就根据段选择子,从存储器中读取GDT中的项,然后将段基址以及其他的段描述符信息存储在这个段寄存器对应的段描述符高速缓冲寄存器中。笔者猜测这一一点的实现方式是通过段描述符高速缓冲寄存器实现的(实模式下也是通过查询这个寄存器来获得段基址的),开机的时候代码段的对应基址项被设置成0xFFFF0000。从代码的Read sector部分可以看出,boot_disk将读取使用bootdrv指定的磁盘驱动器上,0磁头,0柱面,1扇区为起始位置,扇区数为1(512字节)的一段数据。
2023-03-29 09:26:56 742 1
转载 【UEFI实战】HII之vfr文件
https://blog.csdn.net/jiangwei0512/article/details/122824342
2023-03-23 21:18:30 361
原创 UEFI 基础教程 (十四) - Variable的使用
UEFI Varible 可以用作不同driver之间的通信, 是一种非常好的模块共享机制。Variable 的服务由BS,RT, SMM提供,在不同的phase应该使用对对应的服务。如在SMM handler下就应该使用。还可以通过Shell下的命令setvar,dmpstore ,来查看新建Variable的值。二、 编译生成EFI文件 & 运行 UEFI APP MyVariable.efi。PEI Phase 使用如下(注意PEI阶段没有setvariable 操作)
2023-03-20 22:47:29 934 1
原创 UEFI 基础教程 (十三) - VFR,HFR 简单使用 oneof btn
运行edksetup.bat && build -a X64 -p OvmfPkg\OvmfPkgX64.dsc -D DEBUG_ON_SERIAL_PORT -t VS2013x86编译整个OvmfPkg Package。添加字符串资源到 MdeModulePkg/Application/UiApp/FrontPageStrings.uni。在UEFI平台可以通过修改 VFR/HFR等相关文件来配置SETUP界面, 其中。UNI文件用来存放资源, C文件用作driver 用来动态更新配置值。
2023-03-20 22:43:34 900
原创 UEFI开发学习 - Variable Services
如果EFI_BOOT_SERVICES.ExitBootServices()已经被执行,没有设置EFI_VARIABLE_RUNTIME_ACCESS属性的变量将不可见,GetVariable()将会返回一个EFI_NOT_FOUND错误。有时是严重有限的容量。QueryVariableInfo()函数允许调用者获得关于可用于存储EFI变量的最大存储空间,可用于存储EFI变量的最大剩余存储空间的大小和每个EFI变量的最大空间,与指定的属性相关联。在DXE的运行过程中,会加载一个个的模块,来填满整个表。
2023-03-20 21:32:31 492
原创 【UEFI实战】HII之FrontPage
上述流程中最主要的是两个部分,”初始化Front Page“和”显示Front Page“,对应到两个函数InitializeFrontPage()和CallFrontPage(),它们可以连起来看,主要做的事情就是两个:一个是准备素材,这里的素材指的是uni文件、vfr文件等表示的HII数据;第三个参数是可选的,可以是NULL;对应的操作码可能是EFI_IFR_REF_OP、EFI_IFR_REF2_OP、EFI_IFR_REF3_OP和EFI_IFR_REF4_OP,这依赖于传入的参数值。
2023-03-18 16:57:35 788 1
原创 UEFI开发——调用一个自己编写的protocol
{0xee7ba45e, 0x9642, 0x4a97, {0x83, 0xc3, 0x30, 0xeb, 0xed, 0x3f, 0x9d, 0xd6}} //定义这个protocol的GUID。struct _EFI_COMPARE_PROTOCOL { //定义这个protocol的结构体,因为只实现比较大小,所以成员只有一个函数指针类型的成员。编写一个protocol并调用分三个部分,定义一个protocol,安装这个protocol,使用这个protocol。2.安装protocol。
2023-03-18 15:18:28 917 1
原创 UEFI开发学习6 - Protocol的创建
顾名思义,前者是只安装一个ProtocolInterface,后者可以安装一个或多个ProtocolInterface,此外,InstallMultipleProtocolInterfaces()比InstallProtocolInterface()执行更多的错误检查,因此规范建议使用InstallMultipleProtocolInterfaces()。Interface: 一个指向协议接口的指针。Handle: 指向要在上面安装新协议接口的句柄的指针,或者如果要分配新句柄,则指向NULL。
2023-03-18 11:08:25 854 1
原创 UEFI中的界面设计(一)
从底层来看,BDS也是这么做的,但它用了比较巧妙的方式——要知道,BIOS的主要功能是引导进GRUB(或者其他的),GRUB也是一个二进制文件。通过HII封装好的SetString可以修改UNI中对应TOKEN保存的内容,这样可以改变界面上显示的文字——所以我会用它显示固件信息,可以在初始化时调用函数获取,然后SetString,这样在引导进界面时,信息就会出现在屏幕上。这些都是这些交互类控件公用的,其他的根据自己的性质有不同,比如这里后面是oneof里面的选项,default说明这是默认选项。
2023-03-17 15:38:36 1101 1
原创 【UEFI实战】HII之常用函数---HiiAddPackages
QuestionId:其实是一个UINT16类型的数值,它是一个在当前驱动唯一的值,通过它回调函数(由EFI_HII_ACCESS_FORM_CALLBACK声明)就能够知道需要处理的数据具体是哪个;表示的是需要安装的资源。简单来说就是将资源(代码中用Package标识,这里将其翻译为资源似乎更好理解,它表示的可能是uni文件对应的字符串、vfr文件对应的Setup骨架、字体等等)安装HII数据库中,并返回数据库的Handle,后续要使用资源就要用到这个Handle。Position初始化为0。
2023-03-13 11:36:29 938
原创 【BIOS/UEFI】HII 基本框架及概述
一个 HII Handle 对应一个 Device Handle,通过 HII Handle 可以找到 Device Handle,相反的,通过 Device Hanlde 可以找到其对应的 Config Access Protocol。HII Database 是 HII 框架一个核心的公共模块,用于管理所有 HII 数据,包括 String、Forms、Keyboard、Images、Device Paths等。Font 通过点阵的方式显示,有宽字符和窄字符,汉字需要使用宽字符,英文使用窄字符。
2023-03-11 11:47:51 789 1
原创 UEFI实战--------HII之uni文件
uni文件HII的实现涉及到多种不同类型的文件,uni文件是其中最简单的一种,它用来存放各种语言的字符串以实现本地化。本节主要参考自《edk-ii-uni-specification.pdf》,后面简称为参考文档。
2023-03-11 11:45:29 1746 1
原创 UEFI开发探索101 – PCD探究(helloworld中的使用)
EFI System Table 里面有两个Services:Runtime Services和Boot Services,其中Runtime Services 是在UEFI 兼容系统上面几乎全时可用的Services,区别于Boot Services只能在EFI_BOOT_SERVICES.ExitBootServices()之前可用的特性。当然,根据平台或者其他原因的要求,也可以在后面用自己的instance去override VariableServiceInitialize里面的定义。
2023-03-09 15:52:19 539 1
原创 UEFI Common:UEFI 中的Runtime Services
EFI System Table 里面有两个Services:Runtime Services和Boot Services,其中Runtime Services 是在UEFI 兼容系统上面几乎全时可用的Services,区别于Boot Services只能在EFI_BOOT_SERVICES.ExitBootServices()之前可用的特性。当然,根据平台或者其他原因的要求,也可以在后面用自己的instance去override VariableServiceInitialize里面的定义。
2023-03-08 21:11:12 615
原创 UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件
Packages]#要链接的库UefiLib[Guids]#编译选项, = 表示选项附加到默认选项后面。== 表示仅使用所定义的选项,弃用默认选项。#MSFT:#MSFT:然后将 main.inf 添加到 Nt32Pkg.dsc 或UnixPkg.dsc 的[Components]部分, 例如添加下面一行(example目录在EDK2下)然后就可以使用BaseTools下的build进行编译了。Windows下执行Linux 执行。
2023-03-08 20:52:20 868
原创 UEFI启动流程
在RT阶段,OS Loader已经完全取得了系统的控制权,因此要清理和回收一些之前被UEFI占用的资源,runtime services随着操作系统的运行提供相应的运行时的服务,这个期间一旦出现错误和异常,将进入AL进行修复。在PEI阶段主要为DXE阶段准备执行环境,主要做CPU相关硬件初始化,最主要是对于内存的初始化,将DXE阶段需要的参数以HOB列表的形式进行封装,传递给DXE阶段。在BDS阶段,主要是初始化控制台设备,加载执行必要的设备驱动,根据用户的选择,执行相应的启动项。SEC阶段:(安全验证)
2023-03-08 20:45:45 787
原创 UEFI 原理与编程 之 三种方式实现 HelloWorld
在工作区新建目录 infs/UefiMain添加文件: UefiMain.c, 内容如下:EFI_STATUSUefiMain (再添加一个文件: UefiMain.inf, 内容如下:[Defines][Sources]UefiMain.c[Packages]UefiLib[FixedPcd][PatchPcd]之后修改 Nt32Pkg\Nt32Pkg.dsc, 在 356 行添加一行之后编译, 运行模拟器。
2023-03-08 09:41:55 755
原创 UEFI学习——使用gRT->GetVariable读取Setup选项值
这里又有个近水楼台,在DriverSimple.c的SetVariable函数后面,有一个gBS->CreateEventEx(不了解的可以先去学习UEFI中的事件),我们可以在我们的.c文件中也创建一个gBS->CreateEventEx,将并且将这两个.c文件中的事件函数(即CreateEventEx的第三个参数)都挂在同一个Guid上。#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010 //写时需要验证身份。
2023-03-08 09:05:18 1048 1
原创 UEFI开发与调试---edk2中的应用模块/库模块/驱动模块
应用模块应用模块包含标准应用程序模块,shell应用程序模块,以及main应用程序模块标准应用程序模块它是所有其他应用程序模块的基础,作为一个模块来说,同样由源文件和工程文件(.inf)组成。它的特征如下:(1) .inf中的ENTRY_POINT一般设置为UefiMain,这是一个约定俗称的名字,所以这个规则并不是一定的。(2) 指定的ENTRY_POINT入口函数必须要在模块源文件中有对应的实现。(3).inf中的MODULE_TYPE必须设置为UEFI_APPLICATION。
2023-03-08 08:47:40 639 1
原创 udk开发-稀里糊涂
在此情况下,DXE Runtime Driver必须创建一个signal类型的Event,当SetVirtualAddressMap() 被OS调用的时候,该Event将被通知。 DXE Runtime Driver创建的signal类型的Event所用到的通知函数不允许直接或者间接使用UEFI Boot Services、**UEFI Console Services **或者 UEFI Protocol Services。所有的Set或者Get的值在boot time memory关闭后将会丢失。
2023-03-07 21:32:31 1693 2
原创 在windows 10上使用qemu安装Windows 10虚拟机
这里使用了 whpx 加速,适合安装并启用了hyper-v的机器,也可以使用intel的haxm来加速,下载地址 https://github.com/intel/haxm,haxm与hyper-v不兼容,启用了hyper-v就不能使用haxm了,根据机器选一个。5 然后就是正常的windows安装步骤,值得注意的是下面一步,如果到了分区那一步找不到磁盘,需要点击下面的 Load Driver,找到下载的iso里的 viostor 目录里 w10\amd64 子目录里查找并安装驱动,然后就可以了正常分区。
2023-03-07 20:52:30 2771 1
原创 UEFI 学习 - 运行第一个DXE Driver
一、 编写源代码编写C:\edkii\OvmfPkg\MyHelloWorldDXEDriver\MyHelloWorldDXEDriver.cEFI_STATUSEFIAPI1编写C:\edkii\OvmfPkg\MyHelloWorldDXEDriver\MyHelloWorldDXEDriver.inf[Defines][Sources][Packages]BaseLibDebugLib。
2023-03-07 20:09:55 606
原创 UEFI学习(三)-创建一个dxe driver-UDK2017
那么,我们又要怎么体现我们的代码是否有实现呢?编译通过后,进入edk2\Build\OvmfIa32\DEBUG_VS2019\FV\目录下找到名为OVMF.fd的文件,便是我们此阶段生成的固件文件,这个OVMF.fd文件与之前的不同之处在于,此固件已经加入了我们自己编写的模块,我们的设想是,在它编译时,生成的log中应该存在我们debug的信息。通过对DXE简单的了解,我们能做到的便是将我们的driver加入到此中的一环,把我们的驱动模块也加入到生成的固件中,并在开机过程DXE阶段中自动执行我们的模块。
2023-03-07 11:17:05 887 3
原创 udk2017-EDK2设备驱动模型
在BDS阶段要把所有的Device值都初始化好,启动加载的Driver,让相应的Driver对Device进行管理。比如说我们系统中要实现一个AC97音频驱动,那么可能会有两个UEFI Driver,一个是PCI驱动(Bus Driver),一个是AC97音频驱动(Device Driver)提供音频操作的函数,那么我们可以认为PCI驱动(Bus Driver)是AC97音频驱动(Device Driver)的Controller控制器,而AC97音频驱动的实现依赖PCI驱动。
2023-03-06 14:38:28 367 1
原创 udk2017环境搭建编译步骤
1.参考minnowboard-max-rel-1-01-bin-releasenotes-for-binary-firmware-images.TXT。5.安装 python-2.7.10.amd64.msi,iasl-win-20160527.zip,nasm-2.12.02-win64.zip。7.设置环境变量OPENSSL_PATH C:\Openssl。3.复制ASL,NASM 到c:\。win10 64bit系统。编译:vs2015 cmd。
2023-03-04 08:46:55 526
原创 UDK2018 来了----常见编译问题
就是说,在编译过程中 GenFds在访问 build.db 的时候会出现问题。要求 VS2015(我实验用VS2013编译没问题,但是为了避免后续碰到奇怪的问题,建议老老实实用 VS2015)、NASM 2.12.01、Python2.7.x、Openssl (这个应该是第一次正式提出来作为要求,但是实验表明如果只使用 Nt32那么是完全无需安装的)仔细观察得知执行的 GenFds 是位于\BaseTools\Bin\Win32下面的GenFds.exe,这是Python编译生成的 EXE。
2023-03-04 08:26:59 509 1
原创 BIOS编译(e3845):MinnowBoard Max/Turbot 1.01 UEFI Firmware
【代码】BIOS编译(e3845):MinnowBoard Max/Turbot 1.01 UEFI Firmware。
2023-03-02 10:25:33 547
原创 【FT2000/4+X100】调试记录2--如何让生成X100固件
订阅专栏硬件环境FT2000/4+X100,单板结构,对外显示,运行银行麒麟操作系统。
2023-02-16 15:59:00 542 1
原创 AM57x平台开发板的默认调试串口为UART3改为uart1
AM5728是TI Sitara系列高性能SOC,得益于异构多核处理架构,CPU内集成了多核DSP、多核PRU、IVA-HD、GPU等协处理单元,通过硬件加速的方式极大增强CPU的数据、多媒体处理能力,可满足工业协议支持、大数据计算、实时控制等应用需求,同时采用先进的28纳米生产工艺,极大降低处理器的功耗,能耗比更加突出。打开U-boot源码“board/ti/am57xx”目录下的Kconfig文件,按照下图方法将文件中的参数“3”修改为“1”,表示将MLO启动过程中的打印信息从UART1输出。
2022-12-28 10:01:42 573
原创 linux命令之systemctl 详解
Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。##一、命令systemctl是 Systemd 的主命令,用于管理系统。
2022-11-01 09:59:00 1626
原创 UEFI 基础教程 (零) - 目录
UEFI 基础教程 (十八) — UEFI Build Process简单分析。UEFI 基础教程 (十五) — 获取UEFI MemoryMap。UEFI 基础教程 (六) — PROTOCOL 简单使用。UEFI 基础教程 (十) — FileIO 简单使用。UEFI 基础教程 (一) — 搭建UEFI开发环境。UEFI 基础教程 (九) — EVENT 简单使用。UEFI 基础教程 (七) — HOB 简单使用。UEFI 基础教程 (八) — PCD 简单使用。..
2022-08-27 11:26:57 812 1
e1000e-3.8.4.tar.gz
2020-08-17
win7 vs2012+wdk8.0 pci驱动源码 Solution.zip
2019-05-27
后台服务监控应用
2019-03-14
删除vs垃圾
2019-01-05
基于HI3531d的udp命令控制basler pylon gige工业相机程序
2018-12-05
基于hi3531、3531d的yuv压缩h264
2018-11-22
基于hi3531的live555例子(发送h264)
2018-11-20
hi3531\3531a\3531d\3536\3536d\3559\3559a\3519SDK
2018-11-16
基于basler工业相机的H264压缩
2018-10-29
dm642_PCI_INTA
2017-09-13
REALTEK刷机方法
2016-12-20
STC的CDB文件
2016-12-01
uefi的protocol例子
2023-03-18
Windows Embedded Standard 7 快速入门指南1234.pdf
2021-02-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人