关于EFI中handle ,protocol ,devicepath ,controller connect device的理解(Copy)

本文copy自http://www.biosren.com/viewthread.php?tid=3807&highlight=handle,只是因为BISO联盟论坛关掉,不想这样的好文章就此丢失,因此特copy自我的博客里面!


一个人到医院去做健康检查  ,这件事情可以理解成一个handle ,
概念A:

1, Handle 为完成某项任务的集,
2,handle 只是无行为能力
如果要检查就要去各个普通的科室如去验血,测身高,测血压,测体重,另外还会给一张检验结果表。验血,测身高等等可以理解成各个protocol ,它是用来完成健康检查的一部分(也就是功能部份)另外检验结果表也是protocol的一部份,这个相当于EFI中的private data ,不同的人用同一个测量仪器, 测量出不同的结果

概念B:

1,protocol,是功能和数据的集合
2,handle 的行为必须通过protocol 完成
3,同一个protocol 作用于不同的handle 会有不同的结果

如果需要完成所有健康检查,就需要到各个科室去,另外一张体检表中不能同时有两个测身高这样的protocol, 否则就不知道用哪一个了测了,一个handle 下会挂很多个protocol ,有时也会有多个人去医院检查,也就是有多个handle 
结论:

1, 一个handle 下会挂很多个protocol 
2,一个protocol可以安装到多个handle 中去
3,一个handle 下不能挂两个同名的protocol


去体检时,医生会根据体验者的有性别,年龄做不同的体检。
性别,年龄相当于我们的devicepath,  EFI中的devicepath 最常见的就是function number ,device number如acpi(pnp0a03,0)pci(1c|0)
当然还有更细的,如isa 下面挂的path :
acpi (pnp0a03,0) pci(1c|0)/ACPIPNP0a05,0)/ACPI(PNP0303,0)
PNP0a03代表pci host
Pnp0a05代表 isa device
PNP0303代表keyboard

这里在shell 里面用dh –d –b 看得比较清楚

根据性别,年龄 ,医生大概就知道体检者要去哪些科室,如妇产科,男性专科,这些专门处理某类人群的检验,医生先要根据性别,年龄去判断是哪个特殊科室,是进妇产科还是男性专科

概念C:       

devicepath    用来读取某些device 的地址,
Devicepath protocol not required for all device handle ,it is only required for device handle that represent physical device in the system ,handle for virtural device will not contain a device path protocol,Device path for console devices and boot option 

如:pcirootbridgeio devpath (acpi (PNP0a03 ,0)
child controllers: child [13F] (acpi (pnp0a03,0) pci(1c|0) 


概念D:  

DriverBinding image  这个特殊的科室可以认为是一个标准的DriverBinding   , 一般的科室可以认为是一般的driver image ,driverbinding 有support ,start ,stop , EFI程序判断和医生类似,医生根据 性别年龄,和这些科室,一个一个的对,判断体检者进哪个科室,EFI 程序根据support 判断这支driver 是否可以在这个handle 上run 起来,很多时候它会根据当前controller 的device path 来判断,如PS2的处理程序,它就需要判断controllerhandle是不是ACPI(PNP0303),  EFI中有一个非常重要的函数ConnectController, 这个函数就是用来处理controller 和 image是否相关。也就是image 和controller 的对应关系,不是所有的image 都适合某个driver ,这就像看病一样,一个男人能上妇产科吗,如果相关,这个image就可以在这个controller 上start ,如果不可以就不start ,接着这个controller 查询下一个image 是否和它相关,而这个动作在现实生活中充当了医生的角色。如果有个人男性,医生就不会让他查妇产科,也就是说这个科室对他不support 了。也就是说connectcontroller功能上等于医生确认医人上哪个科室

概念 E: 

简单的controller handle 就是我们用RU 能实实在在的看到的controller , 而这些controller 都是host bridge 的child controller ,host bridge 都是这些controller 的parents controller, 而parents controller 很多protocol会遗传给child controller ,所谓的遗传就是把father 上的protocol 也安装在child protocol上面,当然前面我们提到的acpi (pnp0a03,0) pci(1c|0)/ACPIPNP0a05,0)/ACPI(PNP0303,0)
这也是一个controller handle 的path ,它的关系是
acpi (pnp0a03,0) 第一级 bus host 
acpi (pnp0a03,0) pci(1c|0)/第二级 isa bus
acpi (pnp0a03,0) pci(1c|0)/ACPIPNP0a05,0 第三级isa kbc
acpi (pnp0a03,0) pci(1c|0)/ACPIPNP0a05,0)/ACPI(PNP0303,0) 第四级keyboard 
每一个下一级都是上一级创建的
Connect device 也就是这样一级一级的创建的,

A,bus host controller  和driver systempcibusdxe(phoenix code base  support 上了 ) start 创建了isa bus , 

B,isa bus controller  和driver systempciisabusdxe (support 上了) start 产生了isakbc device controller  和superio device controller  ,

C,isakbc controller  和driver systemisakbcdxe support 上了start后创建了keyboard device handle D. keyboard device handle和driver systemps2keyboarddxe support 上了,start  

概念 F: 

handle 只能通过bus driver 和image 创造,bus driver 在执行时会产生很多childhandle ,image 在载入进会创建image handle , EFI中把image 也当成了一个handle

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: EFI_PEI_BLOCK_DEVICE_TYPE是一个枚举类型,定义在UEFI规范,它用于表示PEI阶段的FV固件卷的设备类型。常见的设备类型包括Firmware Volume(固件卷)、Memory Mapped IO(内存映射IO)和Memory-mapped PCI Configuration Space(内存映射PCI配置空间)等。在UEFI,PEI阶段是UEFI启动流程的第一阶段,用于初始化系统硬件和基本的运行环境。 ### 回答2: EFI_PEI_BLOCK_DEVICE_TYPE是可执行引导服务(PEI)的一个数据类型,用于表示和描述系统的块设备。 块设备是计算机用于存储和检索数据的硬件设备,如硬盘、光盘和固态硬盘等。EFI_PEI_BLOCK_DEVICE_TYPE是一个枚举类型,包含了不同类型的块设备,以便PEI阶段的引导程序能够识别和与之交互。 该数据类型定义了一些常用的块设备类型,如硬盘(EFI_PEI_PCD_TYPE_HARDDISK)、光盘(EFI_PEI_PCD_TYPE_CDROM)和软盘(EFI_PEI_PCD_TYPE_FLOPPY)等。每种类型都有对应的硬件特性和功能。 在PEI阶段,通过使用EFI_PEI_BLOCK_DEVICE_TYPE数据类型,系统可以在固件加载阶段(即操作系统启动之前)检测到和确认系统的块设备。这样,系统便能够在引导流程正确识别并选择合适的块设备来加载操作系统和相关驱动程序。 总之,EFI_PEI_BLOCK_DEVICE_TYPE是PEI阶段的一个重要数据类型,用于描述和区分系统的各种块设备。它能够在引导过程帮助系统正确识别和选择适配的设备来加载操作系统和所需程序。 ### 回答3: EFI_PEI_BLOCK_DEVICE_TYPE是EFI Pre-EFI Initialization(PEI)阶段的一个数据类型。在EFI规范,PEI是启动过程的第一阶段,负责初始化和配置基本的硬件、固件和软件环境。 EFI_PEI_BLOCK_DEVICE_TYPE是用于表示块设备的数据类型,在PEI阶段,它主要用于描述和操作嵌入式固件的存储设备,例如硬盘、闪存、固态硬盘等。该数据类型通常包含了块设备的相关信息,如设备类型、设备号、设备大小、设备属性等。 在PEI阶段,固件会尝试通过初始化PEI阶段的块设备来加载有效的固件映像。首先,固件会枚举和识别系统的块设备,并使用EFI_PEI_BLOCK_DEVICE_TYPE数据类型来记录它们的信息。之后,固件会选择一个合适的块设备,并尝试从加载固件映像。这个过程有助于确保系统能够正确引导,并加载后续阶段所需的固件和驱动程序。 总之,EFI_PEI_BLOCK_DEVICE_TYPE是EFI规范定义的一个数据类型,用于表示在PEI阶段操作和描述嵌入式固件的块设备。它在固件的启动过程起着重要的作用,帮助固件识别、初始化和加载存储设备,以确保系统正常引导。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值