UEFI/LEGACY 可启动ISO制作
时间:2022-07-22
本文章向大家介绍UEFI/LEGACY 可启动ISO制作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
EFI 文件夹可从centos官方镜像获得,grldr从 参考链接 grub4dos 获得,需更新配置文件
grub.cfg
、menu.lst
实现效果
搭配前文简易Ramdisk 镜像制作(基于Centos7+)
中Ramdisk可实现:
- 可挂载ISO镜像实现从Ramdisk OS启动
- 可烧录为可启动U盘从Ramdisk OS启动
efiboot.img
参照参考链接2
[root@labserver ~]# dd if=/dev/zero of=efiboot.img bs=1M count=5
[root@labserver ~]# mkfs.fat efiboot.img
[root@labserver ~]# mount -o loop efiboot.img /mnt
[root@labserver ~]# cp -rf mkiso/EFI /mnt
[root@labserver ~]# umount /mnt
[root@labserver ~]# cp efiboot.img mkiso/
grub.cfg
参照参考链接5
[root@labserver mkiso]# cat EFI/BOOT/grub.cfg
set default="0"
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
insmod jpeg
# for below image / color display
terminal_output gfxterm
if background_image /EFI/BOOT/splashimage.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
set timeout=10
### END /etc/grub.d/00_header ###
search --no-floppy --set=root -l 'Pedro_ISO'
### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS7.6' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /centos76/vmlinuz-3.10.0-957.el7.x86_64 selinux=0 modprobe.blacklist=uas,usb_storage,nouveau,mpt3sas amd_iommu=off quiet splash vconsole.font=latarcyrheb-sun16 vconsole.keym
ap=us ipv6.disable=1 console=tty0 biostype=UEFI
initrdefi /centos76/initrd_1.0.7_20200706123034.img
}
menuentry 'ServiceDiag' --class fedora --class gnu-linux --class gnu --class os {
linuxefi /ServiceDiag/vmlinuz rescue quiet intel_idle.max_cstate=1 intel_pstate=disable
initrdefi /ServiceDiag/initrd.img
}
menuentry 'EFI Shell' {
chainloader /EFI/BOOT/Shell.efi
}
menuentry 'Firmware setup' {
echo "Firmware setup ..."
sleep 1
fwsetup
}
menuentry 'reboot' {
echo "reboot ..."
sleep 1
reboot
}
menuentry 'halt' {
echo "halt ..."
sleep 1
halt
}
menu.lst
参照参考链接1
[root@labserver mkiso]# cat menu.lst
color blue/green_message yellow/red_message white/magenta white/magenta
timeout=5
default=0
## menu border color
color border=0xEEFFEE
## set vbe mode
graphicsmode -1 640:800 480:600 24:32 || graphicsmode -1 -1 -1 24:32
## loading splashimage
splashimage /splashimage.bmp
default /default
title centos76
kernel /centos76/vmlinuz-3.10.0-957.el7.x86_64 selinux=0 modprobe.blacklist=uas,usb_storage,nouveau,mpt3sas amd_iommu=off quiet splash vconsole.font=latarcyrheb-sun16 vconsole.keymap=us ipv6.disable=1 console=tty0 biostype=LEGACY
initrd /centos76/initrd_1.0.7_20200706123034.img
savedefault --wait=2
title ServiceDiag
kernel /ServiceDiag/vmlinuz rescue quiet intel_idle.max_cstate=1 intel_pstate=disable
initrd /ServiceDiag/initrd.img
savedefault --wait=2
title MAXDOS.IMG
map --mem /DOS/MAXDOS.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
savedefault --wait=2
title commandline
commandline
title reboot
reboot
title halt
halt
Legacy下背景图设置
注意menu.lst
中以下几行为必须,
## set vbe mode
graphicsmode -1 640:800 480:600 24:32 || graphicsmode -1 -1 -1 24:32
## loading splashimage
splashimage /splashimage.bmp
制作背景图时,保存为24位位图bmp(windows自带画图工具可另存为该类型)(图片分辨率无要求,但无需太大,最大1027x768即可)
另,支持xpm格式,本文未涉及
UEFI下背景图设置
在grub.cfg
中以下几行为必须,
# for below image / color display
terminal_output gfxterm
if background_image /EFI/BOOT/splashimage.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
图片jpg
/jpeg
/png
/tga
格式即可(图片分辨率无要求,但无需太大,最大1027x768即可)
整个文件树如下
[root@labserver mkiso]# tree
.
|-- centos76
| |-- initrd_1.0.7_20200706123034.img
| `-- vmlinuz-3.10.0-957.el7.x86_64
|-- default
|-- DOS
| |-- dosipmi
| | |-- COMMON.C
| | |-- COMMON.H
| | |-- IPMITOOL.C
| | |-- Ipmitool.exe
| | |-- ISA.C
| | |-- ISA.H
| | |-- Makefile
| | |-- PCIA.ASM
| | |-- PCI.C
| | |-- PCI.H
| | |-- README.TXT
| | `-- swlicens2005.pdf
| `-- MAXDOS.IMG
|-- EFI
| `-- BOOT
| |-- BOOTX64.efi
| |-- fonts
| | `-- unicode.pf2
| |-- grub.cfg
| |-- grubx64.efi
| |-- Shell.efi
| `-- splashimage.jpg
|-- efiboot.img
|-- grldr
|-- menu.lst
|-- ServiceDiag
| |-- initrd.img
| `-- vmlinuz
`-- splashimage.bmp
7 directories, 28 files
ISO 制作
[root@labserver ~]# ls mkiso/
EFI ServiceDiag centos76 efiboot.img grldr menu.lst
[root@labserver ~]# genisoImage -r -T -J -V "Pedro_ISO"
-b grldr -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table
-eltorito-alt-boot -e efiboot.img -no-emul-boot
-v -o ../Pedro_iso.iso mkiso/
参考链接
- grub4dos(https://github.com/chenall/grub4dos/tree/3c0308b0ea3ccff98d92bfe6b8c54ce6587ce392)
- BIOS 和 EFI 介绍及其启动光盘制作(https://www.ibm.com/developerworks/cn/linux/l-cn-biosefi-boot/)
- GRUB(https://wiki.archlinux.org/index.php/GRUB)
- Unified Extensible Firmware Interface(https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface)
- GNU GRUB Manual 2.04(https://www.gnu.org/software/grub/manual/grub/grub.html)
- 【Hibernate那点事儿】—— Hibernate应该了解的知识
- 【Hibernate那点事儿】—— Hibernate应该了解的知识
- Java魔法堂:以Windows服务的形式运行Java程序
- 【Hibernate那点事儿】—— Hibernate知识总结
- java获取网页源代码
- Java魔法堂:注解用法详解——@SuppressWarnings
- 日志那点事儿——slf4j源码剖析
- 给Dreamweaver插上Svn的翅膀
- MyBatis魔法堂:ResultMap详解
- 腾讯海量监控体系经验分享
- 【Spring开发】—— Spring Core
- Java魔法堂:找外援的利器——Runtime.exec详解
- win10的80端口被system占用的问题
- 【Spring开发】—— AOP之方法级拦截
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法