GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
teasiu
帖子: 30
注册时间: 2010-10-29 18:27
送出感谢: 0
接收感谢: 6 次

GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#1

帖子 teasiu » 2013-05-21 9:52

我启动这个项目,是因为越来越多的人开始转投向GRUB2,却不知道如何入手,
为了让更多的人了解和使用它,就摸索摸索吧。

关于winly项目的简介:
WinLy全称是Windows base Live Linux Installer 作者teasiu@163.com
1、WinLy是启动引导器。
WinLy使用开源世界的GRUB2启动软件来引导,GRUB2是非常优秀的一款启动软件。

2、WinLy是安全软件。
WinLy使用的代码是开源代码,仅以分享的精神制作,不存在任何商业目的。
Winly的工作原理是:通过您本身windows系统的启动加载器NTLDR或BOOTMGR加载,所以,不会妨碍也不会损坏您的windows正常启动。

3、WinLy是易用软件。
适用windowsNT系列,Win2000、WinXP、Win7/8均能安装并成功引导。

4、winly支持UEFI和传统的bios启动
无论你是旧式电脑主板还是新型电脑主板,winly均能助你无忧启动。

5、winly的可扩展性和代码公开
您可以自由修改和扩展任何代码,编辑成你喜欢的样子。

===================================================
原理说明:
一、bios主板的引导
1、磁盘引导
先引导winly.mbr(mbr引导) -->winlyldr(核心) -->winly.cfg(菜单)-风格包 -->启动系统

2、光驱引导
先引导winly.bin(iso引导含核心) -->winly.cfg(菜单)-风格包 -->启动系统

3、引导windows
通过命令ntlrd /ntldr引导windowsNT5,
通过命令ntlrd /bootmgr引导windowsNT6+,
通过命令chainloader device引导分区pbr

二、EFI主板的引导
1、32-bit引导文件
/EFI/boot/bootia32.efi(核心) -->winly.cfg(菜单)-风格包 -->启动系统
2、64-bit引导文件
/EFI/boot/bootx64.efi(核心) -->winly.cfg(菜单)-风格包 -->启动系统
3、引导windows
通过命令chainloader /EFI/microsoft/boot/bootmgfw.efi引导windows的启动文件

三、中文字体支持/风格/背景等
1、中文字体支持文件unicode.pf2
2、风格文件修改文档theme.txt
3、背景支持jpg,vga,png图片格式

四、菜单的编写(请搜索和提问)
示范

代码: 全选

menuentry "【1】启动slitaz微型linux中文定制版"  --class slitaz --class os {
linux /boot/bzImage rw root=/dev/null vga=normal autologin
initrd /boot/rootfs.gz
}
menuentry "【2】启动bios主板的windowsPE系统" --class windows --class os {
ntldr /bootmgr
}
menuentry "【4】启动UEFI主板的32-bit PE系统(如果有)" --class windows --class os {
search --no-floppy --file --set=root /EFI/microsoft/boot/bootia32.efi
chainloader /EFI/microsoft/boot/bootia32.efi
}
menuentry "【5】启动UEFI主板的64-bit PE系统(如果有)" --class windows --class os {
search --no-floppy --file --set=root /EFI/microsoft/boot/bootx64.efi
chainloader /EFI/microsoft/boot/bootx64.efi
}
menuentry "【6】启动UEFI主板的windows系统(如果有)" --class windows --class os {
search --no-floppy --file --set=root /EFI/microsoft/boot/bootmgfw.efi
chainloader /EFI/microsoft/boot/bootmgfw.efi
}
menuentry "【7】启动已安装的其他linux引导(如果有)" --class gnu-linux --class os {
insmod gzio
insmod part_msdos
insmod ext2
insmod ntfs
insmod probe
search --no-floppy --file --set=root /vmlinuz
configfile ($root)/boot/grub/grub.cfg
}
menuentry "【reboot】重启" --class windows --class os{
	reboot
}
menuentry "【halt】关闭计算机" --class windows --class os{
	halt
}
======================================================
选区_004.png
(5.27 KiB) 下载 1185 次
选区_005.png
选区_008.jpg
选区_009.jpg
下载和使用:
1、bios主版windows下直接安装:
WinLy4.4.zip
(1.74 MiB) 下载 1419 次
===========================

2、bios主板手动解包安装:
包含4个文件
1、内核文件 winlyldr
2、mbr引导文件 winlyldr.mbr
3、菜单文件winly.cfg
4、字体文件unicode.pf2
winlyldr.7z
(1.09 MiB) 下载 645 次
===========================
3、多重启动UEFI/DOS的光盘iso模版
http://burg4dos.googlecode.com/files/winly.iso.7z
选区_013.jpg
===========================
4、UEFI主板手动解包到fat格式的磁盘或U盘根目录即可
已经包含了32位和64位的启动文件. 引导文件也可以更改名字如winlyx64.efi,然后自行编辑BSD进行引导。
EFI.7z
(946.03 KiB) 下载 1601 次
============================


制作教程及源码+脚本:

大家可能对如何制作更感兴趣,
是的,我为此编了一个简单的脚本,大家很容易就能亲自动手制作:

一、编译环境准备(仅在linux下)
1、如果你没有安装使用过linux,推荐你下载一个免安装完全运行于内存的微型linux--->GNU SliTaz linux
中文定制版下载地址:
http://code.google.com/p/linux-pe/downloads/list
安装环境依赖包:

代码: 全选

wget http://burg4dos.googlecode.com/svn/trunk/makegrub2.tazpkg
wget http://download.tuxfamily.org/slitaz/packages/cooking/xz-dev-5.0.4.tazpkg
su 回车,输入root取得安装权限
tazpkg -i makegrub2.tazpkg
tazpkg -i xz-dev-5.0.4.tazpkg
tazpkg get-install automake
tazpkg get-install gettext
2、如果你已经有其他发行版linux,如UBUNTU,安装编译环境依赖包:

代码: 全选

sudo apt-get install bison libopts25 libselinux1-dev autogen m4 autoconf help2man libopts25-dev flex libfont-freetype-perl automake autotools-dev libfreetype6-dev texinfo
二、下载我修改过的grub2.00源码
http://burg4dos.googlecode.com/svn/grub-2.00.tar.xz

三、将上面的源码和下面的脚本放在同一文件夹位置,运行下面的相应脚本,自动进行编译和生成成品
1、bios主板下的winlyldr
运行脚本方法:下载后解压,打开终端,输入 sh mkldr-all.sh
mkldr-all.sh.7z
(1.17 KiB) 下载 324 次

代码: 全选

#!/bin/sh
export EFI_ARCH=i386-pc
allmods=" "
allmods=$allmods" acpi.mod"
allmods=$allmods" all_video.mod"
allmods=$allmods" ata.mod"
allmods=$allmods" blocklist.mod"
allmods=$allmods" boot.mod"
allmods=$allmods" bsd.mod"
allmods=$allmods" btrfs.mod"
allmods=$allmods" bufio.mod"
allmods=$allmods" cat.mod"
allmods=$allmods" chain.mod"
allmods=$allmods" cmp.mod"
allmods=$allmods" cpio_be.mod"
allmods=$allmods" configfile.mod"
allmods=$allmods" crypto.mod"
allmods=$allmods" cryptodisk.mod"
allmods=$allmods" cpuid.mod"
allmods=$allmods" crc64.mod"
allmods=$allmods" cs5536.mod"
allmods=$allmods" echo.mod"
allmods=$allmods" ext2.mod"
allmods=$allmods" fat.mod"
allmods=$allmods" font.mod"
allmods=$allmods" gettext.mod"
allmods=$allmods" gptsync.mod"
allmods=$allmods" gzio.mod"
allmods=$allmods" halt.mod"
allmods=$allmods" help.mod"
allmods=$allmods" hfs.mod"
allmods=$allmods" hfsplus.mod"
allmods=$allmods" iso9660.mod"
allmods=$allmods" jpeg.mod"
allmods=$allmods" jfs.mod"
allmods=$allmods" keylayouts.mod"
allmods=$allmods" keystatus.mod"
allmods=$allmods" linux.mod"
allmods=$allmods" linux16.mod"
allmods=$allmods" loadenv.mod"
allmods=$allmods" loopback.mod"
allmods=$allmods" ls.mod"
allmods=$allmods" lsmmap.mod"
allmods=$allmods" lspci.mod"
allmods=$allmods" lzopio.mod"
allmods=$allmods" minicmd.mod"
allmods=$allmods" mmap.mod"
allmods=$allmods" multiboot.mod"
allmods=$allmods" newc.mod"
allmods=$allmods" ntfscomp.mod"
allmods=$allmods" ntldr.mod"
allmods=$allmods" ohci.mod"
allmods=$allmods" pci.mod"
allmods=$allmods" part_apple.mod"
allmods=$allmods" part_bsd.mod"
allmods=$allmods" part_gpt.mod"
allmods=$allmods" part_msdos.mod"
allmods=$allmods" part_plan.mod"
allmods=$allmods" part_sun.mod"
allmods=$allmods" part_sunpc.mod"
allmods=$allmods" part_dvh.mod"
allmods=$allmods" parttool.mod"
allmods=$allmods" password.mod"
allmods=$allmods" password_pbkdf2.mod"
allmods=$allmods" pata.mod"
allmods=$allmods" play.mod"
allmods=$allmods" png.mod"
allmods=$allmods" probe.mod"
allmods=$allmods" pxe.mod"
allmods=$allmods" pxechain.mod"
allmods=$allmods" reboot.mod"
allmods=$allmods" romfs.mod"
allmods=$allmods" scsi.mod"
allmods=$allmods" search.mod"
allmods=$allmods" search_fs_file.mod"
allmods=$allmods" search_fs_uuid.mod"
allmods=$allmods" search_label.mod"
allmods=$allmods" sendkey.mod"
allmods=$allmods" sfs.mod"
allmods=$allmods" sleep.mod"
allmods=$allmods" tar.mod"
allmods=$allmods" terminal.mod"
allmods=$allmods" terminfo.mod"
allmods=$allmods" test.mod"
allmods=$allmods" true.mod"
allmods=$allmods" udf.mod"
allmods=$allmods" ufs1.mod"
allmods=$allmods" ufs2.mod"
allmods=$allmods" uhci.mod"
allmods=$allmods" usb.mod"
allmods=$allmods" usb_keyboard.mod"
allmods=$allmods" usbms.mod"
allmods=$allmods" vbe.mod"
allmods=$allmods" vga.mod"
allmods=$allmods" vga_text.mod"
allmods=$allmods" video.mod"
allmods=$allmods" video_bochs.mod"
allmods=$allmods" video_cirrus.mod"
allmods=$allmods" video_fb.mod"
allmods=$allmods" videoinfo.mod"
allmods=$allmods" xnu.mod"
allmods=$allmods" xnu_uuid.mod"
mkdir /tmp
cp grub-2.00.tar.xz /tmp
cd /tmp
xz -d grub-2.00.tar.xz
tar xvf grub-2.00.tar
cd grub-2.00
mkdir bin_pc
cd bin_pc
mkdir grub-core
#cp ../map.mod grub-core
cp ../grub.cfg grub-core
../configure --with-platform=pc --target=i386 --prefix=""
make
sleep 3
mkdir -p boot/grub/${EFI_ARCH}
mkdir -p boot/grub/locale
cp ../po/zh_CN.mo boot/grub/locale
cp ../font.pf2 boot/grub
cp ../grub.cfg boot/grub
cd grub-core
rm fs.lst
cp $allmods *.lst ../boot/grub/${EFI_ARCH}
cd ..
find boot | cpio -o -H newc > memdisk.cpio
mv memdisk.cpio grub-core
cd grub-core
../grub-mkimage -O i386-pc -d . -o i386-pc-core.img -m memdisk.cpio -v biosdisk newc blocklist fat iso9660 pxe reiserfs memdisk cpio minicmd part_msdos ext2 ntfs loopback gfxmenu gfxterm reboot normal
cat lnxboot.img i386-pc-core.img > winlyldr
cat cdboot.img i386-pc-core.img > winly.bin
mv winlyldr /tmp
mv winly.bin /tmp
rm memdisk.cpio
cd ..
make distclean
echo "winlyldr文件已经生成,在/tmp下"
echo "winly.bin文件已经生成,在/tmp下,制作可启动iso请继续"
mkdir -p /tmp/iso
cp -af /tmp/grub-2.00/winly /tmp/iso
cd /tmp
cp winly.bin iso
cd iso
mkisofs -R -J -no-emul-boot -boot-info-table -boot-load-size 4 -b winly.bin -o /tmp/winly.iso /tmp/iso
echo "winly.iso文件已经生成,在/tmp下"
2、bios主板可启动iso制作
同上
3、UEFI的32bit启动制作
mkia32efi.sh.7z
(620 Bytes) 下载 348 次
4、UEFI的64bit启动制作
mkx64efi.sh.7z
(621 Bytes) 下载 352 次

代码: 全选

#!/bin/sh
export EFI_ARCH=x86_64
mkdir /tmp
cp grub-2.00.tar.xz /tmp
cd /tmp
xz -d grub-2.00.tar.xz
tar xvf grub-2.00.tar
cd grub-2.00
cp map.mod grub-core
mkdir bin_pc
cd bin_pc
../configure --with-platform=efi --target=${EFI_ARCH} --program-prefix="(memdisk)/boot/grub"
make
sleep 3
mkdir -p boot/grub/${EFI_ARCH}-efi
mkdir -p boot/grub/locale
#cp ../map.mod boot/grub/${EFI_ARCH}-efi
cp ../po/zh_CN.mo boot/grub/locale
cp ../font.pf2 boot/grub
cp ../grub.cfg boot/grub
cp grub-core/*.mod grub-core/*.lst boot/grub/${EFI_ARCH}-efi
rm boot/grub/${EFI_ARCH}-efi/normal.mod
rm boot/grub/${EFI_ARCH}-efi/newc.mod
rm boot/grub/${EFI_ARCH}-efi/memdisk.mod
rm boot/grub/${EFI_ARCH}-efi/cpio.mod
find boot | cpio -o -H newc > memdisk.cpio
mv memdisk.cpio grub-core
cd grub-core
../grub-mkimage -O ${EFI_ARCH}-efi -d . -o boot${EFI_ARCH}.efi -p "(memdisk)/boot/grub" -m memdisk.cpio -v newc memdisk cpio part_gpt part_msdos ntfs ntfscomp hfsplus fat ext2 normal chain boot configfile linux multiboot
mv boot${EFI_ARCH}.efi /tmp
rm memdisk.cpio
cd ..
make distclean
echo "boot${EFI_ARCH}.efi文件已经生成,在/tmp下"
上次由 teasiu 在 2013-05-22 9:05,总共编辑 3 次。
这些用户感谢了作者 teasiu 于这个帖子 (主题 2):
shazhulao003 (2014-02-09 23:21) • pinfan (2014-03-24 17:16)
评价: 7.41%
头像
32idea
帖子: 1248
注册时间: 2006-12-15 9:32
系统: linux
送出感谢: 2 次
接收感谢: 14 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#2

帖子 32idea » 2013-05-21 13:10

很专业啊,支持,论坛里关于这方面的资料还是显得有点少
头像
b33e
论坛版主
帖子: 3862
注册时间: 2011-06-07 14:20
系统: Mint18
送出感谢: 16 次
接收感谢: 62 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#3

帖子 b33e » 2013-05-21 13:36

支持,安装引导让很多新手畏难
头像
niumao
帖子: 372
注册时间: 2010-10-27 20:43
送出感谢: 2 次
接收感谢: 15 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#4

帖子 niumao » 2013-05-21 14:23

欢迎神雕大侠光临。刚刚回帖时还说要网友们去无忧看看。
没想到这边已经置顶了。
牛是牛顿的牛 毛是朱毛的毛
teasiu
帖子: 30
注册时间: 2010-10-29 18:27
送出感谢: 0
接收感谢: 6 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#5

帖子 teasiu » 2013-05-29 9:02

多系统引导实例,请参考:


http://bbs.wuyou.com/forum.php?mod=view ... tid=308169
头像
jarryson
帖子: 4002
注册时间: 2005-08-14 19:53
送出感谢: 1 次
接收感谢: 2 次
联系:

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#6

帖子 jarryson » 2013-05-29 11:53

我用winly来启动arch,最近gummyboot无法引导archlinux。

但是winly在我这里不是宽屏,只是按照普屏显示在左边,右边有一部分黑的。

UEFI好处是主板就支持宽屏分辨率。我记得ubuntu的Grub2就可以全屏

还有如果能够想办法签名启用secure boot就好了。。。有个shim-signed不知道怎么自己签名。
teasiu
帖子: 30
注册时间: 2010-10-29 18:27
送出感谢: 0
接收感谢: 6 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#7

帖子 teasiu » 2013-05-29 16:06

jarryson 写了:我用winly来启动arch,最近gummyboot无法引导archlinux。

但是winly在我这里不是宽屏,只是按照普屏显示在左边,右边有一部分黑的。

UEFI好处是主板就支持宽屏分辨率。我记得ubuntu的Grub2就可以全屏

还有如果能够想办法签名启用secure boot就好了。。。有个shim-signed不知道怎么自己签名。
要支持自己的电脑宽频,就需要使用make install
认真看我的编译脚本,是没有make install的,所以,自己在当前电脑下编译一下,就搞定了。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#8

帖子 eexpress » 2013-05-29 16:26

grub当年想烧入flash,直接代替bios。
后来搞成2,搞得巨大复杂。。。
● 鸣学
teasiu
帖子: 30
注册时间: 2010-10-29 18:27
送出感谢: 0
接收感谢: 6 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#9

帖子 teasiu » 2013-05-29 16:37

eexpress 写了:grub当年想烧入flash,直接代替bios。
后来搞成2,搞得巨大复杂。。。
受教了。

再说点更多的消息,我等认真学习。
teasiu
帖子: 30
注册时间: 2010-10-29 18:27
送出感谢: 0
接收感谢: 6 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#10

帖子 teasiu » 2013-06-03 0:06

不明白现在怎么都喜欢在win下使用esaybcd安装那个什么nerogrub引导。
感觉是一种退步的形式。

winly是将来修复启动引导的利器。
loveneytiri
帖子: 1
注册时间: 2013-05-25 17:45
系统: ubuntu13.04
送出感谢: 0
接收感谢: 0

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#11

帖子 loveneytiri » 2013-06-03 17:16

顶啊!正要好好搞这个呢!另外回复楼上,我也搞不懂为什么有人用着win8,linux,苹果,却非要虚拟机装个xp。。
头像
adam8157
帖子: 2794
注册时间: 2009-03-05 16:31
送出感谢: 0
接收感谢: 8 次
联系:

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#12

帖子 adam8157 » 2013-06-07 21:40

eexpress 写了:grub当年想烧入flash,直接代替bios。
后来搞成2,搞得巨大复杂。。。
头像
youzhiyili
帖子: 2418
注册时间: 2012-03-22 20:42
送出感谢: 128 次
接收感谢: 34 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#13

帖子 youzhiyili » 2013-06-07 23:14

mark
@自由建客 @qy117121 @枫叶饭团 @cikekid @YeLee @jtshs256 @eexpress @ljj_jjl2008 @zhw2101024 @TeliuTe @月下叹逍遥 @leeaman @懒蜗牛Gentoo @灰色小狼 @photor @adagio @JiangHui @phoenixlzx @oneleaf
头像
TeliuTe
论坛版主
帖子: 7435
注册时间: 2007-11-25 13:29
系统: 14/16/18/Fedroa22/w7
来自: 新疆博乐
送出感谢: 30 次
接收感谢: 99 次
联系:

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#14

帖子 TeliuTe » 2013-06-08 10:34

学习,手上没有uefi的机子,有机会试一试
传统bios用easybcd确实很方便,窗口操作兼容性也很好
头像
icelee123
帖子: 811
注册时间: 2011-07-16 19:48
系统: Arch
送出感谢: 2 次
接收感谢: 7 次

Re: GRUB2 for DOS/UEFI/ISO/PXE项目(winly)正式启动(含制作教程及源码)

#15

帖子 icelee123 » 2013-06-08 12:30

看起来确实有些压力,等到用得着的时候再来慢慢拜读
其实我是菜鸟、、、
回复

回到 “启动和引导”