文章目录
一、bootloader
windows开机时会首先加载bios,然后是系统内核,最后启动完毕。那么bootloader就相当于手机的bios,它在手机启动的时候根据基带初始化硬件,然后引导系统内核,直到系统启动。
Bootloader是嵌入式系统在加电后执行的第一段代码。通过这段小程序,进行硬件初始化,获取内存大小信息等,调整手机到适配状态。在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行 。
对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。因此,几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader。Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序 。
反过来,大部分Bootloader仍然具有很多共性,某些Bootloader也能够支持多种体系结构的嵌入式系统。例如,U-Boot就同时支持PowerPC、ARM、MIPS和X86等体系结构,支持的板子有上百种。通常,它们都能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。
竞品对比如下:
- UBoot:在嵌入式(小型服务器、少核)场景
- GRUB:是GNU的Project,对于Linux根正苗红:在服务器(多核)场景,用BIOS+GRUB引导
1.1 uboot
uboot(universal bootloader)是一种可以用于多种嵌入式CPU的BootLoader程序,换言之,uboot是bootloader的一个子集。本质上就是一个裸机程序。
1.硬件管理uboot要能够进行Soc级(Soc内部外设)和板级(Soc外部外设)硬件管理。uboot中实现了一部分硬件的控制能力(uboot中初始化了一部分硬件),因为uboot为了完成一些任务必须让这些硬件工作。譬如uboot要实现刷机必须能驱动iNand,譬如uboot要在刷机时LCD上显示进度条就必须能驱动LCD,譬如uboot能够通过串口提供操作界面就必须驱动串口。譬如uboot要实现网络功能就必须驱动网卡芯片。2.能够完成镜像烧录(刷机)uboot要能够被借助完成刷机操作。参考下SD卡刷机的步骤:
a.烧录uboot到SD卡中。有2种烧写方法:一种是在windows中用刷卡工具去制作启动SD卡;另一种是在linux中用dd命令。制作完SD后将SD卡插入开发板,然后开机就可以进入uboot界面。
b.使用uboot的fastboot命令,并借助PC中的fastboot软件完成包括uboot、kernel、rootfs等的镜像的烧录。从上面就可以看出,刷机依靠的是uboot的fastboot命令,将镜像写到相应的FLASH中。
3.uboot的“生命周期”uboot的入口就是开机自动启动,uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务(譬如烧录系统),但是其他任务执行完后都可以回到uboot的命令行继续执行uboot命令,而启动内核命令一旦执行就回不来了。
4.uboot要提供命令式shell界面shell是用户操作接口的意思。shell有命令行的shell,如windows下的cmd,如linux下的终端;也有GUI式的shell,比如常用的windows下的各种界面。shell是一种封装后留出来的接口,uboot也要有这样的一个接口。
shell的原理是:由消息接收、解析、执行构成的一个死循环。
uboot的shell使用的也是行缓冲的模式。也就是以回车键(换行键)作为一个命令输入的结束。对应的其他缓冲模式还有无缓冲和全缓冲:无缓冲就是输入一个字符就当做一个命令处理;全缓冲就是无论输入什么都缓冲起来知道缓冲区满了才做一次处理。
二、BIOS
BIOS(Basic Input Output System),即基础输入输出系统,是刻在主板 ROM 芯片上不可篡改的启动程序,BIOS 负责计算系统自检程序(POST,Power On Self Test)和系统自启动程序,因此是计算机系统启动后的第一道程式。由于不可篡改性,故程序存储在 ROM 芯片中,并且在断电后,依然可以维持原有设置。
BIOS 主要功能是控制计算机启动后的基本程式,包括硬盘驱动(如装机过程中优先选择 DVD 或者 USB 启动盘),键盘设置,软盘驱动,内存和相关设备。
CMOS(complementary metal-oxide-semiconductor 的缩写)是通常用来描述计算机主板上存储BIOS设置的少量内存的术语。CMOS 有时被称为实时时钟 (RTC)、CMOS RAM、非易失性 RAM (NVRAM)、非易失性 BIOS 存储器或互补对称金属氧化物半导体 (COS-MOS) )。下图为计算机主板上的 CMOS 电池:
重置 BIOS 为出厂设置时,即会重写 CMOS,且 CMOS 掉电不丢:
2.1 grub
GRUB 是 GRand Unified Bootloader(大一统引导程序) 的首字母缩写。如果你曾经使用过 Linux 桌面,你一定见过这个屏幕。这就是所谓的 GRUB 屏幕。
GRUB 是一个用于加载和管理系统启动的完整程序。它是 Linux 发行版中最常见的引导程序bootloader。引导程序是计算机启动时运行的第一个软件。它加载 操作系统的内核,然后再由内核初始化操作系统的其他部分(包括 Shell、显示管理器、桌面环境 等等)。
你在菜单界面里对 GRUB 所做的任何改变都是暂时的。如果你想对 GRUB 做一些永久性的改变,比如改变默认的超时时间,你可以在 Linux 系统启动后修改 GRUB 配置文件。
默认的 GRUB 配置文件是 /etc/default/grub。还有一个 /etc/default/grub.d 目录,里面也存放一些配置。你可以直接编辑 /etc/default/grub 文件,但是我还是建议通过在这个目录中添加配置文件(.cfg 文件)进行额外的修改。
三、BMC
BMC(BaseboardManagement Controller) 用来管理服务器上的硬件(管理、监控、安装、重启等)。
3.1 原理
BMC是一款服务器AC上电起始即运行的软件,运行在服务器上一款单独的ARM芯片上,这个ARM芯片就是BMC软件的CPU,同时会芯片外围会配置自己的RAM、Flash等器件,只要服务器插上电源线,BMC软件便快速运行起来,此时有可能我们通常意义上的x86服务器侧的OS都还没有安装呢。BMC是整个服务器的大管家,主要用于服务器各个部件(CPU、内存、硬盘、风扇、机框等)的温度、电压等健康状态进行检测,同时根据各个温度采集点情况实时调整风扇转速保证服务器不产生过温、而且控制总体功耗又不能过高,如果单板部件出现任何异常则通过SNMP协议、SMTP协议、Redfish协议等多种业界通用规范讲信息及时上报给上层网管,以便运维人员及时处理,保证业务无损。
比如,我们操作一台服务器,通常都是用ssh远程连接。登录ssh,我们需要变更网卡地址,命令service network restart, 过了一会儿发现连不上了。可能是配置错了,访问不了了。那么怎么办?这个时候就需要重新配置,然后重启服务了。呼哧呼哧找网管要门禁卡,再跑到机房,再在这一堆一堆的服务器中找到目标机器,然后本地操作修正。
如果使用BMC,就可以解决这个问题,它提供了远程管理硬件的功能。它可以改BIOS,改介质启动顺序,改风扇转速,统计耗电信息等等。它也提供一整套的管理命令,比如 ipmicmd ipmievd ipmilan ipmish ipmi_sim ipmitool ipmi_ui等。
3.2 使用场景
BMC 是独立于服务器系统之外的小型操作系统,是一个集成在主板上的芯片 or 通过 PCIE 等形式插在主板上,对外表现形式只是一个标准的 RJ45 网口,拥有独立 IP 的固件系统。
BMC 比主机服务器享有更大的权限,这有效地保证了业务节点和管理节点的分离,保证业务节点不会干扰管理节点,而管理节点可以实时对业务节点进行管理监控。
功能如下:
- 异常上报:当系统实际发生故障时,BMC需要第一时间捕捉异常,实现实时告警及log上传,运维人员可及时锁定故障部件并完成替换,保证业务稳定不中断。
- 管理网络:监控运行状态、升级机器固件、远程批量部署OS、针对严重事件的自发纠正。
- 支持设置 BIOS
- 自主监控:组件(如CPU、内存、芯片组、环境、部件等)的温度、电压、风扇状态、电源状态等
- 日志记录:当检测系统出现错误(如某一设备温度过高,服务器蓝屏宕机)时,生成相关日志并保存
- 恢复控制:当检测到严重错误(如CPU core温度超出阈值,整机功耗超出电源额度功耗范围)时,可将服务器下电保护
- Web Server:提供Web界面,用户可以访问Web并查看系统状态
- 远程控制:远程上电/下电/复位服务器、vKVM、vMedia
- 风扇转速控制,主要用于系统散热优化
- 告警功能:LED指示灯、SNMP Trap、邮件通知等
3.3 IPMI 规范
IPMI(Intelligent Platform Management Interface):智能型平台管理接口,是一组交互标准管理规范,由 Intel、HP、Dell 和 NEC 公司于1998年9月16日共同提出,主要用于服务器系统集群自治,监视服务器的物理健康特征,如温度、电压、风扇工作状态、电源状态等。同时,IPMI 还负责记录各种硬件的信息和日志记录,用于提示用户和后续问题的定位。目前,IPMI 已经为超过 200 多家计算机供应商所支持。
IPMI 是独立于主机系统 CPU、BIOS/UEFI 和 OS 之外,可独立运行的板上部件,其核心部件即为 BMC。或者说,BMC 与其他组件如 BIOS/UEFI、CPU 等交互,都是经由 IPMI 来完成。在 IPMI 协助下,用户可以远程对关闭的服务器进行启动、重装、挂载 ISO 镜像等。
3.4 配置和使用
服务器后面有两个网口,一个用于共享网络,另一个用于专用网络。共享网络就是指我们正常使用的网络,而专用网络是用来访问BMC。
每个服务器出厂之后,就像路由器一样,自带一套管理系统。这个系统是相对服务器操作独立存在,而管理其硬件,比如电源,风扇,存储,CPU等等。
3.4.1 通过 ipmitool 设置 BMC IP
那我们怎么登陆这个管理系统呢?
这里用到了一个命令ipmitool。
ipmitool lan 使用来配置网络信息,
ipmitool lan print 1 可以查看当前BMC的ip,我们可以通过这个IP访问管理界面。
修改命令 ipmitool lan set 1 ipaddr x.x.x.x
(这里的1,是指通道号)
接下来确认,专用网络连通,就是把专用网口用网线连到交换机上。这样我们就可以远程访问BMC了。
3.4.2 通过 BIOS 设置 BMC IP
例如开机,按F2进入BIOS,进入Server Mgmt:
进入configuration (static on next reset),配置ip: