linux引导之grub2

先了解下什么是Bootloaderlinux

如下是百度百科释意小程序

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

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

 

3.Bootloader的操做模式布局

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

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

2、Bootloader的基本功能设计

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

一个嵌入式系统从软件的角度看一般能够分为三个层次:调试

 

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

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

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

 

  引导加载程序是系统加电后运行的第一段软件代码,称之为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 9五、9八、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

相关文章
相关标签/搜索