操作系统:添加自定启动项

本文主要是介绍在bios里面添加自定义的启动项。
本地环境为:mac + vmware fushion,操作系统环境为 centos7(64bit Minimal)、ubuntu16(desktop)。
在实验的过程中,尽量使用root命令,

安装虚机,准备环境

安装虚机

打开vmware fushion软件之后,选择新建->继续->选择ios文件继续->选择系统-> 经典BIOS->继续->完成,这就是创建虚机的完整流程,然后在新的对话框中点击开始按钮,进行系统安装。

安装软件

ubuntu安装软件步骤:

sudo apt-get install make
sudo apt-get install git
sudo apt-get install gcc
sudo apt-get install nasm

centos 安装软件步骤:

yum install -y make
yum install -y gcc
yum install -y nasm
yum install -y git

在centos里面安装软件的时候,出现网络无法连接,需要先调整网络,保证网络正常。

echo nameserver 8.8.8.8 > /etc/resolv.conf

修改相应网卡的数配置,将ONBOOT=no改成ONBOOT=yes,重启网络systemctl network restart ,然后验证网络是否正常,如果还是不正常的话,重启系统。

下载代码

git clone   https://gitee.com/lmos/cosmos.git
cd cosmos/lesson02/HelloOS
make all 

会出现告警信息,可以忽略。

Centos

对/etc/grub.d/40_custom文件就行修改,添加如下内容:

menuentry 'HelloOS' {
   insmod part_msdos
   insmod xfs
   set root='hd0,msdos1'
  mulitboot /HelloOS.bin
  boot
}

将编译好的bin文件复制到根目录下(CentOS的grub应该是把boot挂载为/):

cp cosmos/lesson02/HelloOS/HelloOS.bin /

更新grub的配置

grub2-mkconfig   -o  /boot/grub2/grub.cfg

在执行完整这个命令之后,可以看到40_custom里面的内容自动复制到grub.cfg里面,

grep '^menuentry' /boot/grub2/grub.cfg |cut -d "'" -f 2

可以看到所有的启动项。
修改启动项的时间:

vi /etc/default/grub

内容为:

GRUB_TIMEOUT=5  # 将这个时间修改的时间长一点
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

修改结束,保存,重启系统,就可以看到新的启动项,在进入系统之后看到Hello OS!字样,就是代表成功。

Ubuntu

修改启动项内容

GRUB_HIDDEN_TIMEOUT=0 
GRUB_HIDDEN_TIMEOUT_QUIET=true ->隐藏菜单,grub2不再使用,不管
GRUB_TIMEOUT="3" ->设置进入默认启动项的等候时间,默认值10秒,按自己需要修改
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" ->添加内核启动参数,这个为默认
GRUB_CMDLINE_LINUX="noresume" ->手动添加内核启动参数,比如 acpi=off noapic等可在这里添加
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console ->设置是否使用图形介面。去除前面#,仅使用控制台终端,不使用图形介面
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480 设定图形介面分辨率,如不使用默认,把前面#去掉,把分辨率改为800x600或1024x768
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true ->设置grub命令是否使用UUID,去掉#,使用root=/dev/sdax而不用root=UUDI=xxx
# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true" ->设定是否创建修复模式菜单项

将GRUB_HIDDEN_TIMEOUT、GRUB_HIDDEN_TIMEOUT_QUIET 字段进行注释,将GRUB_CMDLINE_LINUX_DEFAULT的值修改为text

GRUB_TIMEOUT = 30
#GRUB_HIDDEN_TIMEOUT = 0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_CMDLINE_LINUX_DEFAULT="text"

更新grub的配置:

sudo update-grub

启动项脚本

查看/boot的挂在分区,
image.png

将下面的内容复制到/boot/grub/grub.cfg,内容如下:

menuentry 'HelloOS' {
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos1' #注意boot目录挂载的分区,这是我机器上的情况
    multiboot2 /boot/HelloOS.bin
    boot
}

注意!df /boot的结果在哪个sda?,set root=‘hd0,msdos?’中的?就填什么。
然后将HelloOS.bin复制到/boot/下。
然后就可以启动系统。

参考文献

CentOS 7 调整 grub2 启动项顺序及等待时间
极客时间-操作系统实战45讲
如何在Centos7中添加GRUB2启动项
操作系统实战45讲01:运行HelloOS
手写操作系统
系统启动项(/etc/default/grub文件详解)

你可能感兴趣的:(操作系统:添加自定启动项)