linux引导之grub2

2019-11-17 来源: 久久1342 发布在  https://www.cnblogs.com/tech-share001/p/11877425.html

先了解下什么是Bootloader

以下是百度百科释意

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序

Bootloader不属于操作系统,一般采用汇编语言和C语言开发。需要针对特定的硬件平台编写。在移植过程时,首先为开发板移植Bootloader。Bootloader不但依赖于CPU的体系架构,而且依赖于嵌入式系统板级设备的配置。

3.Bootloader的操作模式

自启动模式:在这种模式下,Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。

交互模式:在这种模式下,目标机上的Bootloader将通过串口或网络等通信手段从开发板上下载内核映射和根文件系统映像等待RAM中。可以被Bootloader写到目标机上的固态存储媒介质中,或者直接进入系统的引导。也可以通过串口接收用户的指令。

二、Bootloader的基本功能

初始化相关硬件 把Bootloader自搬移到内存中 执行用户指令 加载并执行内核

一个嵌入式系统从软件的角度看通常可以分为三个层次:

  1、 引导加载程序。包括固化在固件(firmware)中的Booter代码(可选),和Loader两大部分。

  2、 操作系统。特定于嵌入式板子的定制内核以及内核的启动参数;以及在内核和应用程序之间可能还会包括一个嵌入式图形用户界面,常用的嵌入式GUI有:MicroWindows和MiniGUI等。

  3、 用户应用程序。特定于用户的应用程序。

  引导加载程序是系统加电后运行的第一段软件代码,称之为Bootloader。BootLoader是Booter和Loader的合写:前者意味着要初始化嵌入式系统硬件使之运行起来,至少是部分运行起来,与PC机中的BIOS作用相似;后者意味着将嵌入式操作系统映像加载到内存中,并跳转过去运行。如PC机中MBR上的BootLoader(PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。)

  而在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

  简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

  通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。

Bootloader并不是嵌入式系统必不可少的组成部分,但是在系统中有Bootloader可以给嵌入式产品的开发调试带来很多便利。

什么是grub

GRUB 是引导装入器 -- 它负责装入内核并引导 Linux 系统。GRUB 还可以引导其它操作系统,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT 和 2000。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,那么就可能锁住系统,而无法引导计算机。另外,好的引导装入器可以给您灵活性,让您可以在计算机上安装多个操作系统,而不必处理不必要的麻烦。

GRUB 是一个很棒的引导装入器。它有许多功能,可以使引导过程变得非常可靠。例如,它可以直接从 FAT、minix、FFS、ext2 或 ReiserFS 分区读取 Linux 内核。这就意味着无论怎样它总能找到内核。另外,GRUB 有一个特殊的交互式控制台方式,可以让您手工装入内核并选择引导分区。这个功能是无价的:即使 GRUB 菜单配置不正确,你仍可以引导系统。哦,对了 -- GRUB 还有一个彩色引导菜单。我们只是刚开始。

Grub 的工作有两个:首先,它用一个菜单展示计算机上所有已经安装的操作系统供你选择;其次,当你从启动菜单中选择了一个 Linux 操作系统后, Grub 便加载对应版本Linux 的内核,众所周知,使用 Linux 就离不开 bootloader ,然而它却是 Linux 发行版内部很少有人充分了解的部分。

主配置文件grub.cfg不能直接被用户修改,而是由系统自动生成
每当安装内核、更新Grub 2或用户主动运行grub-mkconfig -o /boot/grub/grub.cfg(曾经是update-grub)后,Grub 2会根据用户配置文件重新生成grub.cfg。
可编辑的Grub 2配置文件主要包括/etc/default/grub、和/etc/grub.d/下的各文件。

grub2的重要文件

/etc/default/grub

这是一个文本文件,你可以在里面设置通用配置变量和 Grub 2 菜单(见下方 “常见用户设置” )的其它特性。

/etc/grub.d

文件夹,定义每个菜单项的所有脚本都放置在这里,这些脚本的名称必须有两位的数字前缀,其目的是:在构建 Grub 2 菜单时定义脚本的执行顺序以及相应菜单项的顺序。举个栗子:文件 00_header 首先被读取,负责解析/etc/default/grub配置文件,然后是 Linux 内核的菜单项,位于 10_linux 文件中,这个脚本在默认的

/boot分区为每个内核创建一个正规菜单项和一个恢复菜单项。紧接着的是被第三方应用所调用的脚本,如 30_os-prober 和 40_custom , os-prober 脚本为内核和其它分区里的操作系统创建菜单项,它能识别安装的Linux、 Windows、 BSD以及Mac OS X当然如果你的硬盘布局比较独特,使得 os-prober 无法找到已经安装的发行版,你可以在 40_custom 文件(见下方 “添加自定义菜单项”)中添加菜单项。

Grub 2 不需要你手动维护你的启动选项的配置文件:取而代之的是使用 grub2-mkconfig 命令产生

/boot/grub/grub.cfg文件。这个功能会解析/etc/grub.d目录中的脚本以及/etc/default/grub

相关文章