码迷,mamicode.com
首页 > 移动开发 > 详细

BIOS学习笔记之UEFI模块机制

时间:2017-09-29 00:35:29      阅读:519      评论:0      收藏:0      [点我收藏+]

标签:一段   log   main   div   ring   dsc   html   入口   一点   

本文旨在简单的介绍一下UEFI的模块机制:

BIOS是固化在电脑主板上的一段程序,主要功能就是初始化主板,最后加载操作系统(OS);而UEFI通俗一点讲就是一种BIOS的规范,它提出了一种BIOS的实现架构并提供了一套开源的实现。

我们知道Linux的模块机制是通过宏来定义模块的入口点的(参考:Linux学习笔记之内核启动流程与模块机制),而UEFI的模块机制理解起来更容易,它的每个模块都有一个inf文件,里面描述了模块的详细信息,比如入口点(入口函数)、模块包含哪些源文件等。

以U盘驱动为例:\MdeModulePkg\Bus\Usb\UsbMassStorageDxe\(UEFI的一个模块就是一个目录)

UsbMassStorageDxe.inf

 1 ##
 2 [Defines]
 3   INF_VERSION                    = 0x00010005
 4   BASE_NAME                      = UsbMassStorageDxe
 5   MODULE_UNI_FILE                = UsbMassStorageDxe.uni
 6   FILE_GUID                      = 9FB4B4A7-42C0-4bcd-8540-9BCC6711F83E
 7   MODULE_TYPE                    = UEFI_DRIVER
 8   VERSION_STRING                 = 1.0
 9   ENTRY_POINT                    = USBMassStorageEntryPoint
10 
11 ##
13 [Sources]
14   UsbMassBoot.h
15   UsbMassImpl.h
16   UsbMassBot.h
17   UsbMassBot.c
18   ComponentName.c
19   UsbMassImpl.c
20   UsbMassBoot.c
21   ....

ENTRY_POINT指明了模块的入口点,当这个模块被运行时,是从USBMassStorageEntryPoint()这个函数开始运行的。

[Sources]下面包含的是模块的源文件。

那这些模块是如何被加载运行的呢?

首先,在Build系统时,通过.fdf  .dsc文件指出我们想包含哪些模块(想包含某个模块,就把对应的inf文件的路径添加到这两只文件中,他们的作用类似于Makefile文件);之后在代码执行过程中,还是看DXE阶段,DXE阶段的入口点是DxeMain(),执行一些必要的初始化之后,会执行CoreDispatcher(),CoreDispatcher()负责找到系统中所有的模块,并执行他们的入口函数。

UEFI架构最主要的阶段就是DXE阶段,而这个阶段跟Linux的执行很像。个人认为UEFI在设计时一定从Linux的设计思想中获取了很多的灵感(比如Linux通过宏来指定模块的入口点)。

 

BIOS学习笔记之UEFI模块机制

标签:一段   log   main   div   ring   dsc   html   入口   一点   

原文地址:http://www.cnblogs.com/nju347/p/7608969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!