【Grub2】制作UEFI版本Grub2引导_grub-mkimage.exe_Beatfan_N的博客-程序员宅基地

技术标签: 系统安装与维护  系统安装维护  

可以直接下载以下操作的所有文件https://download.csdn.net/download/u010875635/10655981

本来不想设置积分,无奈最低只能设置1分,大家见谅。没有积分的还是从grub2官网下载按照下面的修改吧

 

首先要从grub官网下在grub2,grub2中包含所有grub2相关的命令,可以用来生成grub2引导,这里着重介绍制作UEFI版本的grub2


        


        UEFI启动是fat/fat32分区/EFI/Boot/bootia32.efi或者/EFI/Boot/bootx64.efi,然后进程由UEFI交给efi程序,我们就是制作这个efi程序,使用grub-mkimage命令即可生成。

        efi程序中需要内置配置文件,类似grub的grldr文件,一旦生成后就很难修改了,所以,我们需要一个类似与menu.lst的配置文件,所以我们指定的配置文件中指向外部的cfg配置文件
        以下为64位efi生成,32位参考文件夹名称,将x86_64-efi修改为i386-efi即可,一般是不需要,支持UEFI的基本都是64位的PC。
 

        内置配置文件为:x86_64-efi.cfg,内置配置文件搜索/EFI/grub/x64.cfg 文件,并将其设定为配置文件。

将其保存在grub2解压目录下,内容如下:

 

search.file /EFI/grub/x64.cfg root
set prefix=($root)/EFI/grub
configfile ($root)/EFI/grub/x64.cfg


        在grub2解压目录下,输入以下命令:

 

 

grub-mkimage.exe -d x86_64-efi -c x86_64-efi.cfg -p /EFI/grub -o z_bootx64.efi -O x86_64-efi part_gpt part_msdos disk fat exfat ext2 ntfs xfs appleldr hfs iso9660 normal search_fs_file configfile linux linux16 chain loopback echo efi_gop efi_uga video_bochs video_cirrus file gfxmenu gfxterm gfxterm_background gfxterm_menu halt reboot help jpeg ls png true

 


-d 表示指定查找模块目录

-c 表示指定配置文件,这个配置文件会集成到efi文件内,就是我们刚刚编写的x86_64-efi.cfg

-p 设置偏好文件夹,cfg文件中会调

-o 表示生成的目标文件
-O 表示集成的模块

 

 

以上生成完毕,在文件夹下会出现一个bootx64.efi文件,将其和x86_64-efi、locale文件夹、unicode.pf2一起拷贝到第一个fat/fat32分区,并新建一个x64.cfg。

其中,x86_64-efi为模块目录,locale为地区语言,unicode.pf2为字体,x64.cfg为配置文件

目录如下:

FAT/FAT32

#########################
/EFI/Boot/bootx64.efi
/EFI/grub/x64.cfg

/EFI/grub/unicode.pf2

/EFI/grub/x86_64-efi/

/EFI/grub/locale/

#####################


x64.cfg内容示例:

 

 

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}


insmod part_gpt
insmod fat
set root='hd0,gpt1'

#set font
font="/EFI/grub/unicode.pf2"
if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=zh_CN
  insmod gettext
fi

#adjust the screen resolution
terminal_output gfxterm

#background
insmod jpeg
if background_image /EFI/grub/background.jpg; then
  true
else
  set menu_color_normal=white/black
  set menu_color_highlight=black/light-gray
  if background_color 255,255,155,0; then
    clear
  fi
fi



#default select menu index
set default=0

#timeout
set timeout_style=menu
set timeout=5


menuentry "启动 delta win7" --class windows --class os {
	insmod ntfs
	set root='(hd0,gpt2)'

	clear
	echo "Start Windows"
	chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

menuentry "local win7" --class windows --class os {
	insmod ntfs
	set root='(hd0,gpt3)'
	

	clear
	echo "Start Windows"
	chainloader /EFI/Microsoft/Boot/bootmgfw.efi

}

menuentry "ubuntu16.04 x86" --class ubuntu --class os {
	insmod ext2
	set root='(hd0,gpt5)'
	linux /vmlinuz ro root=/dev/sda5
	initrd /initrd.img
	echo "Start Ubuntu 16.04"
}



menuentry "ubuntu16.04 x64" --class ubuntu --class os {
	insmod ext2
	set root='(hd0,gpt6)'
	linux /vmlinuz ro root=/dev/sda6
	initrd /initrd.img
	echo "Start Ubuntu 16.04"
}

menuentry "-------------------" --class ubuntu --class os{
	set root=(hd0,gpt1)
}

menuentry "ubuntu-efi" --class ubuntu --class os {
	insmod ext2
	set root='(hd0,gpt5)'
	chainloader /efi/grub.efi
}

menuentry "install ubuntu" --class ubuntu --class os {
	insmod ext2
	insmod loopback
	set root=(hd0,gpt4)
	set isofile=/OS/linux/ubuntu-16.04.2-desktop-amd64.iso
	loopback loop $isofile
	linux	(loop)/casper/vmlinuz.efi  boot=casper iso-scan/filename=$isofile
	initrd	(loop)/casper/initrd.lz
}

menuentry "-------------------" --class ubuntu --class os{
	set root=(hd0,gpt1)
}

menuentry "reboot" --class windows --class os{
	insmod reboot
	reboot
}

menuentry "halt" --class windows --class os{
	insmod halt
	halt
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010875635/article/details/74289971

智能推荐

css面试题-程序员宅基地

一、CSS基础1. CSS选择器及其优先级选择器格式优先级权重id选择器#id100类选择器#classname10属性选择器a[ref=“eee”]10伪类选择器li:last-child10标签选择器div1伪元素选择器li:after1相邻兄弟选择器h1+p0子选择器ul>li0后代选择器li a0通配符选择器*0对于选择器的优先级:标签选择器、伪元素选择器:1类选_css面试题

基于JAVA的SNMP协议报文的Socket通讯-程序员宅基地

1.引言自从八十年代末期SNMP(Simple Network Management Protocol)简单网络管理协议面世以来,网络管理技术在短短的几十年里得到了突飞猛进的发展,随着管理功能的增强和管理对象的扩大,网络管理技术正逐步成为网络构建和维护中不可少的重要因素。Socket接口是TCP/IP的API。也就是说Socket接口规定了许多函数和例程,程序员可以用它们来开发TCP/..._snmp 是socket接口吗 告警数据

大智慧重要函数应用教程-程序员宅基地

大智慧引用函数SUM的运用函数:SUM(X,N) 参数: X为数组,N为计算周期 说明:统计N周期中X的总和,N=0则从第一个有效值开始。 示例:SUM(VOL,0) 表示统计从上市第一天以来的成交量总和。 SUM和COUNT这两个函数不同之处在于COUNT,计数。SUM,总数、和。请注意这两个函数的区别。 当数组为逻辑运算判断的结果时,SUM和COUNT的返回值是一样的。一般习惯..._大智慧 barscount

多线程40题总结-程序员宅基地

1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓”知其然知其所以然”,”会用”只是”知其然”,”为什么用”才是”知其所以然”,只有达到”知其然知其所以然”的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:(1)发挥多核CPU的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用..._生产者与消费者 有数据文件 两个线程从文件中读取一个整数 限制两个操作数分别来

Python包的更新、安装_基础操作_python ctrl + r 更新-程序员宅基地

查看信息ctrl+R打开命令提示符窗口1.更新pippython -m pip install --upgrade pip # 方法1pip install -U pip # 方法22.pip相关操作——查看信息pip --version # 查看版本和路径pip show <package> # 显示安装包的信息 #如果不存在包# WARNING: Packag..._python ctrl + r 更新

构建本地单元测试-程序员宅基地

本文中API文档部分,翻译自:Building Local Unit Tests 水平有限自己感觉很多地方表达的并不到位,但找不到更好的表达方式,如果您觉着有更好的表达方式,帮助我改进!构建本地单元测试如果你的单元测试没有依赖或者仅有简单的Android依赖,你应该在你的本地开发机器上运行你的测试。这种测试是非常高效的,在你每次运行你的测试的时候,他可以帮助你避免加载整个待测试的App进入你

随便推点

百度离线使用百度地图离线JavaScript API加载本地瓦片地图 -java教程-程序员宅基地

最近笔者几篇文章介绍了改百度离线的文章. 关联文章的地址 1.首先取获百度 JavaScript API 首先用浏览器开打 http://api.map.baidu.com/api?v=1.3 如下图所示 其中 http://api.map.baidu.com/getscript?v=1.3&key=&services=&t=20121108061854

面试题学习总结--二-程序员宅基地

1.Java多态是如何实现的(参考自 https://www.cnblogs.com/chenssy/p/3372798.html)1.1多态的定义:多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。...

零基础学Java——小白的Java之路(4)-程序员宅基地

方法方法是一段可以重复调用的代码块,这个代码块实现了某个功能,当我们的程序中需要这一个功能的时候,调用这个方法即可,不再需要重复书写这个功能的代码。方法的定义格式public static <返回值类型> <方法名>(<参数类型> <参数名>,... ){ 方法体; [return 表达值] 注意:返回值...

UBOOT-2010-03在S3C2440上的移植<二>------------硬件初始化-程序员宅基地

三、修改时钟频率和中断的配置Notes:下面绿色色部分代码既是需要修改的代码 接上文UBOOT-2010-03在S3C2440上的移植&lt;一&gt;------------项目搭建3.1)修改eilian240开发板u-boot第一个要运行的程序cpu/arm920t/start.S(即u-boot的 stage1部分)3.1.1)添加CPU频率...

mongodb报错[js error:out of memory]-程序员宅基地

这是一个杯具,在官网也有兄台报告了,不过目前还没有明确回复,估计是:同时做了drop和create操作导致内存泄漏所引发,所以友情提醒:还是用remove吧。理论上(我这就是),进入数据库repair后就ok了。不过事实上,此错误似乎仅限于(目前)php-drive,比如我这所用的rockmongo,即使在out of memory的时候,python的连接一直是正常可用的。...

如何编写oracle存储过程_oracle编辑存储过程-程序员宅基地

在我的上一个银行项目中,我接到编写ORACLE存储过程的任务,我是程序员,脑袋里只有一些如何使用CALLABLE接口调用存储过程的经验,一时不知如何下手,我查阅了一些资料,通过实践发现编写ORACLE存储过程是非常不容易的工作,即使上路以后,调试和验证非常麻烦。简单地讲,Oracle存储过程就是存储在Oracle数据库中的一个程序。  一. 概述  Oracle存储过程开发的要点是: _oracle编辑存储过程

推荐文章

热门文章

相关标签