前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UEFI/LEGACY 可启动ISO制作

UEFI/LEGACY 可启动ISO制作

作者头像
PedroQin
发布2020-08-06 09:50:59
3.4K0
发布2020-08-06 09:50:59
举报
文章被收录于专栏:WriteSimpleDemoWriteSimpleDemo

EFI 文件夹可从centos官方镜像获得,grldr从 参考链接 grub4dos 获得,需更新配置文件grub.cfgmenu.lst

实现效果

搭配前文简易Ramdisk 镜像制作(基于Centos7+)中Ramdisk可实现:

  • 可挂载ISO镜像实现从Ramdisk OS启动
  • 可烧录为可启动U盘从Ramdisk OS启动

efiboot.img

参照参考链接2

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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中以下几行为必须,

代码语言:javascript
复制
## 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中以下几行为必须,

代码语言:javascript
复制
# 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即可)

整个文件树如下

代码语言:javascript
复制
[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 制作

代码语言:javascript
复制
[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/

参考链接

  1. grub4dos(https://github.com/chenall/grub4dos/tree/3c0308b0ea3ccff98d92bfe6b8c54ce6587ce392)
  2. BIOS 和 EFI 介绍及其启动光盘制作(https://www.ibm.com/developerworks/cn/linux/l-cn-biosefi-boot/)
  3. GRUB(https://wiki.archlinux.org/index.php/GRUB)
  4. Unified Extensible Firmware Interface(https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface)
  5. GNU GRUB Manual 2.04(https://www.gnu.org/software/grub/manual/grub/grub.html)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WriteSimpleDemo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现效果
  • efiboot.img
  • grub.cfg
  • menu.lst
  • Legacy下背景图设置
  • UEFI下背景图设置
  • 整个文件树如下
  • ISO 制作
  • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档