一种基于龙芯便携式计算机的uefi固件实现方法

文档序号:8258041阅读:534来源:国知局
一种基于龙芯便携式计算机的uefi固件实现方法
【技术领域】
[0001]本发明属于计算机固件技术领域,涉及一种基于龙芯处理器便携式计算机系统(以下简称龙芯便携机)的UEFI固件的实现方法。
【背景技术】
[0002]UEFI (Unified Extensible FirmwareInterface,统一的可扩展固件接口)是一种计算机固件(或称为B1S)的接口规范,也是关于固件的最主要的工业标准。UEFI规范最初是面向Intel公司的Itanium和X86处理器进行制定的,但是UEFI规范本身是与处理器架构无关的,目前已经应用于X86、Itanium、ARM等处理器平台。符合UEFI规范的计算机固件(以下简称UEFI固件)相对于传统的固件有很多优越性,目前主流的X86商用计算机系统基本上都是采用了 UEFI固件。
[0003]龙芯(Loongson)是由中国科学院计算所研制的国产通用中央处理器,采用MIPS精简指令集架构。龙芯处理器已形成一系列产品,分别可应用于嵌入式、台式、便携式计算机以及服务器产品。目前应用于便携式计算机产品的龙芯处理器主要是龙芯3A。
[0004]PMON是一款开源固件,最初是为LSILogic MIPS R3000评估板而设计,后来成为MIPS领域评估板和开发系统的通用固件。官方的PMON固件已经停止维护与发展,最新的PM0N2000是PMON的非官方后继版本。龙芯厂商采用PM0N2000作为调试处理器的固件,并应用在龙芯便携机解决方案中。但PMON与常规的UEFI计算机固件相比存在很多不足,主要表现在:ΡΜ0Ν项目在很多年前就已经停止更新,在计算机工业界很少有厂家使用PMON或对其进行支持,因此PMON无法进行规范化和得到发展;不像UEFI固件支持最新的计算机技术,PMON代码对很多技术规范都不支持,无法实现对一些常见功能的支持,比如ACPI (目前最为通用的电源管理技术)、GRUB(目前最为通用的操作系统内核加载器)等;与服?1固件相比,PMON没有采用模块化方法进行设计实现,可扩展性不强,开发维护也不方便。

【发明内容】

[0005]本发明的目的主要是为了解决上述现有技术的缺陷,提供一种基于龙芯便携机的UEFI固件的实现方法。根据这个方法,可以在龙芯便携机上实现出符合国际主流UEFI固件规范、可扩展性强、功能完善的固件产品,以支持龙芯便携机的正常启动和运行。
[0006]一种基于龙芯便携式计算机的UEFI固件的实现方法,固件划分为硬件抽象层、固件核心层、设备协议层和固件应用层。
[0007]其中,硬件抽象层实现处理器、内存、芯片组等关键硬件部件的初始化,对其他板级硬件进行包装和抽象并实现初始化,同时为上层模块提供访问底层硬件设备的函数接口。其包括处理器驱动模块、芯片组驱动模块、外设驱动模块和电源管理模块,处理器驱动模块完成处理器、内存的初始化工作,并提供访问处理器和内存的接口 ;芯片组驱动模块主要完成龙芯便携机硬件平台中南北桥芯片的初始化工作,包括桥片本身和各个外设控制器的初始化和资源分配工作,并提供访问南北桥的接口 ;外设驱动模块主要是主板上各种外设的驱动,如显卡、硬盘、键盘、USB设备、网卡等,每个外设会对应一个(或多个)驱动模块;电源管理模块主要是用来配合操作系统来完成系统的待机、休眠和唤醒等功能,并实现设备电源管理相关的功能和函数接口。
[0008]固件核心层类似于操作系统的内核,建立UEFI中的系统服务表,进行固件中所有模块的统一管理和各种资源的管理。其包括固件核心加载模块、固件核心模块和基础架构功能模块,固件核心加载模块负责加载固件核心模块,并为其准备运行环境,固件核心模块负责建立UEFI规范中的启动服务(Boot Service)和运行时服务(Runtime Service)表,加载、运行其他功能模块,管理各模块之间的交互,实现内存的管理,实现和维护时钟中断和事件机制,实现和维护固件应用的特权级机制,实现UEFI规范中定义的Protocol的管理机制,实现UEFI规范要求实现的其他机制和功能,如调试接口、压缩算法、变量存储/处理等。基础架构功能模块实现UEFI规范中的Architectural Protocol,包括多个功能模块,每个模块实现一个 Architectural Protocol。每个 Architectural Protocol 包含一些基础服务接口,供固件中的其他功能模块调用。
[0009]设备协议层实现各种标准的工业规范,包括总线协议、外设接口、网络协议栈等。其包括总线协议模块和网络协议栈模块,总线协议模块实现各种总线协议,如PCI/PCIE、SATA, SCS1、USB、ISA、SMBUS, LPCBUS等。通常是一个模块实现一种总线协议,并通过UEFI规范中的Protocol机制“发布”这些总线的接口,这样其他模块就可以使用这些接口来访问总线;网络协议栈模块实现网络协议栈,如TCP/IP、SNP、DHCP, TFTP等,这样其他模块可以基于这些协议栈来实现网络相关的功能。
[0010]固件应用层实现固件的各项功能,如配置界面、系统监控、文件系统、操作系统引导等;其包括设备扫描模块、人机界面显示模块、系统监控模块、系统启动模块、文件系统模块、内核加载模块、运行时模块和Shell模块,设备扫描模块枚举系统中的所有外部设备,如PCI/PCIE总线上的设备,为这些设备分配资源,并将设备与相应的外设驱动模块进行Connect (也即交给该设备驱动进行管理);人机界面显示模块位于显卡驱动模块之上,实现所有显示相关的接口,如设置显示模式、在特定位置打印字符串、显示图片、清屏等;系统监控模块实时检测处理器温度、系统电压和风扇转速,根据温度值来调整风扇的转速;允许用户设定温度阈值,当温度过高时,进行自动关机;系统启动模块提供一个图形化的用户配置界面,用户通过菜单操作的方式,查看系统信息和对系统进行配置。最后根据用户的选择,从存储设备启动操作系统;文件系统模块实现FAT/FAT32、EXT2/3/4和IS09660文件系统,支持对文件的读取操作;内核加载模块在系统启动的最后阶段,这个模块从硬盘、U盘、光盘等存储介质中将内核文件加载到内存中,并为内核文件准备必要的参数,然后跳转到内核的入口点执行,这样就将控制权交给了操作系统;运行时模块实现了 UEFI规范定义的供操作系统在其运行阶段调用的运行时(Runtime)接口,以及龙芯处理器平台的操作系统与固件定义的一些接口,如系统重启、关机等;Shell模块Shell是UEFI固件提供的一个命令行环境,基于UEFI固件中提供的大量接口服务,可以开发出Shell下的多种固件应用程序。
[0011]本发明的基于龙芯便携机的UEFI固件的具体运行步骤如下:
[0012](I)初始化处理器、内存,建立起固件运行的基本环境;
[0013](2)将UEFI固件代码复制到内存,并对固件进行解压,加载固件核心模块;
[0014](3)建立UEFI固件的基础服务;
[0015](4)加载UEFI固件功能模块,包括基础架构功能模块、设备协议模块;
[0016](5)扫描设备并为设备分配系统资源,加载设备驱动模块,完成设备初始化;
[0017](6)加载电源管理模块,并根据启动模式来执行相应的启动路径:
[0018]a)如果当前启动模式是从S3待机状态唤醒,则跳转到操作系统进入S3状态前的运行地址,结束启动过程;
[0019]b)如果当前启动模式是正常启动模式(包括热启动、冷启动),或从S5休眠状态唤醒,则继续后续的步骤;
[0020](7)加载执行固件应用模块;
[0021](8)运行配置界面;
[0022](9)从存储设备加载操作系统。
[0023]上述步骤中,步骤(I)中执行处理器驱动模块。处理器驱动模块采用MIPS汇编语言实现,是系统上电后首先执行的模块,此时内存还未完成初始化,所以这个模块直接在FLASH芯片中运行。处理器驱动模块实现龙芯3A处理器、Cache (高速缓存)、内存、TLB (旁路转换缓冲)等初始化,实现MCU (内存控制器)、SMBUS和内存的初始化,配置内存地址窗口,并提供访问CPU、Cache、内存等部件的接口。处理器驱动模块还要初始化处理器中的串口模块,为后续的固件代码的提供调试手段。
[0024]上述步骤中,步骤⑵中执行固件核心加载模块。步骤⑴执行完成后,系统内存已经初始化好,此时固件代码可以在内存中运行以加快运行速度;而且可以用C语言来实现固件代码,加快开发速度。固件中包含的功能模块较多,而FLASH芯片的容量有限,一般需要将存放功能模块的固件卷进行压缩,固件核心加载模块负责从FLASH中将压缩的固件卷复制到内存中,并进行解压;解压成功后,在内存中创建H0B(Hand_0ff Block)数据表,存放处理器、内存、FLASH等系统信息,提供给后续的固
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1