|
发表于 2020-1-6 13:58:01| 字数 1,790| - 中国–广东–中山 联通
|
显示全部楼层
|阅读模式
本帖最后由 bwyciyv 于 2020-1-6 13:58 编辑
之前编译的coreboot一直用seabios来启动系统,
跟官方BIOS方式差不多,感觉意义不大,倒不如直接用回官方BIOS.
最近折腾了下coreboot+grub2启动方式, 发现启动速度实在太快了,实现选择OS后能3秒到登陆界面.顺便分享下grub.cfg代码,也想有大神能提供下意见,如何实现grub加载clover来引导黑苹果,或者ramos.
目前测试已经实现以下功能:
1,可以直接加载指定硬盘的Linux内核来启动
2,可以自动搜索所有插上电脑的存储设备类debian系统的启动文件grub.cfg,实现启动系统,包括U盘上的debian类系统.
3,实现热键关机,重启等.
建议编译coreboot时选择payloads时选择grub2就行,grub.cfg文件不要加载.生成coreboot.rom文件后,可以用自己编写好的grub.cfg写入coreboot.rom,方法如下,把coreboot.rom与grub.cfg文件拷到coreboot/build/下
输入命令
./cbfstool coreboot.rom add -f grub.cfg -n etc/grub.cfg -t raw
如果想删除已经写入rom文件的grub.cfg并重新更新写好的grub.cfg
以下命令
./cbfstool coreboot.rom remove -n etc/grub.cfg
./cbfstool coreboot.rom add -f grub.cfg -n etc/grub.cfg -t raw
以下是本人的grub
代码如下:
#以下部分是启动显示时间与默认启动部分,还有加载硬盘,USB设备等支持
timeout=1
default=0
insmod ahci
insmod usb
insmod regexp
#这部分是直接加载硬盘上的内核来启动系统,其中set root='ahci2,msdos1' , 是因为coreboot默认主硬盘位为ahci1,
而我是用mstat位置来装系统盘,mstat位置为ahci2.
再下面的root=/dev/sdb1,是因为如果主硬盘插有硬盘的话,mstat就会识别为sdb而不是sda(如果没有主硬盘没有mstat就会识别为sda)
menuentry 'GNU/Linux ' {
insmod gzio
insmod part_msdos
insmod ext2
set root='ahci2,msdos1'
echo 'Loading Linux vmlinuz kernel ...'
linux /vmlinuz root=/dev/sdb1 console=ttyS0,115200
echo 'Loading initial ramdisk ...'
initrd /initrd.img
}
#这是实现自动搜索所有插在电脑上的存储设备上的系统启动文件,只支持类debian系统,其它类linux可以搬葫芦画瓢.
主要目的是灵活实现启动其它硬盘的系统,重要是实现U盘安装linux.
menuentry 'All/Linux' {
for x in (*,msdos1) ; do
if [ -f "$x/boot/grub/grub.cfg" ] ; then
menuentry "Load Config from $x" $x {
root=$2
configfile /boot/grub/grub.cfg
}
fi
if [ -f "$x/grub/grub.cfg" ] ; then
menuentry "Load Config from $x" $x {
root=$2
configfile /grub/grub.cfg
}
fi
done
}
#这个,因为还没有装黑苹果,还没有测试,反正是成功启动clover了.
menuentry 'MacOS ' {
insmod part_msdos
set root='ahci2,msdos1'
echo 'Loading macos...'
linux16 /boot/memdisk iso ram
echo 'clover...'
initrd16 /boot/clover.iso
}
#热键关机与启动
menuentry 'Poweroff [p]' --hotkey='p' {
halt
}
menuentry 'Reboot [r]' --hotkey='r' {
reboot
}
启动效果如图
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
查看全部评分
|