FV

  • 基本概念
  • 架构组成
  • File Type&Section Type
  • FV的访问
  • FV拓展 EFI IMAGE (PE/COFF)
  • FV拓展 EFI OPTIONROM

基本概念

FD:固件设备,指任何可以存储固件的设备或设备的集合,它存储代码和数据。
FV:固件卷,指在FD上一个连续的部分,我们可以把它看成一个逻辑设备,因为我们代码真正操作的是FV,而非FD。我们经常提到的FFS的概念也是以FV的形式存在,它描述了FV中的文件组织方式。FV之于FD,类似于thread之于package。
FF:固件文件,指在FV中组织代码和数据的一个集合。我们在PEI和DXE阶段都要Dispatch Modules,这个Modules指的就是FF。

相较于文件系统要考虑目录、文件等更多内容,FV并不是特别复杂,主要是把一些code 、drive 、date等整合在一起更好的进行存储,发现,修改。最终生成的BIOS image 就是FD(实际上就是FV拼接而成的)、 Fv(PEI Spec定义的标准的固件存储格式)。

架构组成

每个FV的各种文件组织在一起可以看做一个简化版的文件系统,虽然不是按照目录结构存放的但也有自己的层级结构,FV再往下面是FS,FV是由FS组成的,每个FS都有自己的一个GUID、Type描述着自己包含的是什么类型,有什么数据,;FS再往下便是Firmware File又称为section;这个section才是清晰地展现了里面到底存放的是数据或是其他information。下图详细讲述了该结构:

UEFI Firmware文件结构定义可参考:PiFirmwareVolume.h (\mdepkg\include\pi) PiFirmwareFile.h (\mdepkg\include\pi)

Flash通常都Memory map到最顶端,4GB-32MB(/16MB),FLASH Device简称就是FD,上图明显的看出来FD是由一组FV组成,每个FV都有自己的File System Guid 和FV name GUID,File system Guid指的是表示自己是什么样的格式存储在header里,有些FV是属于标准格式下的FV,包含File以及后续的Section,在同一个FV里面的File都有各自的GUID且不能相同,还有Variable FV里面存的都是Variable数据,是两种不同的格式,Section存储不同的数据,不需要GUID且Section是可以进行内部嵌套的。

上图为SPEC中的一张,从另一个角度展示了Firmware File Section之间的联系,外面的蓝色框框代表着FS,里面包含了E0,L3,E1这三个Section,E0包含了L0,L1,L2三个Section。同理E2处于E3中的同时又包含了L4,L5这两个Section,可以证明,Section之间是可以嵌套的但同时也带来了一定的复杂性,而File和FV是并行的没有嵌套的,但同时,FV也是有可能嵌套在Section中的。

File Type&Section Type

在file中,Guid只是起一个标识作用,没有其他含义,但是自己的属性都是由File Type标识出来的,比如说ACPI Table会存在Freeform这种的File Type中。Raw类型的数据存储是不需要section的。

  • FFS File Type

    • EFI_FV_FILETYPE_RAW
    • EFI_FV_FILETYPE_FREEFORM
    • EFI_FV_FILETYPE_PEIM
    • EFI_FV_FILETYPE_DRIVER
    • EFI_FV_FILETYPE_APPLICATION
    • EFI_FV_FILETYPE_SMM
    • EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE
  • Section Type
    • EFI_SECTION_PE32
    • EFI_SECTION_DXE_DEPEX/EFI_SECTION_PEI_DEPEX/EFI_SECTION_SMM_DEPEX
    • EFI_SECTION_USER_INTERFACE
    • EFI_SECTION_RAW
    • EFI_SECTION_FIRMWARE_VOLUME_IMAGE
      Dispatch就是通过File Type 和Section Type遍历FV后进行加载。
      上图为网络图片,展示了FV的树状结构,由FV到Section层级结构的示例显示。每个driver对应过来就是一个FS。

FV的访问

在PEI阶段,FV的访问是通过FvInfoPpi这个PPI,这个PPI是由platform上报给Peicore,PEIcore里会有一个FvPpi作用于标准的FV进行检测发现FV的内容。另一种方式是通过Hob,在PEI阶段发现的尚未使用的FV会生成HOB表存储信息,等到DXE阶段的时候再进行使用。

#mermaid-svg-PSjmvaHgk6y7ogzZ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .label text{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .node rect,#mermaid-svg-PSjmvaHgk6y7ogzZ .node circle,#mermaid-svg-PSjmvaHgk6y7ogzZ .node ellipse,#mermaid-svg-PSjmvaHgk6y7ogzZ .node polygon,#mermaid-svg-PSjmvaHgk6y7ogzZ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-PSjmvaHgk6y7ogzZ .node .label{text-align:center;fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .node.clickable{cursor:pointer}#mermaid-svg-PSjmvaHgk6y7ogzZ .arrowheadPath{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-PSjmvaHgk6y7ogzZ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-PSjmvaHgk6y7ogzZ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-PSjmvaHgk6y7ogzZ .edgeLabel rect{opacity:0.9}#mermaid-svg-PSjmvaHgk6y7ogzZ .edgeLabel span{color:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-PSjmvaHgk6y7ogzZ .cluster text{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-PSjmvaHgk6y7ogzZ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-PSjmvaHgk6y7ogzZ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-PSjmvaHgk6y7ogzZ .actor-line{stroke:grey}#mermaid-svg-PSjmvaHgk6y7ogzZ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .sequenceNumber{fill:#fff}#mermaid-svg-PSjmvaHgk6y7ogzZ #sequencenumber{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .messageText{fill:#333;stroke:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-PSjmvaHgk6y7ogzZ .labelText,#mermaid-svg-PSjmvaHgk6y7ogzZ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-PSjmvaHgk6y7ogzZ .loopText,#mermaid-svg-PSjmvaHgk6y7ogzZ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-PSjmvaHgk6y7ogzZ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-PSjmvaHgk6y7ogzZ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-PSjmvaHgk6y7ogzZ .noteText,#mermaid-svg-PSjmvaHgk6y7ogzZ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-PSjmvaHgk6y7ogzZ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-PSjmvaHgk6y7ogzZ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-PSjmvaHgk6y7ogzZ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-PSjmvaHgk6y7ogzZ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ .section{stroke:none;opacity:0.2}#mermaid-svg-PSjmvaHgk6y7ogzZ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-PSjmvaHgk6y7ogzZ .section2{fill:#fff400}#mermaid-svg-PSjmvaHgk6y7ogzZ .section1,#mermaid-svg-PSjmvaHgk6y7ogzZ .section3{fill:#fff;opacity:0.2}#mermaid-svg-PSjmvaHgk6y7ogzZ .sectionTitle0{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .sectionTitle1{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .sectionTitle2{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .sectionTitle3{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-PSjmvaHgk6y7ogzZ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ .grid path{stroke-width:0}#mermaid-svg-PSjmvaHgk6y7ogzZ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-PSjmvaHgk6y7ogzZ .task{stroke-width:2}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskText:not([font-size]){font-size:11px}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-PSjmvaHgk6y7ogzZ .task.clickable{cursor:pointer}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskText0,#mermaid-svg-PSjmvaHgk6y7ogzZ .taskText1,#mermaid-svg-PSjmvaHgk6y7ogzZ .taskText2,#mermaid-svg-PSjmvaHgk6y7ogzZ .taskText3{fill:#fff}#mermaid-svg-PSjmvaHgk6y7ogzZ .task0,#mermaid-svg-PSjmvaHgk6y7ogzZ .task1,#mermaid-svg-PSjmvaHgk6y7ogzZ .task2,#mermaid-svg-PSjmvaHgk6y7ogzZ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskTextOutside0,#mermaid-svg-PSjmvaHgk6y7ogzZ .taskTextOutside2{fill:#000}#mermaid-svg-PSjmvaHgk6y7ogzZ .taskTextOutside1,#mermaid-svg-PSjmvaHgk6y7ogzZ .taskTextOutside3{fill:#000}#mermaid-svg-PSjmvaHgk6y7ogzZ .active0,#mermaid-svg-PSjmvaHgk6y7ogzZ .active1,#mermaid-svg-PSjmvaHgk6y7ogzZ .active2,#mermaid-svg-PSjmvaHgk6y7ogzZ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-PSjmvaHgk6y7ogzZ .activeText0,#mermaid-svg-PSjmvaHgk6y7ogzZ .activeText1,#mermaid-svg-PSjmvaHgk6y7ogzZ .activeText2,#mermaid-svg-PSjmvaHgk6y7ogzZ .activeText3{fill:#000 !important}#mermaid-svg-PSjmvaHgk6y7ogzZ .done0,#mermaid-svg-PSjmvaHgk6y7ogzZ .done1,#mermaid-svg-PSjmvaHgk6y7ogzZ .done2,#mermaid-svg-PSjmvaHgk6y7ogzZ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-PSjmvaHgk6y7ogzZ .doneText0,#mermaid-svg-PSjmvaHgk6y7ogzZ .doneText1,#mermaid-svg-PSjmvaHgk6y7ogzZ .doneText2,#mermaid-svg-PSjmvaHgk6y7ogzZ .doneText3{fill:#000 !important}#mermaid-svg-PSjmvaHgk6y7ogzZ .crit0,#mermaid-svg-PSjmvaHgk6y7ogzZ .crit1,#mermaid-svg-PSjmvaHgk6y7ogzZ .crit2,#mermaid-svg-PSjmvaHgk6y7ogzZ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-PSjmvaHgk6y7ogzZ .activeCrit0,#mermaid-svg-PSjmvaHgk6y7ogzZ .activeCrit1,#mermaid-svg-PSjmvaHgk6y7ogzZ .activeCrit2,#mermaid-svg-PSjmvaHgk6y7ogzZ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-PSjmvaHgk6y7ogzZ .doneCrit0,#mermaid-svg-PSjmvaHgk6y7ogzZ .doneCrit1,#mermaid-svg-PSjmvaHgk6y7ogzZ .doneCrit2,#mermaid-svg-PSjmvaHgk6y7ogzZ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-PSjmvaHgk6y7ogzZ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-PSjmvaHgk6y7ogzZ .milestoneText{font-style:italic}#mermaid-svg-PSjmvaHgk6y7ogzZ .doneCritText0,#mermaid-svg-PSjmvaHgk6y7ogzZ .doneCritText1,#mermaid-svg-PSjmvaHgk6y7ogzZ .doneCritText2,#mermaid-svg-PSjmvaHgk6y7ogzZ .doneCritText3{fill:#000 !important}#mermaid-svg-PSjmvaHgk6y7ogzZ .activeCritText0,#mermaid-svg-PSjmvaHgk6y7ogzZ .activeCritText1,#mermaid-svg-PSjmvaHgk6y7ogzZ .activeCritText2,#mermaid-svg-PSjmvaHgk6y7ogzZ .activeCritText3{fill:#000 !important}#mermaid-svg-PSjmvaHgk6y7ogzZ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-PSjmvaHgk6y7ogzZ g.classGroup text .title{font-weight:bolder}#mermaid-svg-PSjmvaHgk6y7ogzZ g.clickable{cursor:pointer}#mermaid-svg-PSjmvaHgk6y7ogzZ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-PSjmvaHgk6y7ogzZ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-PSjmvaHgk6y7ogzZ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-PSjmvaHgk6y7ogzZ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-PSjmvaHgk6y7ogzZ .dashed-line{stroke-dasharray:3}#mermaid-svg-PSjmvaHgk6y7ogzZ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ .commit-id,#mermaid-svg-PSjmvaHgk6y7ogzZ .commit-msg,#mermaid-svg-PSjmvaHgk6y7ogzZ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-PSjmvaHgk6y7ogzZ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-PSjmvaHgk6y7ogzZ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-PSjmvaHgk6y7ogzZ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-PSjmvaHgk6y7ogzZ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-PSjmvaHgk6y7ogzZ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-PSjmvaHgk6y7ogzZ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-PSjmvaHgk6y7ogzZ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-PSjmvaHgk6y7ogzZ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-PSjmvaHgk6y7ogzZ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-PSjmvaHgk6y7ogzZ .edgeLabel text{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-PSjmvaHgk6y7ogzZ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-PSjmvaHgk6y7ogzZ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-PSjmvaHgk6y7ogzZ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-PSjmvaHgk6y7ogzZ .note-edge{stroke-dasharray:5}#mermaid-svg-PSjmvaHgk6y7ogzZ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-PSjmvaHgk6y7ogzZ .error-icon{fill:#522}#mermaid-svg-PSjmvaHgk6y7ogzZ .error-text{fill:#522;stroke:#522}#mermaid-svg-PSjmvaHgk6y7ogzZ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-PSjmvaHgk6y7ogzZ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-PSjmvaHgk6y7ogzZ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-PSjmvaHgk6y7ogzZ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-PSjmvaHgk6y7ogzZ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-PSjmvaHgk6y7ogzZ .marker{fill:#333}#mermaid-svg-PSjmvaHgk6y7ogzZ .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-PSjmvaHgk6y7ogzZ {color: rgba(0, 0, 0, 0.75);font: ;}

Firmware Storage Device
Firmware Volume Block Driver
Firmware Volume Driver

DXE在拿到这个hob之后,会先生成FVB protocol 然后再生成FV protocol 这个FV protocol就很像PEI阶段的FV ppi,这个FV Protocol就对这个FV进行管理,对FV数据进行操作,中间的FVB可读可写,如果说这一块block空间存储的是FV格式的数据,是PEI flow,spec 规定的格式的,则会继续创建FV protocol 如果不是的话则不会创建。基于FVB才能对variable进行操作,FVB 相当于直接对FLASH按照block方式进行读写擦除,所以FV protocol支持的肯定是PEIspec支持的标准的数据格式,而FVB只是基于此段空间提出了一个比较low level的操作,只能进行简单的原始操作,至于本段数据类型的数据结构是不知道的。

FV除了在FLASH上也可以存在于其他存储空间,Dispatcher和BDS可以使用FV、File或network来查找所需组件 ,也可以根据平台需求更改包装。

FV拓展 EFI IMAGE (PE/COFF)

  • DOS Header

    • DOS signature
  • COFF Header
    • 类型: IA32 or X64 or ARM
  • Optional Header
    • Section alignment and file alignment:对齐要求
    • Entry point :存放在text里面,记录了相对于header的offset
    • Subsystem: EFI driver/EFI runtime driver/EFI application
    • Data Directory(通常16条)
      • Debug directory to find the debug PDB file path in .rdata section
      • Relocation directory to find the relocation data in .reloc section
  • Section data(段数据)
    • .text: 代码
    • .rdata: 只读数据,比如Debug file path
    • .data: 全局变量
    • .rsrc: 资源部分包含额外的数据
    • .reloc: info来重新加载PE图像到不同的地址

FV拓展 EFI OPTIONROM

  • Option Rom内置在设备中
  • Option Rom在UEFI引导下自动加载
  • EFI Option Rom包括作为设备驱动程序的EFI图像
  • ROM报头有0x0EF1作为签名
  • PCI数据结构包括DeviceId和VendorId
  • 选项rom图像可以包含多个图像,以支持不同的ARCHs。

BIOS知识枝桠——FV相关推荐

  1. BIOS知识枝桠——文件系统

    硬盘与文件系统 硬盘物理结构 MBR分区 GPU分区 FAT ROM Layout 硬盘物理结构 以一个机械硬盘为例,内部包括磁片.主轴.速写磁头.传动手臂.传动轴.反力矩弹簧装置,SSD没有这样的结 ...

  2. BIOS知识枝桠——Device Path

    EFI Device Path 定义&原型 文本表示形式 EFI Device Path种类 Hardware Device Path ACPI Device Path Messaging D ...

  3. BIOS知识枝桠——GPU

    GPU理论阐述 概念 功能 供应商 NVIDIA GPU 名称解读 显存 GPU/显卡信息查看.鉴别工具 显示接口 GPU通用计算编程 科普类文章,无实际技术相关,内容来源网络 概念 图形处理器(英语 ...

  4. BIOS知识枝桠——Event

    Event 传统的中断模式 硬件中断 软件中断 Event Overview Event Function Event Use TPL Timer UEFI不再为开发者提供中断支持,但在UEFI内部还 ...

  5. BIOS知识枝桠 -- PCIE

    博客内容来源为网络下载ppt,侵删 PCI的发展 PCI Local Bus 示意图 NoteBook上常见的PCIE Device:SSD DGPU WLAN LAN CardReader. 通过总 ...

  6. BIOS知识枝桠——SCI SMI IRQ

    SCI SMI 中断 中断分析 SCI SMI SMM SCI和SMI的异同 特殊的GPE: Q event SMI的几种常见的注册 SWSMI的触发 常见SMI的应用 中断 中断: 指当出现需要时, ...

  7. BIOS知识枝桠——ACPI

    ACPI在BIOS中的应用 ACPI Overview Power State ACPI Table XSDT FADT ASL Code 变量和运算 函数 ACPI Overview 完全解读:Ad ...

  8. BIOS知识枝桠—— Library

    Library overview Lib Overview Lib的文件结构 库的实体: 库的头文件: 库的Dec文件: 库函数的调用: MdePkg 常用Lib PUBLIC DEFINITIONS ...

  9. BIOS知识枝桠——HII

    HII Database HII OverView HII Protocol HII OverView HII(Human Interface Infrastructure), 定义了一套管理用户输入 ...

最新文章

  1. 万字长文从 0 详解 Istio
  2. 强大的vim配置,让编程更随意
  3. subversion SVN
  4. 道路里程桩号标注_2000公里长距离电车远行,逸动EV460对里程焦虑说不
  5. android性能测试工具之dumpsys
  6. java判断字符串是否包含某个字符串_Bash技巧:使用[[命令的 =~ 操作符判断字符串的包含关系...
  7. nginx配置文件简单理解(自用)
  8. 关于ADO.Net连接池(Connection Pool)的一些个人见解
  9. Eclipse保护色设置
  10. echart 图谱_echart——关系图graph详解
  11. 502 proxy error解决方法_Homebrew安装、卸载、可能的报错及解决方案_Mac
  12. 一、OpenTCS4.12 创建一个新的通信驱动
  13. Android开发人才前景分析及建议
  14. supersu二进制更新安装失败_supersu二进制更新失败怎么办 supersu二进制更新失败解决方法...
  15. NOI 4.3 1538: Gopher II(匈牙利算法求最大匹配)
  16. dex2oat程序参数总结
  17. 1.amdahl定律(加速比)
  18. win10鼠标右键恢复
  19. 虚拟机在客户端和服务器之间存在时间,Server 2012 Domain Controller上出现“客户端和服务器之间存在时间和/或日期差异”错误...
  20. 2022年双十二有哪些tws蓝牙耳机?值得入手的tws耳机推荐

热门文章

  1. 纵浪大化中 不喜亦不惧 应尽便须尽 无复独多虑
  2. 开源免费的对象存储Minio
  3. 探索式软件测试学习笔记
  4. coffeeScript demo
  5. Unity3D优化技巧系列一
  6. 是免疫学家也是新晋妈妈,奥康纳在新冠疫苗研制团队中的一天
  7. 使用极限学习机进行股市预测(Matlab代码实现)
  8. Linux 不重启添加SCSI硬盘方法
  9. IT职场老油条亲传:教你如何在公司汇报工作时表现更亮眼
  10. 转载:区块链:关于软分叉与硬分叉以及什么是共识