1. BootLoader
Bootloader是操作系统的“引导程序”以及“引导管理程序”,操作系统的启动流程可以简单理解为:
[上电] –> [UEFI] –> [bootloader] –> [内核] 。
显然,Bootloader的作用就是将内核加载到内存中,然后由于内核来加载操作系统的其他组件/服务,如文件系统,文件管理器,图形界面等。在linux生态中,常见的Bootloader有两种,Grub(用于X86架构),U-Boot(用于ARM架构)。其中引导就是进行一些硬件的检测、初始化的任务,然后将内核加载到内存中来启动内核,引导管理就是当有多个内核时,在屏幕上显示一个菜单让用户选择要启动的哪个内核。
2. Grub
grub程序保存在那里?
grub程序保存在EFI分区中,EFI分区挂在于位于/boot/efi目录下。
grub配置文件保存在那里?
- /boot/grub/grub.cfg文件,定义了grub是如何引导内核的。
- /etc/default/grub文件,定义grub全局行为和启动参数,然后生成/boot/grub/grub.cfg文件,下面讲解以下该配置文件的内容:
|
|
3. U-Boot
- XIP设备
非XIP设备中存储的代码需要从存储设备中加载到内存中,然后才能执行,而XIP存储设备中的代码可以直接执行,XIP设备有SRAM、BROM等等,非XIP设备有EMMC、NANDFLASH、SD卡等等。 - ARM-Linux启动流程
U-Boot一般分为两个阶段,uboot-SPL和uboo-proper,CPU上电首先执行BROM中的程序(由芯片厂写入),该程序会根据芯片的引脚电平或者寄存器配置确定启动模式(从那个设备启动系统),例如系统安装在SD卡,BROM中的程序会初始化SD卡,然后拷贝uboot-spl到SRAM中,开始执行uboot-spl中的程序,uboot-spl程序会初始化LDDR内存、pll、gpio等等硬件,然后从SD卡中加载uboot-proper到LDDR中,并跳转到程序的入口地址执行uboot-proper程序。uboot还会初始化一些其他设备,例如网卡等,然后从SD卡中加载内核文件。
参考:
https://linux-sunxi.org/Bootable_SD_card#SD_Card_Layout
4. 修改Grub配置
GRUB配置文件: /boot/grub2/grub.cfg,但是该配置文件是生成的,不可直接手动修改,我们通过修改/etc/default/grub文件和/etc/grub.d/目录下的配置文件生成的。
4.1. Fedora系统
修改/etc/default/grub文件,然后执行sudo grub2-mkconfig -o /boot/grub2/grub.cfg命令来生成新的/boot/grub2/grub.cfg文件。
4.2. Debian系统
修改/etc/default/grub文件,然后执行sudo update-grub命令来生成新的/boot/grub/grub.cfg文件。
5. 查看Grub配置信息
5.1. Fedora系统
5.1.1. grubby命令
- 查看默认引导项
|
|
- 列出所有引导项
|
|
- 列出所有引导项的索引
|
|
5.2. Debian系统
使用grep命令查看即可。