说明

在【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简介来使用。

【UEFI实战】FSP简介相关推荐

  1. 【UEFI实战】LinuxBoot

    综述 LinuxBoot是一个开源的固件,用来替代UEFI BIOS加载Linux的系统. 官网是LinuxBoot. 对应的代码库位于LinuxBoot · GitHub. 另外,本文是在[UEFI ...

  2. 【UEFI实战】EDK的编译流程说明

    前言 使用EDK进行UEFI开发,开始的时候很容易遇到的问题就是编译不过,并非代码的问题,而是编译环境存在异常. 本文主要介绍EDK是如何进行编译的,使用的平台是Windows.这里还想说一点,事实上 ...

  3. 【UEFI实战】OS下如何查看系统相关信息

    说明 本文主要介绍OS下如何来查看系统信息,这些系统信息大多是通过BIOS上传的.这里的OS主要分为Linux和Windows两个部分来说明,前者使用的发行版系统是Ubuntu18.04,后者使用的是 ...

  4. 【UEFI实战】UART的初始化

    说明 UART全称是Universal Asynchronous Receiver/Transmitter,这里它表示的是一种实现串口通信的芯片,在整个串口系统中它的位置如下图所示: RS232 +- ...

  5. 【UEFI实战】SlimBootloader中调用FSP

    综述 FSP的全称是Firmware Support Package.FSP有以下的特性: FSP提供了Intel重要组件(包括处理器.内存控制器.芯片组等)的初始化: FSP被编译成独立的二进制,并 ...

  6. 【UEFI实战】Project Mu简介

    什么是Project Mu Project Mu是微软推出的一个项目,官网是 Project Mu Project Mu简单来说就是一套edk2基础上的UEF固件,但是具有自己的特点,如图所示: Pr ...

  7. 713页鸿蒙巨作《鸿蒙HarmonyOS手机应用开发实战》简介

    <鸿蒙HarmonyOS手机应用开发实战>一书由清华大学出版社出版,已经于2022年1月上市.拿到了样书,第一时间希望与读者朋友们分享下这本书里面的内容. 这本书的背景 近期拿到了样书,迫 ...

  8. 目标检测算法模型YOLOV3原理及其实战 课程简介

    前言 在移植目标检测算法模型到海思AI引擎上运行的过程中,深切感受到理解和掌握算法模型原理的重要性. 基于此,我出了一门专门来讲目标检测算法模型原理及实战的课程.虽然讲的是YOLOV3模型,但是对理解 ...

  9. 电商详情页系统实战(1) - 简介

    1 缓存技术掌握不够,会对发展带来了哪些阻碍 1.1 工作中 如果你这块技术掌握不够,然后你的公司的项目遇到了一些相关的难题,高并发+高性能的场景,hold不住类似的这种高并发的系统 因为缓存架构做得 ...

最新文章

  1. 创 keras_contrib 安装
  2. IIS7.5 安全配置研究(推荐)
  3. Windows 技术篇 - 远程桌面连接不保存密码、每次都要输入密码问题解决
  4. 杨辉三角java代码_【LeetCode】118. 杨辉三角(Pascal#x27;s Triangle)解题思路
  5. 2018年山西省环境空气质量综合指数平均下降10.8%
  6. 驰骋工作流引擎表单设计器--表单装载前数据填充
  7. 在Access数据库中使用SQL查询分析器
  8. 2020 农行笔试题——软开
  9. 【51单片机快速入门指南】5.2:SPI读取 12位ADC XPT2046 芯片
  10. 支付宝小程序下单支付接口:40004 ACQ.INVALID_PARAMETER
  11. Zero-shot Adversarial Quantization论文翻译+解读
  12. 【vue】bable的介绍以及编写vue文件
  13. windbg分析C++ EH exception
  14. skimage 学习第二天:ski官网示例程序总结(1)
  15. http 请求 405 错误,解决办法
  16. 【c51单片机】交通红绿灯设计
  17. JavaApplet运行
  18. LabVIEW热敏电阻温度计程序
  19. Linux学习:sheel编程
  20. SitePoint Podcast#180:David Lee King的Face2Face

热门文章

  1. 腾讯慧眼高可用架构设计
  2. springboot中mybatisplus基于注解的多对多级联查询
  3. 计算机网络安全技术论文范文,计算机方面论文范文数据库,与关于计算机网络安全防护技术的相关毕业论文题目范文...
  4. win2003服务器360修复漏洞打不开网页,WIN2003服务器出现HookPort 服务启动失败的解决办法!...
  5. list, vector, map, set 区别与用法比较
  6. webgl之Three.js学习 day10定制着色器和渲染后期处理
  7. 图结构算法学习(一)——有向图
  8. [Toddler's Bottle]-collision
  9. python多维数组排序算法_python 多维数组的排序
  10. 猫头鹰,夜猫子和睡眠 | 生活描绘