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

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

【发明内容】

[0005]本发明的目的主要是为了解决上述现有技术的缺陷,提供一种基于龙芯手持式计算机的UEFI固件的实现方法。根据这个方法,可以在龙芯手持机上实现出符合国际主流UEFI固件规范、可扩展性强、功能完善的固件产品,以支持龙芯手持机的正常启动和运行。
[0006]一种基于龙芯手持机的UEFI固件的实现方法,UEFI固件划分为硬件抽象层、固件核心层、设备协议层和固件应用层。
[0007]其中,硬件抽象层实现处理器、内存、外设控制器等关键硬件部件的初始化,对其他板级硬件进行包装和抽象并实现初始化,同时为上层模块提供访问底层硬件设备的函数接口。其包括处理器驱动模块和外设驱动模块,处理器驱动模块完成龙芯嵌入式处理器核心和内存的初始化,并提供访问处理器、内存的接口 ;外设驱动模块实现龙芯嵌入式处理器中集成的外设控制器的初始化,还要完成主板上各种外设的驱动,如LCD显示屏、NANDFLASH存储器、T9键盘、USB设备等,每个外设会对应一个(或多个)驱动模块。
[0008]固件核心层类似于操作系统的内核,建立UEFI中的系统服务表,进行固件中所有模块的统一管理和各种资源的管理。其包括固件核心加载模块、固件核心模块和基础架构功能模块,固件核心加载模块负责加载固件核心模块,并为其准备运行环境,固件核心模块负责建立UEFI规范中的启动服务(Boot Service)和运行时服务(Runtime Service)表,加载、运行其他功能模块,管理各模块之间的交互,实现内存的管理,实现和维护时钟中断和事件机制,实现和维护固件应用的特权级机制,实现UEFI规范中定义的Protocol的管理机制,实现UEFI规范要求实现的其他机制和功能,如调试接口、压缩算法、变量存储/处理等。基础架构功能模块实现UEFI规范中的Architectural Protocol,包括多个功能模块,每个模块实现一个 Architectural Protocol。每个 Architectural Protocol 包含一些基础服务接口,供固件中的其他功能模块调用。
[0009]设备协议层实现各种标准的工业规范,包括总线协议、外设接口等。其包括总线协议模块,实现了各种总线协议,如PCI/PCIE、PS/2、USB、SMBUS、LPCBUS等。通常是一个模块实现一种总线协议,并通过UEFI规范中的Protocol机制“发布”这些总线的接口,这样其他模块就可以使用这些接口来访问总线。
[0010]固件应用层实现固件的各项功能,如人机界面、操作系统引导等。其包括设备扫描模块、人机界面模块和系统支持模块,设备扫描模块枚举系统中的外设,为这些设备分配资源,并将设备与相应的外设驱动模块进行Connect (也即交给该设备驱动进行管理);人机界面在LCD显示屏上显示一个菜单界面,提供几个用户可选择的操作;系统支持模块实现操作系统的启动、恢复、升级等功能,操作系统的启动就是从NAND FLASH或者U盘中将内核文件加载到内存执行,操作系统的恢复是利用存储在NAND FLASH备份区或者U盘中的内核文件覆盖NAND FLASH中损坏的内核数据,操作系统的升级则是读取U盘中的内核文件来更新NAND FLASH中旧的内核数据。
[0011]本发明的基于龙芯手持机的UEFI固件的具体运行步骤如下:
[0012](I)初始化处理器、内存,建立起固件运行的基本环境;
[0013](2)将UEFI固件代码复制到内存,并对固件进行解压,加载固件核心模块;
[0014](3)建立UEFI固件的基础服务;
[0015](4)加载UEFI固件功能模块,包括基础架构功能模块、设备协议模块;
[0016](5)扫描设备并为设备分配系统资源,加载设备驱动模块,完成设备初始化;
[0017](6)运行人机界面;
[0018](7)启动操作系统,或进行操作系统的恢复、升级操作。
[0019]上述步骤中,步骤(I)中执行处理器驱动模块。处理器驱动模块采用MIPS汇编语言实现,是系统上电后首先执行的模块,此时内存还未完成初始化,所以这个模块直接在FLASH芯片中运行。处理器驱动模块实现龙芯IA处理器、Cache (高速缓存)、内存、TLB (旁路转换缓冲)等初始化,实现MCU (内存控制器)、SMBUS和内存的初始化,配置内存地址窗口,并提供访问CPU、Cache、内存等部件的接口。处理器驱动模块还要初始化处理器中的串口模块,为后续的固件代码的提供调试手段。
[0020]上述步骤中,步骤⑵中执行固件核心加载模块。步骤⑴执行完成后,系统内存已经初始化好,此时固件代码可以在内存中运行以加快运行速度;而且可以用C语言来实现固件代码,加快开发速度。固件中包含的功能模块较多,而FLASH芯片的容量有限,一般需要将存放功能模块的固件卷进行压缩,固件核心加载模块负责从FLASH中将压缩的固件卷复制到内存中,并进行解压;解压成功后,在内存中创建HOB(Hand-Off Block)数据表,存放处理器、内存、FLASH等系统信息,提供给后续的固件模块使用;最后,固件核心加载模块将控制权交给固件核心模块。
[0021]上述步骤中,步骤(3)中执行固件核心模块。固件核心模块首先初始化UEFI的系统服务,为后续的功能模块的加载、运行做准备。主要是完成UEFI系统表、UEFI启动服务表和UEFI运行时服务表的初始化,具体服务包括代码调试、内存管理、UEFI镜像管理、Η0Β、UEFI时钟、FLASH访问、解压缩、固件卷解析、UEFI事件、任务优先级、UEFI Protocol管理、UEFI变量存取等。系统服务表存放在内存的特定区域,UEFI固件中的所有功能模块都可以调用这些系统服务。
[0022]上述步骤中,步骤(4)中固件核心模块加载固件的功能模块。固件核心模块通过检索固件卷,依次查找其中的功能模块,并将其加载到内存中。每个功能模块都被编译成一个PE/ELF格式的可执行镜像,固件核心模块需要解析功能模块镜像,然后加载到内存的特定地址处,并跳转到入口函数。功能模块的入口函数执行完成后,通常会返回到固件核心模块,固件核心模块继续进行下一个功能模块的加载。
[0023]在步骤(4)中被加载的模块包括基础架构功能模块、设备协议模块。其中,基础架构功能模块主要功能是实现UEFI规范中的Architectural Protocol,主要包括:Boot Device Select1n (BDS)、CPU、Metronome、Monotonic Counter、Real Time Clock、Runtime、Security、Status Code、Timer、Variable、Variable Write、Watchdog Timer,每个Architectural Protocol由一个模块来实现;设备协议层模块主要实现访问PCI/PCIE、USB、SMBUS、LPCBUS等总线的函数接口,并封装在Protocol中供其他功能模块调用,通常是一个模块实现一种总线协议。
[0024]上述步骤中,步骤(5)中完成设备的初始工作。固件核心模块加载设备驱动模块,实现龙芯嵌入式处理器中集成的外设控制器的初始化,包括显示控制器、PS2控制器、USB控制器、NAND FLASH控制器、LPC控制器;并实现主板上外设的初始化和实现访问外设的函数接口,包括IXD显示屏、NAND FLASH存储器、T9键盘、USB设备等。通常由一个模块实现一种设备驱动。另外,在这个阶段由设备扫描模块扫描系统中的所有外设,并为外设分配内存、10和中断资源,这样外设在操作系统下才能正常工作。
[0025]上述步骤中,步骤¢)中固件核心模块加载固件卷中的固件应用模块,主要包括人机界面模块、系统支持模块。然后运行人机界面模块,在LCD显示屏上提供少量的几个菜单,用户可通过T9键盘来选择要进行的操作,包括查看固件版本信息、进行系统恢复、系统升级、系统启动等;如果用户没有进行按键操作,则固件在等待时间超时后,自动进行操作系统启动。
[0026]上述步骤中,步骤(7)中系统支持模块实现操作系统的启动、恢复和升级功能。根据用户在上一步骤中的选择,固件进行操作系统的恢复、升级或者启动功能。在进行操作系统恢复或升级时,固件从NAND FLASH中的备份区域或者U盘中读取操作系统内核文件,并写入NAND FLASH中存放操作系统内核的区域;在进行操作系统启动时,固件从NAND FLASH中将操作系统内核文件渎取到内存,并为内核准备必要的启动参数,然后将控制权交给内核并的区域的备份区,从而完成系统的
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1