DP读书:鲲鹏处理器 架构与编程(十一)鲲鹏生态软件架构 AND 硬件特定软件

鲲鹏生态软硬件构成

  • 鲲鹏软件构成
    • 硬件特定软件
      • 1. Boot Loader
      • 2. SBSA 与 SBBR
      • 3. UEFI
      • 4. ACPI

鲲鹏软件构成

鲲鹏处理器的软件生态是一个不断发展的软件生态,服务器本身也具有复杂度多样性,经过很长时间的发展服务器硬件有不同的操作系统方案,这些操作系统往往还实现了软件的分层组合,很难简单描述其软件架构

本节从一个比较高的层次,主要从GNU/Linux软件生态角度出发,介绍鲲鹏软件的构成。

以下为鲲鹏 GNU/Linux 的软件架构高层视图:

鲲鹏 GNU/Linux 的软件架构高层视图
上图中,底部为鲲鹏服务器硬件,以 鲲鹏处理器为核心的通用服务器设备
在包含ARM核心的硬件系统上运行的软件不可避免的会包含特定系统的代码,此类代码通常以固件形式与其他系统软件分开,本节将此特性的代码称为----硬件特定软件

在服务器领域,服务器的硬件硬件特定软件对服务器“开箱即用”的影响最大,所以这两部分都要满足ARM服务器相关的合规性要求(详见:ARMv8-A 体系结构、鲲鹏软件生态与云服务)

硬件特定软件

硬件特定软件是指ARM服务器中特定系统的、常以固件形式提供的软件,主要包括所谓的Boot Loader 和设备特定固件。

本节将先介绍Boot Loader,然后介绍 ARM 服务器中的固件要求规范 SBSA 和 SBBR,以及其中 涉及到的一些重要元素, 如 UEFI、ACPI 与 ATF( ARM 可信固件)

1. Boot Loader

Boot Loader 即启动加载程序,是 Bootstrap Loader 一词的缩写版,通常是系统上电或重置运行后的第一个软件,因此它是专门针对特定处理器和主板的。

粗略的看启动流程包括三个主要阶段:

  1. 系统上电,硬件加载Boot Loader
  2. Boot Loader 加载操作系统,例如Linux内核;
  3. 操作系统加载应用程序和用户数据,完成启动过程。
系统上电 加载
加载
加载
硬件
BootLoader
操作系统
应用程序和用户数据

其中,Boot Loader的主要作用就是充当硬件与操作系统之间的媒介,用于加载操作系统。为完成这一目的,Boot Loader往往要寻找并释放操作系统,建立操作系统运行的基本环境(例如初始化内存、发现硬件设备参数回传操作系统等)。一些复杂的 Boot Loader还会有很多额外的功能,如支持多阶段启动、多种启动方式(如Flash内存、磁盘、网络、U盘、光盘等)、启动多种操作系统、更新固件、提供运行时服务、支持底层调试等。

在服务器领域,支持 安全启动也是一个很重要的特性。

2. SBSA 与 SBBR

不同操作系统对系统加载过程中的要求是不一样的。在ARM的传统强项——嵌入式设备与移动终端——领域的Soc产品,往往是 定制化、差异化、价格敏感的,用户很少跟换硬件模块操作系统。在这些情况下,定制软件的成本远远小于移除硬件功能带来的成本节省。所以此类情况下使用方案多是高度定制化的,如“启动固件+Boot Loader(u-boot、fastboot)+操作系统(Linux)+应用软件”

但在 服务器和PC领域,软件通常由第三方开发,用户只要考虑“开箱即用”和“模块可更换”。定制硬件的成本远超过软件成本。所以,使用的方案一般为标准化的接口兼容的。

SBSA(Server Base Boot Requirements)和SBBR(Server Base Boot Requirements)是ARM在服务器应用领域对服务器基本启动需求提出的规范。

SBBA的规范是基于ARM 64 位处理器架构的硬件体系结构的规范,详细描述了服务器操作系统软件,如:操作系统、Hypervisor(虚拟机管理器)和固件所依赖的特性和系统架构关键层面,包括 CPU、PCIe、定时器、IOMMU、UART(Universal Asynchronous Recevier / Transmitter,通用异步收发传输器)、看门狗和中断等,目标是有足够标准的
系统架构,来使一个恰当的系统镜像能在所有符合规范的系统硬件上运行。

SBSA标准主要定义了以下方面的要求:

1.服务器在加电自检(POST)阶段应该检查的基本硬件组件,例如处理器、内存、硬盘驱动器、键盘和鼠标等。
2.服务器引导过程中需要加载的最小软件集合,包括固件(如BIOS或UEFI固件)、引导加载器(如GRUB或UEFI引导加载器)以及内核等。
3.服务器在引导过程中应该遵循的基本时序和顺序。
4.对于采用多引导架构的系统,SBSA还规定了引导过程中如何处理多个操作系统的引导选项。

SBBR规范是对系统启动固件的规范,定义了符合SBSA标准的ARM AArch64 架构的服务器上的操作系统或者Hypervisor(虚拟机管理器)要实现开箱即用能力的基本固件需求,包括所需启动和运行时的服务和安全要求,并遵循UEFI(Unified Extensible Firmware Interface,统一可拓展固件接口)和ACPI (高级适配电源管理接口规范)

SBSA/SBBR是针对ARM服务器能够启动OS或监视器等固件上提出的最小需求集,同时遵循了UEFI、ACPI、PSCI、SMBIO等工业标准。其中,SBSA和SBBR虽然名字相似,但它们实际上关注的方面有所不同。SBSA主要关注系统启动和运行的最小需求,包括启动加载程序、运行时服务、固件抽象等,而SBBR则关注引导程序的最小需求,例如UEFI的BootServices、RuntimeServices、Protocol等基础服务及协议接口。

在实现层面,SBSA和SBBR规范主要通过LuvOS这个定制化Linux系统来实现。LuvOS是基于Linux内核的,通过将FWTS(Firmware Test Suite)和SBSA-ACS(ARM Server Base Architecture - Automotive and Server Consortium Starter Kit) 在Linux下的工具与标准Linux内核共同编译获得。

3. UEFI

UEFI最早由Intel推出,是16位 x86“传统”PC BIOS的后继产品,目前由UEFI论坛维护。

UEFI(Unified Extensible Firmware Interface) 是一种在计算机固件中使用的图形化标准接口,它被设计用来替代传统的BIOS。UEFI被定义为一个可扩展的固件接口规范,它提供了一组标准的API,使得操作系统可以在预启动环境下与固件进行交互。

UEFI规范的开源参考实现是edk2 或 EDK Ⅱ,源码位于https://github.com/tianocore/tianocore.github.io/tree/master/edk2
上游开发小组为TianoCore社区

UEFI是以图形化界面展示的,相比传统的BIOS,它更易于使用和定制。此外,UEFI还提供了一些先进的功能,例如网络配置、硬件诊断和安全启动等。

UEFI是由一些行业领先的公司共同制定的,包括AMD、Intel、Microsoft等。随着计算机硬件的发展,UEFI也在不断演进,以满足新的需求。

UEFI 规范中包含一个启动管理器 BOOT Manager,他会根据NVRAM(Non-Volatile Random Access Memory,非易失性随机访问存储器)中的参数决定如何加载可执行文件(可能是Boot Loader 或者其他镜像文件),EFI(可拓展固件接口)可执行文件格式必须符合PE(Protable Executable,可移植可执行)格式,PE是一种广泛应用在Windows平台上

4. ACPI

ACPI(Advanced Configuration and Power Interface)是一种开放式电源管理接口规范,它被设计用来提供一种通用的、标准化的电源管理方式。ACPI定义了在操作系统控制之下对电源管理进行完全控制的一种接口规范。

ACPI主要包含以下几部分:

  1. 用于描述计算机系统中电源状态和设备状态的表(Tables);
  2. 用于操作系统与固件之间进行通信的接口(Interfaces);
  3. 用于描述电源、散热管理及系统配置的规范;
  4. 用于提供运行时电源管理的事件(Events)。

ACPI是一种比较复杂的规范,它提供了丰富的电源管理功能。在计算机领域,许多新的电源管理特性都是基于ACPI实现的。
ACPI的子系统和结构图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/115212.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言递归写n的k次方

int Func(int n,int k) {if (k 0){return 1;}else if (k > 1){return n * Func(n, k - 1);;}}int main() {int i 0;int j 0;printf("请输入数n和他的k次方\n");scanf("%d %d", &i,&j);int r Func(i,j);printf("%d的%d次方 %d\n"…

解决无法远程连接MySQL服务的问题

① 设置MySQL中root用户的权限: [rootnginx-dev etc]# mysql -uroot -pRoot123 mysql> use mysql; mysql> GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY Root123 WITH GRANT OPTION; mysql> select host,user,authentication_string from user; -…

InnoDB的Buffer

一、Buffer内存结构 MySQL 服务器启动的时候就向操作系统申请了一片连续的内存,默认128M,可通过从参数修改。 [server] innodb_buffer_pool_size 268435456 1.1 控制块 控制块包括该页所属的 表空间编号、页号、缓存页在 Buffer Pool 中的地址、链表…

25.选择排序,归并排序,基数排序

目录 一. 选择排序 (1)简单选择排序 (2)堆排序 二. 归并排序 三. 基数排序 四. 各种排序方法的比较 (1)时间性能 (2)空间性能 (3)排序方法的稳定性能…

MyBatis查询数据库

文章目录 一.基础概念1.什么是MyBatis2.添加MyBatis依赖3.配置MyBatis中的xml路径 二.MyBatis的使用1.添加用户实体类2.添加 mapper 接⼝3.配置xml4.接口实现5.添加Service6.添加Controller 三.其它情况下Mybatis的使用1.返回自增主键值2.数据库字段和类属性不匹配 四.动态SQL1…

MybatisPlus-Generator

文章目录 一、前言二、MybatisPlus代码生成器1、引入依赖2、编写生成代码3、配置说明3.1、全局配置(GlobalConfig)3.2、包配置(PackageConfig)3.3、模板配置(TemplateConfig)3.4、策略配置(StrategyConfig)3.4.1、Entity 策略配置3.4.2、Controller 策略配置3.4.3、Service 策略…

Ceph IO流程及数据分布

1. Ceph IO流程及数据分布 1.1 正常IO流程图 步骤: client 创建cluster handler。client 读取配置文件。client 连接上monitor,获取集群map信息。client 读写io 根据crshmap 算法请求对应的主osd数据节点。主osd数据节点同时写入另外两个副本节点数据。…

C++ vector

目录 一、vector的介绍及使用 1.1 vector的介绍 1.1.1 认识vector 1.1.2 成员类型​​​​​​​ 1.1.3 成员函数一览 1.1.4 非成员函数重载 1.2 vector的使用 1.2.1 构造、析构与赋值操作符重载 1.2.2 reserve 与 resize 1.2.3 insert、erase 与 find extra train 1. 二叉树的…

工厂人员作业行为动作识别检测算法

工厂人员作业行为动作识别检测算法通过yolov7python深度学习算法框架模型,工厂人员作业行为动作识别检测算法实时识别并分析现场人员操作动作行为是否符合SOP安全规范流程作业标准,如果不符合则立即抓拍告警提醒。Python是一种由Guido van Rossum开发的通…

Nginx详解 三:高级配置

文章目录 1. 网页的状态页2. Nginx第三方模块2.1 echo模块 3. 变量3.1 内置变量3.1.1 示例 3.2 自定义变量3.2.1 自定义访问日志3.2.2 自定义json 格式日志 3.4 Nginx压缩功能 4. HTTPS4.1 Nginx的HTTPS工作原理4.2 启用功能模块的配置过程 5、自定义图标 1. 网页的状态页 基于…

【网络安全防护】上海道宁与Bitdefender帮助您构建弹性网络并降低安全运营成本

在网络的世界中 风险变得更加常见与复杂 企业需要从网络安全转向网络弹性 复杂的网络攻击已非常普遍 在面临攻击时 企业如何保持业务连续性? Bitdefender GravityZone将 风险分析、安全加固、威胁预防 检测和响应功能相结合 帮助您构建弹性网络 并降低安全…

【UE5】虚幻5教程-如何解决场景远处植被没有阴影

没有阴影的远处植被 下面是解决的方法。 首先打开项目设置 项目设置 点击左侧的渲染 渲染 在框内输入“距离”,并选择生成距离场。 光源内添加“定向光源”,如果已有可以忽略。 点击“directional light"并在下方找到"距离场阴影&qu…

go学习part20(1)反射

283_尚硅谷_反射基本介绍和示意图_哔哩哔哩_bilibili 1.介绍 1)基本数据类型的类型和类别一致,但是结构体等不一样。 2)反射的例子(桥连接,序列化) 序列化指定tag,会反射生成tag字符串 3)refl…

部署java程序的服务器cpu过高如何排查和解决

1.top命令找到占用CPU高的Java进程PID 2.根据进程ID找到占用CPU高的线程 ps -mp pid -o THREAD,tid | sort -r ps -mp 124682 -o THREAD,tid | sort -r 3.将指定的线程ID输出为16进制格式 printf “%x\n” tid printf "%x\n" 6384 18f0 4.jstack pid |…

一句话画出动漫效果

链接: AI Comic Factory - a Hugging Face Space by jbilcke-hfDiscover amazing ML apps made by the communityhttps://huggingface.co/spaces/jbilcke-hf/ai-comic-factory 选择类型: Japanese 输入提示词: beauty and school love st…

pyechart笔记:opts.AxisOpts

定制化图表的轴线(x轴和y轴)的样式和设置 0 不设置坐标轴 c1(Bar().add_xaxis([力量,智力,敏捷]).add_yaxis(全能骑士,# 系列名称,用于 tooltip 的显示,legend 的图例筛选。[429,321,296],#系列数据).add_yaxis(猴子,[352,236,4…

开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比

作者:刘军 不论您是一名开发者、架构师、CTO, 如果您曾深度参与在微服务开发中,那么相信您一定有过开源微服务框架或体系选型的疑问:Apache Dubbo、Spring Cloud、gRPC 以及 Service Mesh 体系产品如 Istio,到底应该选…

【taro react】(游戏) ---- 贪吃蛇

1. 预览 2. 实现思路 实现食物类,食物坐标和刷新食物的位置,以及获取食物的坐标点;实现计分面板类,实现吃食物每次的计分以及积累一定程度的等级,实现等级和分数的增加;实现蛇类,蛇类分为蛇头和…

【状态估计】基于UKF法、AUKF法、EUKF法电力系统三相状态估计研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

IDEA 出现问题:.gitgnore忽略文件失效解决方案

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆 ❤️技术活,该赏 ❤️点赞…