当前位置: 首页 > article >正文

【UEFI实战】FSP简介

说明

在【UEFI实战】SlimBootloader简介中有说到,编译Slim Bootloader的时候需要使用到FSP,本文就是用来介绍FSP是什么,它的作用,以及如何编译等内容。

什么是FSP

FSP的全称是Firmware Support Package。

关于它的详细介绍,可以在Intel® Developer Zone找到。

这里简单介绍下:

1. FSP提供了Intel的部件,包括处理器、内存控制器、芯片组的初始化;

2. FSP被编译成独立的二进制,并可以集成到Bootloader中,这里说的Bootloader可以是Slim Bootloader,coreboot,UEFI等等;

3. FSP的优点有免费、方便集成、可减少开发时间,等等。

FSP的二进制结构大致如下:

它包含三个大的部分,分别是:

1. FSP-T:它主要用来初始化CACHE以及其它早期需要的初始化,对应提供给外部的接口是TempRamInit();

2. FSP-M:它主要用来初始化内存以及其它需要的初始化,对应提供给外部的接口是FspMemoryInit()和TempRamExit();

3. FPS-S:它主要是CPU和芯片组的初始化,对应提供给外部的接口是FspSiliconInit()和NotifyPhase(),其中后者又分为不同的阶段的调用,包括PCIE扫描之后,ReadyToBoot时和EndOfBootServices的时候;

上述三个组件都会包括一个配置文件,用来进行定制化。

因此Bootloader要操作FSP,就需要完成文件配置,接口调用,整个流程如下:

Bootloader中需要有相应的代码做上述的操作,以UEFI为例,在EDK中有几个PKG与FSP相关:

从上面的Pkg也能看出一点,FSP已经经历了不同的世代,目前我们使用的是FSP2.0的版本,所以只需关注上面两个就行了。

不过需要注意,这里的Pkg并不是提供FSP源代码的,只是提供了EDK与FSP之间的中间层,真正的用来初始化Intel组件的FSP的代码并没有开源,所以这里也拿不到。

本文后面讲到的FSP的编译,实际上是Intel提供的,对于模拟器QEMU的一个FSP,由于本文关注的是FSP本身,对于Intel组件的初始化并不关系,所以也够用了。

FSP的编译

本文使用QEMU的FSP,它其实已经在编译Slim Bootloader的时候(【UEFI实战】SlimBootloader简介)下载,具体的QemuFspPkg目录如下:

在同一层目录下就有BuildFsp.cmd命令,执行即可以完成编译,生成的二进制位于BuildFsp目录下:

注意这里的QemuFspPkg并不是在开源的EDK2中默认就有的,而是通过Patch打上去的,而对应的Patch是在Slim Bootloader中的,具体的操作可以参考Slim Bootloader下的\BootloaderCorePkg\Tools\PrepareFspBin.py这个文件。

FSP的使用

FSP不能单独使用,关于本文编译的FSP,可以参考【UEFI实战】SlimBootloader简介来使用。

http://www.lryc.cn/news/2416973.html

相关文章:

  • 并发——ScheduledThreadPoolExecutor 详解
  • 逻辑回归(Logistic)
  • 学习Qss--Qss的特性
  • 高并发下System.currentTimeMillis()性能问题及优化方案
  • 串口(SerialPort)的使用
  • 常用正交表(正交法编写测试用例)
  • Redis——持久化之RDB
  • rhapsody软件_Rhapsody集成引擎之日志篇(一)
  • 撞库及其危害性
  • log4net的使用步骤
  • 2的n次方对照表
  • 【Android 四大组件之Service】一文吃透Service 服务
  • Linux 文件系统挂载 INITRAMFS 与 INITRD
  • PreparedStatement 用法
  • Nginx-基本安装
  • Windows Vista 系统中的用户帐户控制和UAC远程限制 设置
  • 总线概述及常见总线
  • 基于JAVAWeb+Tomcat+Mysql开发的微电影网站
  • Java 常用代码汇总-附源码
  • C语言之文件读写——fscanf(),fprintf()详解
  • mailbox机制实例介绍(一)
  • 线性代数——余子式
  • HCIP------ 网络类型 PPP协议和HDCL协议
  • TrueCrypt原理与系统开发
  • 数据增强 - Cutout、Random Erasing、Mixup、Cutmix
  • 探索 `mpvue-vant`: 微信小程序开发的新利器
  • mint-ui使用
  • JqGrid 各个属性、方法使用说明
  • 快速上手 Rook,入门云原生存储编排
  • xxxxxxxxxxxxxxxxxxxxx已转行