摘要:基本输入/输出系统(BIOS)是现代计算机系统的重要组成部分,负责计算机系统的开机自检、板级初始化、加载操作系统内核以及基本I/O功能。以龙芯2F CPU架构为研究背景,在其基础上分析了PMON的系统结构与工作流程,通过添加网络驱动程序,最终实现通过PMON加载Linux和VxWorks操作系统。进行必要的功能完善与性能优化,并经过严格的测试以排除可能存在的深层次缺陷,实现了一个性能稳定、功能完善、高可靠性的能与国产龙芯2F处理器平台紧密搭配的BIOS。

关键词:BIOS;CPU;龙芯2F处理器;PMON

龙芯CPU使用PMON作为基本输入输出系统(BIOS)。PMON具有强大而丰富的功能,除基本的I/O功能外,还包括硬件初始化与检测、操作系统引导和程序调试等功能。PMON早期的版本功能少且扩展性不好。现在龙芯CPU上使用的PMON添加了硬盘和其他文件系统的支持,以及显卡的支持等。本文在深入分析PMON源码的前提下,添加了82551网卡驱动以便以网络下载加载操作系统内核,并对移植好的PMON系统进行了功能、性能和稳定性等方面的测试以适应某些重要领域对计算机系统高可靠性要求。通过专门的测试程序来实现此任务,并且尽量保证高的测试覆盖性。

1 基于龙芯2F架构的PMON分析

1.1 PMON执行流程分析

在龙芯2F CPU上电之初,内存和内存控制器处于不确定状态,因此CPU开始执行的BIOS代码只能放在非易失性介质中。PMON的二进制代码就存放于主板上一块512 KB的FLASH芯片上,其虚拟地址为0xBFC00000,物理地址是0x1FC00000。

由于在ROM FLASH运行的速度比较慢,并且空间有限,不能随时更改ROM中的内容,就需要把引导程序搬到内存里运行。因此,PMON的运行过程分为两个阶段:第一阶段是在ROM FLASH中运行,主要进行基本硬件初始化,如:北桥、南桥、内存控制器、缓存和串口初始化等;第二阶段在内存中执行,主要完成环境变量和基本数据结构的初始化、PCI总线扫描和设备初始化,显卡初始化、网络协议和设备初始化,并对搜索到的PCI总线上的设备进行驱动程序的加载与配置等,最后加载操作系统内核。

1.2 PMON在ROM中的执行流程

龙芯CPU开始执行的指令将CP0控制寄存器的状态寄存器和原因寄存器清零,让CPU处于内核模式。这是因为MIPS CPU启动时,必须定义足够的CPU控制寄存器状态,以使CPU能执行非缓存的指令。在对缓存初始化之前,不能访问缓存。非缓存的异常入口在0xBFC00000,但此处没有足够的空间存放启动代码,于是设计了一个跳转。这个跳转可以测试CPU是否正常工作。如果硬件发生了某种严重的错误,可能会导致CPU严重的异常。如果CPU正常启动起来并跳转到了正确的位置并执行了预先设计的指令,就可以相信CPU正常,某些硬件正常。跳转之后,PMON进行一系列的初始化与测试工作,这个过程如图1所示。

1.3 PMON在内存中的执行流程

PMON在内存中的执行过程非常复杂,下面按照其执行流程分析主要的函数:

_init():主要功能是顺序执行初始化。列表上的所有函数,建立必要的数据结构和编译环境。初始化列表上的函数主要可以分为3类:命令初始化函数,文件系统初始化函数,可执行文件初始化函数。

Evenint():环境变量初始化函数,这些环境变量解释并执行不同的命令。它们对PMON来说是必需的,用户可以定义另外的变量来保存任何字符串,如文件名和命令符等。

Tgt_devinit():主要功能是南桥初始化和PCI设备初始化。其中南桥初始化函数是cs5536_init()。PCI设备初始化由函数_pci_businit()完成,分为两步;先是北桥初始化,然后是设备初始化,包括对设备的扫描和设备所需资源的分配。PCI设备的初始化部分是PMON分析中的难点。

Init_net():主要进行了如下的工作;虚拟内存初始化等;用_pci_deviceinit函数完成了PCI配置空间的参数初始化,并且初始化显卡;网络系统的初始化包括网络设备的初始化和协议的配置等。

最后加载操作系统内核。这里会用到两个重要的命令Load和g。Load命令用于加载文件(内核)到内存,g命令执行内核文件。加载了内核文件之后就可以通过g命令来执行内核。

2 基于龙芯2F架构的PMON修改与优化

2.1 添加82551网卡驱动

网卡是一个PCI设备,所以其驱动在PCI设备初始化时实现。对于PCI设备,有一个重要的数据结构struct cfdata cfdata,这个数组是根据具体平台的配置文件生成的,以下是配置文件的相关部分:

这个部分描述了设备之间的链接关系,cfdata是这个关系的数组表示。另外还有一个PV数组定义一个设备的父设备,每个节点的父设备都是一个数组,在设备的cfdata结构中定义数组的开始。

上述配置文件中的fxp0表示的就是网卡设备。因为fxp0是PCI子设备,因此在查找PCI子设备时,其4个子设备:fxp0,rtkO,ohci,pci-ide的驱动也会在此时加载。查找设备有一个函数:config_found,其会调用config_serch,config_search从静态设备树cfdata中查找当前设备的子设备,然后对设备调用mapply函数,进行设备的匹配,如果设备存在则会调用该设备的ca_attach函数来加载设备的驱动程序。这里找到网卡设备之后会调用fxp_attach函数。在设计的网卡驱动中,实现了操作系统将怎样通过网卡驱动来讲网络包发送出去,而网卡收到网络数据包之后怎样通过操作系统来做后续处理。在PMON中,网卡中断通过查询来实现。fxp_attach函数会调用pci_intr_establish将中断程序注册到查询列表poll_list上。网口要将数据包发送出去,就必须提供一个网络接口,以提供给发送函数。在这里,将网络数据包放在网络接口的ifp→if_snd队列中,然后启动if_start来开始发送。在网卡发送完一个包后,检查发送队列,如果有剩余则继续发送,直到发送完毕。然后通过函数e100_poll来检查是否收到包,并进行收包处理。先进行缓冲区的清除,使能接收队列,查询是否有数据可接收,有则开始接收。无则继续查询并发出信息。

2.2 编译PMON

添加好了网卡驱动程序之后,需要对PMON进行重新配置和编译。配置和编译的过程如下。主要用到几条命令:

通过网络来更新PMON时使用下面的命令:load-f 0xbfc00000-r tftp://192.16.12.30来进行PMON的在线烧写。并通过网络来加载操作系统:load tftp://192.16.12.30/VxWorks.如果加载系统内核成功则验证了网卡驱动的有效。

3 系统测试

3.1 系统启动阶段网卡测试

由于启动阶段网卡只用于加载操作系统内核,对性能并没有太高要求。只需测试其功能即可。通过在启动过程中用另外一台主机对其进行ping操作来测试其功能。其界面如图2所示。

3.2 系统启动时间测试

经过测试,在硬盘启动模式下,系统从加电到操作系统启动完毕耗时不超过35 s,符合绝大部分应用需求。

3.3 500次开关机测试

为测试移植后的系统POST功能的稳定性,进行了500次开关机实验。经验证,成功启动次数为500,失败次数为0,成功率100%。

3.4 200 h老练测试

为测试PMON在系统运行时的稳定性,用专用的整机测试软件进行了200 h老练测试。经测试,系统运行正常,未出现故障,测试合格。

4 结语

为了适应PMON在国产计算机系统中的需求,对其进行了分析与优化。在分析了源码的基础上,对其进行了必要的修改与优化,增加了82551网卡的驱动等。为了验证优化后系统的稳定性,进行了一系列的测试验证,包括启动阶段的网络测试、系统启动时间测量、500次开

关机测试以及200 h老练测试等。经验证,修改后的PMON系统运行稳定,可以在多个重要领域中进行应用。

龙芯2h芯片不能进入pmon_基于龙芯2F架构的PMON分析与优化相关推荐

  1. 龙芯2h芯片不能进入pmon_一种基于龙芯2H芯片应用的COMe_nano核心板的制作方法

    本实用新型涉及工业自动化控制技术领域,尤其是涉及一种基于龙芯 2H芯片应用的COMe_nano核心板. 背景技术: 核心板是将PC的核心功能打包封装的一块电子主板.大多数核心板集成了CPU.存储设备和 ...

  2. 龙芯2h芯片不能进入pmon_国产处理器龙芯地址空间详解

    MIPS基本逻辑地址空间 MIPS64架构下包含一个64位地址空间和一个32位地址空间,32位地址空间是64位地址空间的子集.32位地址空间被分成四段,即常说的kuseg,kseg0~2如下图.其64 ...

  3. 龙芯2h芯片不能进入pmon_“龙芯”18年:这个团队,终结了中国计算机产业的“无芯”历史...

    近期在第二届数字中国建设峰会上展出的国产芯片龙芯3号. 芯片是信息产业的灵魂,通用CPU(中央处理器)可以说是芯片中的"珠峰".自主研发CPU,难度很大. 在这个故事的起点,200 ...

  4. 龙芯2h芯片不能进入pmon_2HSOCReleaseNotes - 龙芯开源社区

    1.硬件板卡:适用于2HSOC评估板V2.2版 2.PMON: 1) 修改pmon内存空间的布局: 将pmon代码段的起始地址从0x80010000 修改到0x8f010000. 2) 修改窗口配置: ...

  5. 【龙芯1B】:龙芯1B200字号修改程序(基于龙芯1B200)

    嵌入式芯片与系统设计竞赛开发板 项目场景:   由于龙芯的资料很少,于是想普及一下龙芯1B的字号修改例程.希望对大家有所帮助,如有不妥之处,可联系博主!一切的资源都是为了传播学习,让大家都能学会,这才 ...

  6. 基于纬创的流水线物料摆放分析与优化

    目 录 1 绪论 1 1.1研究背景 1 1.2研究的目的和意义 3 1.3本文的思路与结构 4 2 流水线物料摆放与相关理论依据 5 2.1笔记本代工行业现状分析 5 2.2原始设计制造商 6 2. ...

  7. [转帖]你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(下)

    你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(下) https://www.ijiwei.com/html/news/newsdetail?source=pc&news_id=7177 ...

  8. 基于龙芯+国产FPGA 的VPX以太网交换板设计(二)

    3.1 板卡技术要求 3.1.1 主要性能指标 本着向下兼容的原则,以太网交换板的设计尽量保留传统信息处理平台的基本功 能和接口,重点考虑提升设备的性能和扩展性.本课题以太网交换板的主要性能指标 如下 ...

  9. 极术公开课|基于安谋科技STAR-MC1处理器的上海航芯ACM32芯片及方案介绍

    内容介绍 上海爱信诺航芯电子科技有限公司(简称:上海航芯)成立于2008年1月,是具有市场竞争力和行业优势的本土集成电路设计企业佼佼者,专注于安全和MCU芯片的研制,已有累计3亿颗芯片出货.公司量产的 ...

  10. 龙芯拟发布多款芯片 支持多路互联的中国芯诞生

    据可靠消息,龙芯将于4月25日召开新闻发布会,发布内容主要包括龙芯3A3000/3B3000.龙芯2K.龙芯1H.发布会上可能还会有龙芯开源计划和龙芯产业基金的内容.那么,发布的这些芯片各有什么亮点, ...

最新文章

  1. python简单爬虫程序分析_[Python专题学习]-python开发简单爬虫
  2. 1.3.3 激活函数介绍
  3. mingw编译boost_1_66_0
  4. SpringMVC总结帖
  5. 解决ppt里面添加flash后在其他电脑上不能播放的问题
  6. 隐马尔可夫模型,最大熵马尔可夫模型和条件随机场的区别与联系
  7. 腾讯又双叒涨工资了!平均月薪已达7.27万?
  8. python:容器、迭代器、生成器 简单介绍
  9. car-like robot与两轮差速驱动机器人异同分析
  10. qoq是什么意思的缩写_买鞋多年分不清PE、SE、TD什么意思?建议收藏,这些缩写一定要知道...
  11. 构建 Netflix 分布式追踪(tracing)体系
  12. Isight做MATLAB优化,iSight结构优化基础16讲-学会使用isight控制ABAQUS、APDL等CAE软件...
  13. 任泽平:中国自动驾驶发展报告2020(上)
  14. viewStub 延迟布局加载
  15. 【果壳笔记】生物信息学——陈小伟老师部分
  16. 使用高匿代理访问西刺代理(假如ip被封可用高匿ip访问网站)
  17. 初入python世界——python基础语法
  18. 【工具】系统工具推荐网速显示等
  19. 手把手教你制作一目了然的可视化地图
  20. Java线程池七个参数详解:核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂、拒绝策略

热门文章

  1. 打造一款CPS返佣小程序之创建淘宝联盟账号及获取饿了么佣金路径《二》
  2. 解析仿人化机器人技术的路径
  3. 责任链模式实现及在Filter中的应用
  4. eyoucms使用入门 三
  5. 人脸识别-论文阅读-ArcFace及其由来(SphereFace、CosFace)
  6. linux文件系统-文件的写与读
  7. <毕业设计>最适合大学生的12个Java系统项目(附源码)
  8. 云计算网络产品sdn以及VxLAN技术浅析
  9. Silverlight IReader阅读器第二版
  10. ERP系统与精益生产