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

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

可以直接下载以下操作的所有文件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

智能推荐

大一计算机期末考试高数试卷,大一高等数学期末考试试卷及答案详解.doc_weixin_39862871的博客-程序员宅基地

PAGE \* MERGEFORMAT13大一高等数学期末考试试卷(一)一、选择题(共12分)1. (3分)若为连续函数,则的值为( ).(A)1 (B)2 (C)3 (D)-12. (3分)已知则的值为( ).(A)1 (B)3 (C)-1 (D)3. (3分)定积分的值为( ).(A)0 (B)-2 (C)1 (D)24. (3分)若在处不...

Road Transport Timberland Boots People_weixin_30835933的博客-程序员宅基地

Over time, all the people have forgotten the name of what he was, only to Timberland boots for women called. Would dodge, most good crack tomb various organs. And marksmanship as God, not only in the ...

c# 如何抓微信把柄_C# 调用微信接口的代码_weixin_39542936的博客-程序员宅基地

调用微信接口前需要准备的内容。1.微信公众平台的appid2.微信公众平台的secret3..获取tokenid4.获取ticket5.生成签名的随机串6.生成签名的时间戳7.生成签名================================================================================1.微信公众平台的appid2.微信公众平台的secre...

linux内核编译 kbuild,Kbuild 编译 Linux 内核系列(四)_孙煜征的博客-程序员宅基地

By - 11月, 4th 2017Oh Oh Oh!温习过后,再来看看我们今天是什么菜?Author: Wei Yang作者公众号:杨小伟的世界help 目标可以说是在 kbuild 中最直接的小目标了,虽然它和我们的代码基本没有什么关系,只是用来生成 kbuild 的简短使用说明,但是用它来作为走近 kbuild 系统的敲门砖是比较合适的。如何用?用法很简单。make help12makehe...

while循环c语言程序,C语言程序设计while循环语句while循环语句.pptx_weixin_39662462的博客-程序员宅基地

解决迭代问题好帮手——循环结构while语句主讲人:周芸掌握while语句的语法结构;理解while语句的执行过程;会读、编写简单的while程序。引入十字路口的红绿灯每天都在不停地循环闪烁从而使得人们能有序出行。用C语言如何模拟实现此场景呢?#includemain( ){printf(“下面进入红绿灯演示程序\n");printf(“红灯亮\n");printf(“绿灯亮\n");print...

随便推点

C# 单例模式封装一个打印WebApi日志的类_物联网_咸鱼的博客-程序员宅基地_c# webapi 日志

1.前言 这里主要说明一下为什么日志类使用单例模式,首先我们先了解一下单例模式。单例模式:创建的类在当前进程中只能有一个实例。用在写日志主要是防止在多线程写日志的时候防止对文件操作出现访问冲突的现象。2.操作封装public class Log { private static Log _instance = null; private static readonly object syncObject = new object(); ...

继承、实现、依赖、关联、聚合、组合的联系与区别_Roger_CoderLife的博客-程序员宅基地_依赖 继承 聚合

继承、实现、依赖、关联、聚合、组合的联系与区别分别介绍这几种关系:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性; 实现指的是一个class类实现interface接口(可以是多个)的功能;实现...

Crontab应用简介_zhangwenzhe的博客-程序员宅基地

有时候我们需要定时地处理大量的数据,这里我们称之为Batch处理。Batch处理就是定时地执行某个程序。其实可以很明显的看到,这里我们需要做到两个东东:定时和执行程序。下面描述一下这两个东东。 定时: 我们这边使用的是Linux系统,如果我们需要按一定的周期执行程序,我们可以使用crontab来实现。crontab (C)指令从指定文件或标准输入拷贝或编辑成用户的 crontab 文件

【JavaSE基础一】Java环境变量的配置_会编程的李较瘦的博客-程序员宅基地_javase环境变量配置

此文章主要详细介绍了Java环境变量的配置步骤文章目录一、JDK的下载二、JDK的安装三、环境变量的配置四、java运行环境的验证一、JDK的下载以下为jdk的下载链接:[https://www.oracle.com/java/technologies/downloads/#java8-windows]接下来可以打开自己的系统设置面板查看电脑的系统位数。操作步骤:此电脑—》右键选择属性,就可以看到自己电脑的操作系统为64位或32位。然后打开刚才的下载链接网址,选择对应符合自己系统的安装包

Hdu2011_那一夜见红的博客-程序员宅基地

多项式求和 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 111967Accepted Submission(s): 63078 Problem Description 多项式的描述如...

Spring深入理解-自己造Spring轮子-IOC理解1_赚钱回家养猪的博客-程序员宅基地

Spring的主要核心是SpringIOC和SpringAOP。SringIOC:反转控制,是类的实例化操作交给Spring去完成。SpringAOP:切面编程,是动态代理技术的一种实现。我的IOC:1.每次我们写Controller的时候,我们都会在类上面使用注解Controller。所以我们定一个注解:@Retention(value=RetentionPolicy.RUNTIME...

推荐文章

热门文章

相关标签