一种基于笔记本计算机的UEFI固件实现方法与流程

文档序号:12786108阅读:277来源:国知局

本发明属于本发明属于计算机固件技术领域,涉及一种基于笔记本计算机的UEFI固件的实现方法。



背景技术:

UEFI(Unified Extensible Firmware Interface,统一的可扩展固件接口)是一种计算机固件(或称为BIOS)的接口规范,也是关于固件的最主要的工业标准。UEFI规范最初是面向Intel公司的Itanium和X86处理器进行制定的,但是UEFI规范本身是与处理器架构无关的,目前已经应用于X86、Itanium、ARM等处理器平台。符合UEFI规范的计算机固件(以下简称UEFI固件)相对于传统的固件有很多优越性,目前主流的X86商用计算机系统基本上都是采用了UEFI固件。

飞腾1500A(FT)是由国防科学技术大学研制的国产通用中央处理器,采用ARM V8指令集,采用国际先进的28nm工艺流片,具有高性能、低功耗特点,关键技术国内领先,可实现对Intel中高端“至强”服务器芯片的代替。飞腾1500A系列目前包括4核和16核两款产品,4核处理器芯片主要面向桌面终端和轻量级服务器应用领域,适用于构建台式终端、一体机、便携笔记本、微服务器等产品。16核处理器芯片面向服务器应用领域,适用于构建网络前端接入服务器、事务处理服务器、邮件服务器等产品。

U-BOOT是一款开源固件,支持多个处理器系列,如PowerPC、ARM、X86、MIPS等,飞腾厂商采用U-BOOT作为调试处理器的固件,并应用在飞腾笔记本解决方案中。但U-BOOT与常规的UEFI计算机固件相比存在很多不足, 主要表现在:U-BOOT项目在计算机工业界很少有厂家使用U-BOOT或对其进行支持,因此U-BOOT无法进行规范化和得到发展;不像UEFI固件支持最新的计算机技术,U-BOOT代码对很多技术规范都不支持,无法实现对一些常见功能的支持,比如ACPI(目前最为通用的电源管理技术)、GRUB(目前最为通用的操作系统内核加载器)等;与UEFI固件相比,U-BOOT没有采用模块化方法进行设计实现,可扩展性不强,开发维护也不方便。



技术实现要素:

有鉴于此,本发明提供了一种基于笔记本计算机的UEFI固件的实现方法。根据这个方法,可以在飞腾1500A笔记本计算机上实现出符合国际主流UEFI固件规范、可扩展性强、功能完善的固件产品,以支持飞腾1500A笔记本计算机的正常启动和运行。

为了达到上述目的,本发明的技术方案为:UEFI固件分为硬件抽象层、固件核心层、设备协议层以及固件应用层。

硬件抽象层包括处理器驱动模块、芯片组驱动模块和外设驱动模块,处理器驱动模块对笔记本中处理器和内存进行初始化,并提供访问处理器和内存的接口;芯片组驱动模块对笔记本硬件平台中南北桥芯片进行初始化,包括桥片本身和各个外设控制器的初始化和资源分配工作,并提供访问南北桥的接口;外设驱动模块驱动笔记本主板上连接的外设。

固件核心层包括固件核心加载模块、固件核心模块和基础架构功能模块,固件核心加载模块加载固件核心模块,并为其准备运行环境;固件核心模块建立UEFI规范中的启动服务Boot Service和运行时服务Runtime Service表,加载、运行固件核心层中的其他模块,管理固件核心层中各模块之间的交互,管理笔记本中内存,实现和维护时钟中断和事件机制,实现和维护固件应用的特权级 机制,实现UEFI规范中定义的Protocol的管理机制,实现UEFI规范要求实现的机制和功能;基础架构功能模块实现UEFI规范中的体系结构协议Architectural Protocol,基础架构功能模块包括多个功能模块,每个模块实现一个Architectural Protocol;每个Architectural Protocol包含一些基础服务接口,供固件中的其他功能模块调用。

设备协议层包括总线协议模块和网络协议栈模块,总线协议模块实现各种总线协议,并通过UEFI规范中的Protocol机制发布总线的访问接口;网络协议栈模块实现网络协议栈。

固件应用层包括设备扫描模块、人机界面显示模块、系统监控模块、系统启动模块、文件系统模块、内核加载模块、运行时模块和Shell模块;设备扫描模块枚举笔记本中的所有外设,并为外设分配资源,将外部设备与相应的外设驱动模块进行连接;人机界面显示模块与显卡驱动模块连接,实现所有显示相关的接口;系统监控模块实时检测笔记本中处理器温度、系统电压和风扇转速,根据处理器温度来调整风扇的转速,当处理器温度过高时,强制关机;系统启动模块提供一个图形化的用户配置界面,用户通过菜单操作的方式,查看系统信息和对系统进行配置。最后根据用户的选择,从存储设备启动操作系统;文件系统模块实现FAT/FAT32、EXT2/3/4和ISO9660文件系统,支持对文件的读取操作;内核加载模块在系统启动的最后阶段,从笔记本的存储介质中将内核文件加载到内存中,并为内核文件准备必要的参数,然后跳转到内核的入口点执行内核文件;运行时模块实现UEFI规范定义的供操作系统在其运行阶段调用的运行时Runtime接口,以及处理器平台的操作系统与固件定义的接口;Shell是UEFI固件提供的一个命令行环境,基于UEFI固件中提供的大量接口服务,开发出Shell下的多种固件应用程序。

在上述UEFI固件的基础上,该方法包括如下步骤:

步骤一、笔记本上电启动,执行处理器驱动模块,初始化处理器和内存,并提供访问处理器和内存的接口,从而建立起固件运行的基本环境。

步骤二、执行固件核心加载模块,将UEFI固件代码复制到内存,并对固件进行解压,加载固件核心模块。

步骤三、执行固件核心模块,建立UEFI固件的基础服务;初始化UEFI的系统服务,完成UEFI系统表、UEFI启动服务表和UEFI运行时服务表的初始化,UEFI固件中的所有功能模块均可调用系统服务。

步骤四、加载UEFI固件功能模块,包括基础架构功能模块、设备协议模块。

步骤五、加载外设扫描模块,扫描外设并为外设分配系统资源,加载外设驱动模块,完成外设初始化。

步骤六、加载执行固件应用层中各模块,启动操作系统。

上述步骤中,步骤(6)中固件核心模块加载固件卷中的固件应用模块,并实现对应的固件功能。包括显示模块、系统监控模块、文件系统模块、内核加载模块、运行时模块、Shell模块、系统启动模块,最后,固件核心模块将控制权交给系统启动模块,准备启动操作系统。

进一步地,步骤一中,笔记本上电启动后,执行处理器驱动模块,此时笔记本中内存还未完成初始化,处理器驱动模块使用连接在笔记本中的FLASH芯片运行;处理器驱动模块实现笔记本中处理器、高速缓存Cache、内存、旁路转换缓冲TLB的初始化,实现内存控制器MCU、SMBUS和内存的初始化,配置内存地址窗口,并提供访问CPU、Cache、内存等部件的接口,处理器驱动模块还要初始化处理器中的串口模块,提供UEFI固件代码的调试。

进一步地,步骤二中执行固件核心加载模块,笔记本中系统内存已经初始化好,此时固件代码可以在内存中运行以加快运行速度,FLASH中存有压缩的固件卷,固件核心加载模块从FLASH中将压缩的固件卷复制到内存中,并进行 解压;解压成功后,在内存中创建HOB数据表,存放处理器、内存和FLASH的信息。

进一步地,骤三中执行固件核心模块,初始化UEFI的系统服务包括代码调试、内存管理、UEFI镜像管理、HOB、UEFI时钟、FLASH访问、解压缩、固件卷解析、UEFI事件、任务优先级、UEFI Protocol管理、UEFI变量存取。

进一步地,步骤四中固件核心模块加载固件的功能模块,固件核心模块通过检索固件卷,依次查找其中的功能模块,并将其加载到内存中,每个功能模块都被编译成一个PE/ELF格式的可执行镜像,固件核心模块需要解析功能模块镜像,然后加载到内存的特定地址处,并跳转到入口函数,功能模块的入口函数执行完成后,返回到固件核心模块,固件核心模块继续进行下一个功能模块的加载。

进一步地,步骤四,基础架构功能模块主要功能是实现UEFI规范中的Architectural Protocol,每个Architectural Protocol由一个模块来实现;

设备协议层模块主要实现访问PCI/PCIE、SATA、PATA、SCSI、USB、ISA、SMBUS和LPCBUS总线的函数接口,并封装在Protocol中供其他功能模块调用,一种总线协议采用一个模块实现。

进一步地,步骤五中,外设包括南北桥芯片、显卡、SATA/IDE控制器、USB控制器、SMBUS控制器、LPC控制器、键盘、网卡。

有益效果:

l、本发明的方法符合国际主流的UEFI和PI固件规范,可利用UEFI联盟提供的开源代码资源快速实现固件;很多外设板卡厂商都提供基于UEFI规范的驱动,也可大大加快固件开发的进度。另外,UEFI固件支持主要的计算机工业标准,如目前飞腾处理器还不支持的ACPI(高级配置和电源管理接口)规范,这样采用本发明设计的固件可以方便地增加对这些规范的支持。

2、本发明设计的UEFI固件的重要特点是高度模块化,固件所要实现的功能被分解成很多子功能,每个子功能由单独的模块来实现,并由一个核心模块来加载和管理这些功能模块。因此可以通过增删模块来方便地定制固件的功能。

附图说明

图1是基于飞腾笔记本的UEFI固件的架构示意图。

具体实施方式

下面结合附图并举实施例,对本发明进行详细描述。

一种基于飞腾笔记本计算机的UEFI固件的实现方法,固件划分为硬件抽象层、固件核心层、设备协议层和固件应用层。

其中,硬件抽象层实现处理器和内存、芯片组等关键硬件部件的初始化,对其他板级硬件进行包装和抽象并实现初始化,同时为上层模块提供访问底层硬件设备的函数接口。其包括处理器驱动模块、芯片组驱动模块和外设驱动模块,处理器驱动模块完成处理器和内存的初始化工作,并提供访问处理器和内存的接口;芯片组驱动模块主要完成飞腾笔记本硬件平台中南北桥芯片的初始化工作,包括桥片本身和各个外设控制器的初始化和资源分配工作,并提供访问南北桥的接口;外设驱动模块主要是主板上各种外设的驱动,如显卡、硬盘、键盘、USB设备、网卡等,每个外设会对应一个(或多个)驱动模块。

固件核心层类似于操作系统的内核,建立UEFI中的系统服务表,进行固件中所有模块的统一管理和各种资源的管理。其包括固件核心加载模块、固件核心模块和基础架构功能模块,固件核心加载模块负责加载固件核心模块,并为其准备运行环境,固件核心模块负责建立UEFI规范中的启动服务(Boot Service)和运行时服务(Runtime Service)表,加载、运行其他功能模块,管理各模块之 间的交互,实现内存的管理,实现和维护时钟中断和事件机制,实现和维护固件应用的特权级机制,实现UEFI规范中定义的Protocol的管理机制,实现UEFI规范要求实现的其他机制和功能,如调试接口、压缩算法、变量存储/处理等。基础架构功能模块实现UEFI规范中的Architectural Protocol,包括多个功能模块,每个模块实现一个Architectural Protocol。每个Architectural Protocol包含一些基础服务接口,供固件中的其他功能模块调用。

设备协议层实现各种标准的工业规范,包括总线协议、外设接口、网络协议栈等。其包括总线协议模块和网络协议栈模块,总线协议模块实现各种总线协议,如PCI/PCIE、SATA、PATA、SCSI、USB、ISA、SMBUS、LPCBUS等。通常是一个模块实现一种总线协议,并通过UEFI规范中的Protocol机制“发布”这些总线的接口,这样其他模块就可以使用这些接口来访问总线;网络协议栈模块实现网络协议栈,如TCP/IP、SNP、DHCP、TFTP等,这样其他模块可以基于这些协议栈来实现网络相关的功能。

固件应用层实现固件的各项功能,如配置界面、系统监控、文件系统、操作系统引导等;其包括设备扫描模块、人机界面显示模块、系统监控模块、系统启动模块、文件系统模块、内核加载模块、运行时模块和Shell模块,设备扫描模块枚举系统中的所有外部设备,如PCI/PCIE总线上的设备,为这些设备分配资源,并将设备与相应的外设驱动模块进行Connect(也即交给该设备驱动进行管理);人机界面显示模块位于显卡驱动模块之上,实现所有显示相关的接口,如设置显示模式、在特定位置打印字符串、显示图片、清屏等;系统监控模块实时检测处理器温度、系统电压和风扇转速,根据温度值来调整风扇的转速;允许用户设定温度阈值,当温度过高时,进行自动关机;系统启动模块提供一个图形化的用户配置界面,用户通过菜单操作的方式,查看系统信息和对系统进行配置。最后根据用户的选择,从存储设备启动操作系统;文件系统模块实 现FAT/FAT32、EXT2/3/4和ISO9660文件系统,支持对文件的读取操作;内核加载模块在系统启动的最后阶段,这个模块从硬盘、U盘、光盘等存储介质中将内核文件加载到内存中,并为内核文件准备必要的参数,然后跳转到内核的入口点执行,这样就将控制权交给了操作系统;运行时模块实现了UEFI规范定义的供操作系统在其运行阶段调用的运行时(Runtime)接口,以及飞腾处理器平台的操作系统与固件定义的一些接口,如系统重启、关机等;Shell是UEFI固件提供的一个命令行环境,基于UEFI固件中提供的大量接口服务,可以开发出Shell下的多种固件应用程序。

本发明的基于飞腾笔记本的UEFI固件的具体运行步骤如下:

(1)初始化处理器和内存,建立起固件运行的基本环境;

(2)将UEFI固件代码复制到内存,并对固件进行解压,加载固件核心模块;

(3)建立UEFI固件的基础服务;

(4)加载UEFI固件功能模块,包括基础架构功能模块、设备协议模块;

(5)扫描设备并为设备分配系统资源,加载设备驱动模块,完成设备初始化;

(6)加载执行固件应用模块;运行配置界面;从存储设备加载操作系统。

上述步骤中,步骤(1)中执行处理器驱动模块。处理器驱动模块采用指令集实现,是系统上电后首先执行的模块,此时内存还未完成初始化,所以这个模块直接在FLASH芯片中运行。处理器驱动模块实现飞腾1500A处理器、Cache(高速缓存)、内存、TLB(旁路转换缓冲)等初始化,实现MCU(内存控制器)、SMBUS和内存的初始化,配置内存地址窗口,并提供访问CPU、Cache、内存 等部件的接口。处理器驱动模块还要初始化处理器中的串口模块,为后续的固件代码的提供调试手段。

上述步骤中,步骤(2)中执行固件核心加载模块。步骤(1)执行完成后,系统内存已经初始化好,此时固件代码可以在内存中运行以加快运行速度;而且可以用C语言来实现固件代码,加快开发速度。固件中包含的功能模块较多,而FLASH芯片的容量有限,一般需要将存放功能模块的固件卷进行压缩,固件核心加载模块负责从FLASH中将压缩的固件卷复制到内存中,并进行解压;解压成功后,在内存中创建HOB(Hand-Off Block)数据表,存放处理器、内存、FLASH等系统信息,提供给后续的固件模块使用;最后,固件核心加载模块将控制权交给固件核心模块。

上述步骤中,步骤(3)中执行固件核心模块。固件核心模块首先初始化UEFI的系统服务,为后续的功能模块的加载、运行做准备。主要是完成UEFI系统表、UEFI启动服务表和UEFI运行时服务表的初始化,具体服务包括代码调试、内存管理、UEFI镜像管理、HOB、UEFI时钟、FLASH访问、解压缩、固件卷解析、UEFI事件、任务优先级、UEFI Protocol管理、UEFI变量存取等。系统服务表存放在内存的特定区域,UEFI固件中的所有功能模块都可以调用这些系统服务。

上述步骤中,步骤(4)中固件核心模块加载固件的功能模块。固件核心模块通过检索固件卷,依次查找其中的功能模块,并将其加载到内存中。每个功能模块都被编译成一个PE/ELF格式的可执行镜像,固件核心模块需要解析功能模块镜像,然后加载到内存的特定地址处,并跳转到入口函数。功能模块的入口函数执行完成后,通常会返回到固件核心模块,固件核心模块继续进行下一个功能模块的加载。

在步骤(4)中被加载的模块包括基础架构功能模块、设备协议模块。其中, 基础架构功能模块主要功能是实现UEFI规范中的Architectural Protocol,主要包括:Boot Device Selection(BDS)、CPU、Metronome、Monotonic Counter、Real Time Clock、Runtime、Security、Status Code、Timer、Variable、Variable Write、Watchdog Timer,每个Architectural Protocol由一个模块来实现;设备协议层模块主要实现访问PCI/PCIE、SATA、PATA、SCSI、USB、ISA、SMBUS、LPCBUS等总线的函数接口,并封装在Protocol中供其他功能模块调用,通常是一个模块实现一种总线协议。另外,还包括实现TCP/IP网络协议栈的功能模块;

上述步骤中,步骤(5)中完成设备的初始工作。固件核心模块加载设备驱动模块,实现主板上外设的初始化和实现访问外设的函数接口,包括南北桥芯片、显卡、SATA/IDE控制器、USB控制器、SMBUS控制器、LPC控制器、键盘、网卡等。通常由一个模块实现一种设备驱动。另外,在这个阶段由设备扫描模块扫描系统中的所有外设,并为外设分配内存、IO和中断资源,这样外设在操作系统下才能正常工作。

上述步骤中,步骤(6)中固件核心模块加载固件卷中的固件应用模块,并实现对应的固件功能。包括显示模块、系统监控模块、文件系统模块、内核加载模块、运行时模块、Shell模块、系统启动模块。最后,固件核心模块将控制权交给系统启动模块,准备启动操作系统。

系统启动模块通过调用固件核心模块和其他功能模块提供的服务接口,显示出图形配置界面作为人机交互界面。在这个阶段,固件根据用户的操作来进行下一步的工作,包括提供系统信息的显示和系统参数的配置,以及选择要启动的设备,包括硬盘、光盘、U盘、网络、命令行等。用户通过特定按键退出配置界面进入到下一个执行步骤。

上述步骤中,实现操作系统的启动,具体步骤如下根据用户配置的启动顺序,系统启动模块依次尝试从硬盘、光盘、U盘、网络等介质将操作系统内核 文件加载到内存,并为内核准备必要的启动参数,然后将控制权交给内核,从而完成系统的启动工作。操作系统启动完成后,仍然可调用固件中运行时模块提供的少量的函数,包括系统重启、关机等。

综上,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1