911061873 发表于 2018-2-10 04:25:07

自己制作系统U盘

本帖最后由 911061873 于 2018-2-10 18:51 编辑

最近刚接触grub2,想全部自己动手打,造一个支持双启动的U盘。并可以安装Windows系统。
我会把相关经验写出来自己留存,也可以供大家参考。
如有错误或者更好的方法,欢迎交流。{:1_186:}

1.准备工作
准备一个U盘
        我把它分成了两个区,一个FAT32分区放grub相关文件,一个NTFS分区放一下系统的镜像文件。
        因为FAT32不支持单个文件大小超过4G,所以要分成两个区。
下载GRUB2
        从grub官网下载for windows版本的。
        这里给出当前(2018年2月10日)最新版本的链接grub-2.02-for-windows.zip

2.安装grub2到U盘
        把下载好的grub2解压,插入U盘。
        以管理员方式启动CMD窗口并切换到当前解压的目录。
        运行wmic diskdrive list brief查看U盘的设备ID
       
        那个“\\.\PHYSICALDRIVE2 ”就是U盘的设备ID
        接着运行#安装BIOS到U盘
grub-install.exe --boot-directory=g: --recheck --target=i386-pc \\.\PHYSICALDRIVE2
#安装UEFIx32到U盘
grub-install.exe --boot-directory=g: --recheck --target=i386-efi --efi-directory=g: --no-nvram --removable \\.\PHYSICALDRIVE2
#安装UEFIx64到U盘
grub-install.exe --boot-directory=g: --recheck --target=x86_64-efi --efi-directory=g: --no-nvram --removable \\.\PHYSICALDRIVE2
        其中的“g:”为我的U盘中的FAT32分区的盘符。
        至此已经做好的一个支持BIOS+UEFI的启动U盘了,但目前是命令版的,还没有配置菜单。

3.配置菜单
        配置菜单我参考的这篇文章GRUB2配置文件"grub.cfg"详解
        以下是我的配置文件
        #################
## (1)特殊变量 ##
#################
#默认启动第一个菜单项
set default=0
#如果第一个菜单项启动失败,转而启动第二个菜单项
set fallback=1
#优先使用最常规的1024x768分辨率,以保证在不同的屏幕上拥有一致的菜单效果,如果失败再自动匹配分辨率
set gfxmode=1024x768,auto
#使用自己制作的24px的大号字体以避免默认字体太小看不清
set gfxterm_font=unicode
#将GRUB2设置为简体中文界面
set lang=zh_CN
#指定翻译文件(*.mo)的目录,若未明确设置此目录,则无法显示中文界面。
set locale_dir=$prefix/locale
#每一满屏后暂停输出,以免信息太多一闪而过看不清
set pager=1
#开启密码验证功能,并设置一个名为'root'的超级用户
#set superusers=root
#设置菜单的超时时间为5秒
set timeout=30
#设置主题文件路径
#set theme=$prefix/themes/starfield/theme.txt
#设置菜单选项颜色
set menu_color_normal=green/black
set menu_color_highlight=white/cyan

#################
## (2)公共模块 ##
#################
#两种最流行的磁盘分区格式
insmod part_gpt
insmod part_msdos
#常见文件系统驱动
insmod btrfs
insmod exfat
insmod ext2
insmod fat
insmod iso9660
insmod jfs
insmod ntfs
insmod reiserfs
insmod udf
insmod xfs
insmod zfs
#一次性加载所有可用的视频驱动
insmod all_video
#图形模式终端
insmod gfxterm
#背景图片支持
insmod png


#########################################
## (3)公共命令(必须放在模块和变量之后) ##
#########################################
#激活图形模式的输出终端,以允许使用中文和背景图
terminal_outputgfxterm
export menu_color_normal menu_color_highlight;
#设置背景图片
background_image $prefix/themes/1024x768.png
#加载自己制作的24px的大号字体文件($prefix/fonts/WenQuanYiMicroHeiMono24px.pf2)
loadfont unicode
#设置'root'用户的哈希密码[通过"grub-mkpasswd-pbkdf2"工具生成]
#password_pbkdf2 root grub.pbkdf2.sha512.69.7DBCA469F80EA1C0A8A1E2FEBC4F8463.B073C1C89EC1E85309C3D6A1BAFF4356

#################
## (4)菜单项   ##
#################

menuentry '正常启动(Windows)' --hotkey=1{
    if [ 'pc' == $grub_platform ] ; then
      if search --file --set --no-floppy /bootmgr ; then
            chainloader +1
      elif search --file --set --no-floppy /ntldr ; then
            chainloader +1
      else
            echo '没有找到Windows'
            sleep --verbose 5
      fi
    fi

    if [ 'efi' == $grub_platform ] ; then
      if search --file --set --no-floppy /EFI/Microsoft/Boot/bootmgfw.efi ; then
            chainloader /EFI/Microsoft/Boot/bootmgfw.efi
      else
            echo '没有找到Windows'
            sleep --verbose 5
      fi
    fi
}
if [ 'pc' == $grub_platform ] ; then
        source ${prefix}/bios.cfg
else
        if [ "x86_64" == $grub_cpu ] ; then
                source ${prefix}/efi64.cfg
        else
                source ${prefix}/efi32.cfg
        fi
fi
menuentry "关机" --hotkey=p{
halt
}
menuentry "重启" --hotkey=r{
reboot
}



接下来我要研究UEFI载入PE的问题。成功了我就继续更帖。

2010sya 发表于 2018-2-10 05:45:49

抢个沙发{:1_186:}

rengrancunzai 发表于 2018-2-10 08:32:54

谢谢分享

helloman 发表于 2018-2-10 09:00:29

下载了,谢谢分享

liuyindou 发表于 2018-2-10 09:45:15

谢谢分享

ai20110304 发表于 2018-2-10 09:50:39

好东西。谢谢

lbw2007 发表于 2018-2-10 20:18:15

支持一下!

2013liuandhe007 发表于 2018-2-10 20:28:55

这个非常赞啊!把自己的点滴心得拿出来跟大家分享。
谢LZ!

dfswb 发表于 2018-2-16 10:11:42

不错,很给力!

zjixi 发表于 2018-2-16 22:17:55

支持!!!

tjmcl 发表于 2018-2-17 18:48:51

{:1_183:}{:1_183:}

zjixi 发表于 2018-2-24 09:14:02

Legacy引导的菜单配置文件我找到位置了,位于/grub/grub.cfg,可是EFI引导的配置文件在什么位置?或者说用你的这个方法安装的/EFI/BOOT/BOOTX64.EFI 这个文件指向???

l3429900 发表于 2018-2-24 11:29:03

谢谢分享,辛苦发帖,学习中

zjixi 发表于 2018-2-25 20:56:32

wintoflash 发表于 2018-2-24 09:52
legacy-bios和efi的配置文件是同一个。

你应该没有按照楼主的方法实体操作吧!我实体操作,它们并没有指向同一个配置文件,菜单不一样

rahai 发表于 2018-4-4 09:47:03

感谢无私分享,辛苦发帖,学习中。

cczzzz 发表于 2018-4-5 23:31:23

lz给的命令,uefi模式64位的grub2的安装是写入到扇区,还是通过efi文件启动?

cczzzz 发表于 2018-4-5 23:32:02

lz给的命令,uefi模式64位的grub2的安装是写入到扇区,还是通过efi文件启动?

2010wxky6688 发表于 2018-4-28 14:08:43

路过进来学习一下!

Duane 发表于 2018-4-28 14:20:42

Side__ 发表于 2019-12-2 11:03:08

终于找到了
页: [1]
查看完整版本: 自己制作系统U盘