本文主要是介绍在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的挂在分区,将下面的内容复制到/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文件详解)