- 博客(88)
- 资源 (5)
- 收藏
- 关注

原创 《UEFI内核导读》全集,2023年11月更新
序言随着国家十四五新战略规划的推出,众多国内企业都参与到国产芯片替代浪潮中来,可以预测未来越多的国产芯片会被设计、生产和使用在我们日常所使用的电子产品中,国产芯片拥有巨大的市场前景。目前国产芯片采用的体系架构主要有X86、ARM、MIPS、RISC V、PowerPC、Alpha等。我们知道电子产品正常工作必须要有操作系统和各种应用软件,没有操作系统和应用软件的芯片就是一堆废铁,而大多数人并不知道的是没有系统固件来加载操作系统的电脑亦是一堆废铁, UEFI就是由UEFI行业协会提出和......
2020-11-21 19:58:31
4093
3
原创 UEFI PEI CORE的二个阶段与PeiCore函数的3次调用流程简介
UEFI PEI CORE的二个阶段与PeiCore函数的3次调用流程简介
2023-11-27 20:16:55
1583
原创 《UEFI内核导读》如果没有内存,程序代码还能不能执行?
SSE支持8个128bit的XMM寄存器,8个64bit MMX寄存器可以在UEFI环境下使用特定的pinsrd/ pinsrw/ pshufd/movd指令在通用寄存器之间传递数据,进而可以把XMM、MMX寄存器当做普通32bit数据暂存器来使用。子过程Function是需要被调用的过程,在堆栈还没有准备好的情况下,可以使用如下代码来实现,只要在Function内部保持通用寄存器不被修改(具体方法是把通用寄存器保存在MMX和XMM寄存器当中)就可以保证Function的调用不会破坏执行环境。
2023-01-11 21:25:55
900
原创 《UEFI内核导读》UEFI Application Binary Interface (ABI)简介
不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误,支持可变参数的函数。编译器,有类似的机制,区别在于使用不同的寄存器来传递参数和返回值。所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。,其他类型的参数根据参数类型不同其传递方式稍有不同,如下表。个参数使用寄存器传递,从第五个开始使用堆栈传递,例如,拥有。调用约定仅在输出函数名前加上一个下划线前缀,如,原函数为。寄存器,而不是通过堆栈来传递,同样函数返回值通过。不会要求调用者传递参数数量,
2023-01-09 20:34:16
1479
原创 《UEFI内核导读》SecCore与PeiCore简介(I)
PeiCore的32bit入口地址是可以被映射到0xFFFFFFE0连续的4个字节(小端模式)。整个PeiCore文件也可以被映射到BFV或其他的FV的任何位置,前提是需要SecCore创建EFI_PEI_CORE_FV_LOCATION_GUID类型的PPI,通过此PPI获取PeiCore所在的FV地址,进而在BFV或其他的FV里面去搜索EFI_FV_FILETYPE_PEI_CORE类型的FFS文件,从而得到PeiCore的映射地址,并跳转到PeiCore执行。敬请关注:“固件C字营。
2023-01-06 22:22:49
1571
原创 《UEFI内核导读》UEFI Firmware Storage简介
UEFI提供了基本的服务来访问Fireware File,在PEI阶段用EFI_PEI_SERVICES->(FfsFindNextFile, FfsFindFileByName、FfsGetFileInfo),在DXE阶段用EFI_FIRMWARE_VOLUME2_PROTOCOL->(ReadFile, ReadSection、WriteFile、GetNextFile), 或EFI_BOOT_SERVICES->LoadImage()。
2023-01-01 16:31:40
2447
1
原创 《UEFI内核导读》UEFI中驱动的执行顺序
UEFI中DXE驱动或PEIM的执行顺序有三种不同的机制,分别如下。其中APRIORI的优先级最高,Depex次之,FV布局为默认顺序,可以根据需要进行调整。开发过程中,可以选用三种方式中的任何一种来调整驱动的被执行的顺序,以此到达提前或延后执行某个驱动的目的,上例会先执行A驱动,然后执行B驱动。3. 合理设置驱动在FV的位置,一般在FDF脚本使用。2. Depex,一般在INF脚本内部使用。例1:ModulePEI.inf。例:project.fdf。例:project.fdf。
2022-12-31 18:08:30
2507
原创 《UEFI内核导读》UEFI是不是操作系统?
从上面四点来看,“管理并控制计算机操作”,“运用和运行硬件、软件资源”,“提供公共服务”,“提供用户交互”UEFI已经具备了操作系统的所有的基本功能,因此从笔者角度来看UEFI已经是一个不折不扣的微型操作系统了!UEFI提供了丰富的服务并提供了驱动模型,可以管理计算机所有的硬、软件资源,包括,CPU、内存、硬盘、显示、网络、键盘、鼠标等,用户可以在UEFI环境操作和控制整个计算机系统。UEFI提供的服务来运用和运行硬件和软件资源,比如可以在UEFI环境下,连接HTTP上网,FTP、绘图、访问磁盘文件等。
2022-12-31 18:02:47
1017
原创 《UEFI内核导读》VS2019社区版EDK2开发环境搭建
以前的开发环境因更换电脑被破坏,重新基于最新的版本在Windows环境下使用VS2019社区版搭建UEFI/EDK2开发环境,简单记录。
2022-11-21 23:11:17
875
原创 《UEFI内核导读》一阶插值算法在UEFI中的应用
举例说明,在intel平台中我们一般会使用PL1来控制系统的长时间无故障运行的系统功耗,这个值一般来说越大系统性能越强,但是也伴随着系统的热设计必须的越强,这样才能把系统产生的热通过散热模组散到环境当中去,不过在无风扇系统中我们因为没有风扇,所有只能才有被动散热的方式,被动散热就要在系统温度达到一定的上限的时候主动降低系统的热源所产生的热量,在这里就是降低PL1的值,简化模型如下。顾名思义,一阶插值算法是多项式插值算法的一种,其中一阶插值算法在UEFI系统中是用的最多的算法。固件C字营·版权所有。.....
2022-07-24 17:19:47
456
1
原创 《UEFI内核导读》祖传代码引发的血案(I)
《UEFI内核导读》祖传代码引发的血案(I)敬请关注微信公众号:“固件C字营”============================================== 最近遇到一个奇怪的问题,大概就是BIOS在POST过程读写EC,非常小概率会失效。经测试发现失效的概率跟读写频率,读写速度相关。 于是乎,左手改EC代码,在相关的代码插桩加入log信息,右手分析祖传的BIOS代码,同样是打桩和加log,用终端来监视读/写过程中的异常,左右开弓忙的不亦乐乎。需要说明的是Cstyl.
2022-06-25 11:27:39
541
原创 《UEFI内核导读》之ACPI编程入门 第7章:特殊对象与类型
第7章:特殊对象与类型 ACPI/ASL支持一些预定义的对象类型和算子,它们有一些不同于其他对象的特性,极容易造成混淆,本章节对他们进行简单介绍。ArgX(Method Argument Data Objects)参数数据对象,用来向Method传递参数,作用域在Method内且只能用于传递参数使用。分为Arg0-Arg6共7个。从ArgX参数读数据:ObjectReference:类似DeRefOf效果,自动进行“去引用”,返回被引用的对象 Buffer:返回Buffer,...
2021-11-28 10:19:38
2891
原创 《UEFI内核导读》之ACPI编程入门 第8章,类型转换及规则
《UEFI内核导读》之ACPI编程入门 第8章,类型转换及规则第8章:类型转换及规则 对象类型转换包含两种,分别是隐式类型转换和显示类型转换,具体细节根据参数是输入参数或是输出参数有所不同。当输入参数类型与预定义操作数对象类型不匹配时,输入参数使用隐式类型转换,也称为“隐式源操作数转换”当被输出对象的类型与目标存储对象类型不匹配时,输出参数使用隐式类型转换,也称为“隐式结果对象转换”。
2021-11-24 23:06:48
1340
2
原创 《UEFI内核导读》之ACPI编程入门 第6章:对象类型及命名
固件C字营·版权所有敬请关注微信公众号:“固件C字营” ACPI/ASL字符集 与其他的编程语言类似,每一种语言都有其支持的字符集合,使用这些字符的组合来定义对象、路径、数字、常量、方法。字符集是组成ASL代码的最小基本单位。多个空格相当于一个空格。空行、小括号、逗号、新行,都是分隔符 “//”表示从”//”开始到行末都是注...
2021-11-21 09:34:15
1273
原创 《UEFI内核导读》之ACPI编程入门 第2章:名词术语(Term)
固件C字营·版权所有敬请关注微信公众号:“固件C字营”第2章:名词术语(Term)ACPI:Advanced Configuration and Power InterfaceASL:ACPI Source Language,经过编译之后生成AML字节码AML: ACPI Machine Language方法:Control Method,控制
2021-11-20 22:57:33
1366
原创 《UEFI内核导读》之ACPI编程入门 第3章:Hello World
固件C字营·版权所有敬请关注微信公众号:“固件C字营”第3章:Hello World 第一个ACPI/ASL程序“Hello World”,该程序会在调试终端输出“Hello World!”字符串。第一行,表示该程序需要引用外部的方法(Method)。第二行,空行,编译器会自动忽略。第三行,表示定义一个方法“HOWD()“,该方法...
2021-11-20 22:53:53
1664
原创 《UEFI内核导读》之ACPI编程入门 第5章:对象(Object)
固件C字营·版权所有敬请关注微信公众号:“固件C字营”第5章:对象(Object)ACPI/ASL使用Name ( ObjectName, Object )算子在全局ACPI名字空间(Global ACPI namespace)创建一个对象,对象名为ObjectName,该对象名是对“Object”的引用。对象由三部分组,对象(Objec...
2021-11-20 22:41:20
1229
原创 《UEFI内核导读》之ACPI编程入门 第4章:方法(Method)
固件C字营·版权所有敬请关注微信公众号:“固件C字营”第4章:方法(Method) Control Method是ACPI/ASL预定义的一种对象类型(ObjectType)为8的对象。它可以调用或者被其他的Method调用,在调用过程中可以被阻塞但不能被抢占,当一个Method被阻塞时OSPM可以转而执行其他的Method。以下称之为...
2021-11-18 22:42:21
2731
原创 《UEFI内核导读》ACPI编程入门
ACPI规范包含了ACPI硬件、ACPI软件、ACPI表、设备管理、电源管理、热管理等内容。其中ASL(ACPI Source Language)语言是默认用来编写ACPI代码的“声明式编程语言”,AML(ACPI Machine Language)是ASL源码被编译器编译后被AML解释器解释执行的字节码。AML是所有ACPI兼容的操作系统必须支持的,但是ASL是非必须的,只要是能最终被转换成AML的其他的任何语言都可以用来编写ACPI代码。 ASL用来定义ACPI对象(object)和
2021-11-17 21:12:56
3145
原创 《UEFI内核导读》Platform Environment Control Interface(PECI)简介
固件C字营·版权所有敬请关注微信公众号:“固件C字营”PECI是Intel提出,主要用于intel处理器温度监控,功耗控制及状态监测,采用主/从架构的1-wire bus双向总线。 系统架构如下图,其中Host一般是EC或BMC或其他的系统控制器,Client一般是intel CPU。在现在的多核及多处理器架构的...
2021-11-07 21:42:52
6817
原创 《UEFI内核导读》How to Rotate Screen
之前的文章《UEFI内核导读》Graphics Driver介绍了UEFI环境如何在显示设备上输出字符或图形,GraphicsOutputprotocol为输出提供了最底层的硬件驱动支持。但是有时候我们由于机构或硬件设计的原因需要做一些定制的动作比如:机构设计导致用户手持的方向跟屏幕物理方向有90°、180°或270°偏差怎么办?这个时候就需要对屏幕进行旋转。如何旋转屏幕一般是由驱动来实现,在UEFI系统当中就需要由GOP驱动来实现,但是一般来说GOP是由silicon厂商来提...
2021-05-16 16:33:25
1261
1
原创 《UEFI内核导读》UEFI Battery Charging I
UEFI固件设计的初衷就是用来引导操作系统,下面简单介绍UEFI环境下windows是如何启动,以及在pre-OS环境下如何实现对电池充放电的管理。启动Windows流程基本分为以下几个阶段:1.硬件自举过程。主要完成了硬件的上电过程和BIOS第一条代码的调用(Device Powered on)。2.基本的硬件初始化过程。这里主要由不同的SOC芯片厂商来提供,如Intel会提供FSP(Firmware boot loaders)。3.UEFI运行时环境。包括boot service 、r.
2021-05-16 16:28:46
802
原创 Cstyle的UEFI导读:Open source UEFI BIOS开发实战简介,基于Intel 10代酷睿Cometlake-U硬件平台
本文介绍基于开源UDK+FSK方案在Intel 10代酷睿Cometlake-U硬件平台上实现power on实战,以及介绍如何使用完全开源的UDK来实现对我们OEM的板子进行porting与debug方法。主要从几个方面进行介绍分别是:目标的硬件开发板、需要准备开发环境 、OEM porting及构建、烧录并测试、持续改进等主题。通过使用开源UEFI方案我们现在我们可以在不花钱购买IBV如AMI、Insyde的代码的情况下开发基于X86的主板,使用开源方案可以节省数十万的的向IBV购买代码的开销,今天这一
2020-11-30 21:13:11
2364
2
原创 Cstyle的UEFI导读:PEI Image Service
所谓”固件“原始的定义是被固化的软件。历史上存储固件的介质有很多类似EEROM、Flash等,目前在UEFI固件领域基本都是用的NorFlash,它最大的特点是支持XIP也即片上执行。UEFI BIOS固件基本都是使用SPI接口的NorFlash来存储。目标二进制固件文件通常包括代码段(code)、只读数据段(RO Data)、已初始化读写数据段(RW Data)、BSS段、堆、栈、以及其他的资源段。固件在XIP阶段的代码在链接的时候,链接地址与存储地址是相同的都会是0x00000000,在C代码开始之
2020-11-26 22:23:41
892
原创 Cstyle的UEFI导读:Secure Boot简介
安全启动(SecureBoot)使用非对称加密与数字签名技术提供了一种从硬件到操作系统的安全启动信任链。本文介绍了系统固件、OS Loader、证书、密钥及之间的沟通流程。在windows下下可以使用如下命令获取PK,KEKdb、dbx、SetupMode、SecureBoot、PKDefault、KEKDefault、dbDefault、dbt、dbtDefault等全局变量的值。例如:当前系统的SetupMode的NV值是0,表示工作在user模式。平台密钥Platform Key (P
2020-11-25 20:36:21
5173
原创 Cstyle的UEFI导读:Embedded Controller Share ROM
此处仅以一个具体的例子分析share rom及整个flash的layout,仅BIOS区域(不包括ME)总大小是10MByte。如下图,FV_RECOVERY0(地址0x00A00000)映射到4G顶端(0xffffffff),使用FIT构建flash image的时候还会重定位最终FV_RECOVERY0的地址(用edit直接打开二进制文件的话,会在文件的末端,如图二所示),加入SPI flash descriptor,一般是在fffffff0h处放一条跳转指令,跳转到FV_RECOVERY0处。FV..
2020-11-23 21:45:47
2020
原创 Cstyle的UEFI导读:Embedded Controller链接过程
以MEC1428为例来介绍EC的开发流程和基本原理。按照惯例从链接开始介绍。一.自定义链接脚本。默认Mplab x默认使用xc32提供的脚本,在Mplab x也可以按照下图自定义链接脚本。二.定义地址映射针对MEC1428其地址及内存映射关系如下Data RAM:32K(0xBFD18000),Code RAM:160K(0xBFCF0000),ROM:192K(0xBFC00000),MMCR:2M(0xA0000000)/*************...
2020-11-23 21:34:48
850
原创 《Freertos内核详解》系列专题博客
《Cstyle的札记,Freertos内核详解》Cstyle的札记,Freertos内核详解,第0篇Cstyle的札记,Freertos内核详解,第1篇Cstyle的札记,Freertos内核详解,第2篇Cstyle的札记,Freertos内核详解,第3篇Cstyle的札记,Freertos内核详解,第4篇Cstyle的札记,Freertos内核详解,第4.1篇Cstyle的札记,Freertos内核详解,第4.2篇Cstyle的札记,Freertos内核详解,第4.3篇
2020-06-16 21:42:06
482
原创 Zephyr内核详解,第0.1篇 构建
Zephyr内核详解,第0.1篇 构建梳理下构建过程,整个构建过程只需要执行下面四个命令,分别来说明。1.zephyr根目录执行:source zephyr.sh2.执行:mdkir ./sample/helloword/build && cd ./sample/helloword/build3.执行:cmake -GNinja -DBOARD=nucleo_l476rg .....
2020-06-16 21:22:57
1576
原创 《Zephyr内核详解》系列专题博客
Cstyle的札记,Zephyr内核详解,第0篇 开发环境Cstyle的札记,Zephyr内核详解,第0.1篇 构建Cstyle的札记,Zephyr内核详解,第1.0篇 内核启动过程Cstyle的札记,Zephyr内核详解,第1.1篇 内核启动过程(续)未完待续......转载请注明出处Cstyle.z.zhou@outlook.com // http://blog.youkuaiyun.com/CStyle_0x007...
2020-06-16 20:49:50
696
原创 Zephyr内核详解,第0篇 开发环境
Zephyr内核详解,第0篇 开发环境 Zephyr是什么就不赘述,总之是一款遵循GPL的linux基金会的开源RTOS,以下的一系列文章均基于这款系统展开;嵌入式行业只讲理论不是实践就是耍流氓,先介绍下实验环境,先从如何搭建环境开始说起:1.开发板:st nucleo-l476rg2.开发环境:macos mojave (10.14...
2020-06-16 20:32:52
1547
原创 Cstyle的札记,Freertos内核详解,第5.0篇
前面讨论了怎么把freertos移植到s3c2440上的话题,现在我看开始细细读一下freertos的代码。读代码之前先认识下代码规范,我们常见的类似的规范大多是一些命名规则,对齐什么的,比如驼峰命名法等等。但是freertos用了一个完全不同的规则,被称之为MISRA (TheMotorIndustrySoftwareReliabilityAssociation),之所
2015-12-18 22:44:08
1199
原创 Cstyle的札记,Freertos内核详解,第4.3篇
移植OS汇编是绕不过去的,先从MDK默认提供的s3c2440.s开始,这里我们需要完成以下几个事情:1.cpu状态和模式2.设置clock,包括系统时钟,sdram时钟,外设时钟等等3.设置sdram的时序参数,这个是非常重要的,否则我们的内存就不能使用4.堆,栈5.选择初始化外设,IO等 废话不多说先上图,下面是我花了几天时间在TQ2440+Freertos
2015-12-13 12:18:38
1438
1
原创 Cstyle的札记,Freertos内核详解,第4.2篇
移植之前先认识下开发工具很重要,这里使用MDK(V5.16a)工具,默认使用Armcc,它能支持把c以及c++编译成arm或者是thumb机器码,支持以下的标准:ISO C 1990,ISO C 1999,ISO C++ 2003,ISO C++2011,默认输出格式是ELF格式,在编译结束之后可以转换成Hex格式烧进ROM。 编译器支持在标准c,c++上提供一些GNU类似的扩展,支持使
2015-10-26 17:11:09
983
原创 Cstyle的札记,Freertos内核详解,第4.1篇
因为手上有现成的板子,准备先移植Freertos到S3C2440上练一下手,搜索了一下好像目前网络上和官方都没有支持这款soc,官方对三星的cpu好像一款支持的也没有,不知道为什么三星这么个大的半导体公司居然没有人帮忙移植。准备工作如下:1.从keil官网下载最新的MDK,并使用网上的注册机注册破解。2.从Freertos官网下载最新的源代码3.从Jlink官网下载最新的Jlink
2015-10-26 17:08:53
1592
原创 Cstyle的UEFI导读: UEFI的N种实现及差别
休息了快一个月了,找工作也没什么心情,闲来无事回头看看,自毕业以来一直都在BIOS这个行业打转,目前的各种新闻来看全球的IT行业都似乎不太景气,PC出货量一泻千里,想要有所转机看起来不是一天两天的事情,想来无事来看看做过的几个UEFI BIOS方案有什么不同。目前市面上常见的X86平台的UEFI实现方案大致分为几个,AMI,Insyde,phoenix还有一个就是号称是国产的百敖软件,再者就是in
2015-09-25 15:48:56
3323
8
原创 Cstyle的UEFI导读:第20.0篇 IGD OpRegion interface && IGD OpRegion PROTOCOL
ACPI IGD OpRegion interface是用SCI来实现IGD driver,OS,BIOS之间沟通的桥梁,IGD OpRegion PROTOCOL是UEFI BIOS构建桥梁的脊梁。Legacy的实现方式下与OS沟通的方式:OpRegion Memory Layout:Mailbox1当中提供的Public ACPI Methods可以
2014-11-15 17:30:23
4605
原创 Cstyle的UEFI导读: SMM在UEFI当中的实现
晚上吃的比较多不敢太早睡,趁空闲来看点东西,概念就不说了来看看SMM的几个阶段。 SMM大概分为两个阶段:SMM初始化阶段和SMM runtime阶段,先来看看初始化阶段,还是先上图,下面的这幅图是讲的SMM的初始化和runtime整个阶段,整个阶段由DXE Dispatcher加载SMM IPL开始,到我们每一个注册的SMM hander被不断的执行为止,当然我们的S
2014-11-10 22:41:38
9835
PEI CORE的二个阶段以及PeiCore函数的3次执行流程简介,固件C字营,cstyle
2023-11-27
《UEFI内核导读》2024年即将更新 做知识的搬运工 固件C字营·出品 Cstyle·编著
2023-11-19
基于 WMI(Windows Management Instrumentation)的 BIOS 接口设计<固件 C 字营>C
2023-03-02
《UEFI 内核导读》之ACPI 编程入门20211118.pdf
2021-11-18
《UEFI内核导读》-样章20211105.pdf
2021-11-05
《UEFI内核导读》 Platform Environment Control Interface(PECI)简介.pdf
2021-11-05
《UEFI内核导读》-样章20210318.pdf
2021-03-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人