分页: 1 / 1
向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-09 10:51
由 badlyby
windows下有bootsect.exe可以方便的向磁盘中添加ntldr或者bootmgr的引导文件,而Linux下我没有找到类似的工具,所以自己编了一个在此分享一下.
支持向fat16,fat32,ntfs分区添加引导记录,可以引导g2ldr文件,fat16模式虽然可以正确添加引导但是grub2对fat16支持好像不是很好.
工具:
- vbr.zip
- vbr32是32位版
vbr64是64位版 - (8.1 KiB) 已下载 116 次
源码:
- vbr_src.zip
- 启动代码提取自bootsect.exe(不用于商业目的应该不算侵权吧)
- (2.75 KiB) 已下载 112 次
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-13 22:41
由 evnious
好东西,用过bootice 。 试下楼主这个。
不过还是想知道如何手动添加。。。
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-14 8:28
由 badlyby
evnious 写了:好东西,用过bootice 。 试下楼主这个。
不过还是想知道如何手动添加。。。
你可以看看源代码就是向某几个扇区添加几段代码,可以用dd指令实现,不过还需要对分区类型进行判断
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-14 9:22
由 funicorn
linux下怎么没有,mbr这个包就是干这个的
另外,/usr/lib/syslinux/下有一个mbr.bin,就是windows的主引导记录
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-14 9:53
由 careone
烦请楼主贴出使用方法和参数
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-14 10:07
由 badlyby
careone 写了:烦请楼主贴出使用方法和参数
参数只有一个,比如你使用的是64位系统,设备文件是/dev/sdb1就执行指令vbr64 /dev/sdb1
然后把g2ldr放进去
g2ldr 可以通过以下方法获得:
cat /boot/grub/lnxboot.img /boot/grub/core.img > g2ldr
也可以使用grub-mkimage自己定制
用这种方法可以比较方便的制作USB启动盘
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-14 10:11
由 badlyby
funicorn 写了:linux下怎么没有,mbr这个包就是干这个的
另外,/usr/lib/syslinux/下有一个mbr.bin,就是windows的主引导记录
我这个工具是添加卷引导记录VBR也就是单个分区引导的,某些电脑可能除了VBR以外还需要添加MBR。我作的这个工具只是模仿windows下的bootsect工具
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-14 10:23
由 badlyby
再贴一段制作g2ldr定制的shell脚本,给需要的人
代码: 全选
#!/bin/sh
format_set="i386-pc"
rm g2ldr 2> /dev/null
rm core.img 2> /dev/null
rm memdisk.cpio 2> /dev/null
rm ./boot -r 2> /dev/null
mkdir ./boot
mkdir ./boot/grub
mkdir ./boot/grub/locale
cp /usr/lib/grub/$format_set/efiemu.mod ./boot/grub
cp /usr/lib/grub/$format_set/gfxmenu.mod ./boot/grub
cp /usr/lib/grub/$format_set/bitmap.mod ./boot/grub
cp /usr/lib/grub/$format_set/jpeg.mod ./boot/grub
cp /usr/lib/grub/$format_set/tga.mod ./boot/grub
cp /usr/lib/grub/$format_set/png.mod ./boot/grub
cp /usr/lib/grub/$format_set/play.mod ./boot/grub
cp /usr/lib/grub/$format_set/ufs1.mod ./boot/grub
cp /usr/lib/grub/$format_set/ufs2.mod ./boot/grub
cp /usr/lib/grub/$format_set/minix.mod ./boot/grub
cp /usr/lib/grub/$format_set/minix2.mod ./boot/grub
cp /usr/lib/grub/$format_set/terminal.mod ./boot/grub
cp /usr/lib/grub/$format_set/terminfo.mod ./boot/grub
cp /usr/lib/grub/$format_set/usb.mod ./boot/grub
cp /usr/lib/grub/$format_set/usb_keyboard.mod ./boot/grub
cp /usr/lib/grub/$format_set/usbms.mod ./boot/grub
cp /usr/lib/grub/$format_set/ohci.mod ./boot/grub
cp /usr/lib/grub/$format_set/multiboot2.mod ./boot/grub
cp /usr/lib/grub/$format_set/nilfs2.mod ./boot/grub
cp /usr/lib/grub/$format_set/ata.mod ./boot/grub
cp /usr/lib/grub/$format_set/hashsum.mod ./boot/grub
cp /usr/lib/grub/$format_set/xnu_uuid.mod ./boot/grub
cp /usr/lib/grub/$format_set/vbe.mod ./boot/grub
cp /usr/lib/grub/$format_set/vga.mod ./boot/grub
cp /usr/lib/grub/$format_set/video_bochs.mod ./boot/grub
cp /usr/lib/grub/$format_set/video_cirrus.mod ./boot/grub
cp /usr/lib/grub/$format_set/gfxterm.mod ./boot/grub
cp /usr/lib/grub/$format_set/gettext.mod ./boot/grub
cp /usr/lib/grub/$format_set/*.lst ./boot/grub
cp /usr/lib/grub/$format_set/*.o ./boot/grub
cp /usr/lib/syslinux/memdisk ./boot/grub
cp grub.cfg ./boot/grub/
#cp /usr/share/grub/unicode.pf2 ./boot/grub/
cp /boot/grub/locale/* ./boot/grub/locale
find boot | cpio -o -H ustar > memdisk.cpio
grub-mkimage -O $format_set -o core.img --prefix='(memdisk)/boot/grub' -m memdisk.cpio acpi affs afs befs biosdisk blocklist boot bsd btrfs bufio cat chain configfile cpio drivemap echo elf ext2 fat gzio halt help hfs hfsplus iso9660 jfs linux16 linux loadenv loopback ls lvm lzopio memdisk mmap multiboot ntfscomp ntfs ntldr part_acorn part_amiga part_apple part_bsd part_gpt part_msdos part_sun part_sunpc pxe raid reboot reiserfs scsi search_fs_file search_fs_uuid search_label search sfs tar udf xfs xnu xzio zfs gptsync pxecmd
cat /boot/grub/lnxboot.img ./core.img > g2ldr
另附一个我写的配置文件:grub.cfg写好后跟shell脚本放在同一目录下
代码: 全选
function load_video {
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
}
function chroot {
prefix=(${root})/boot/grub/
}
set timeout=5
search --no-floppy -f --set=fontdev /boot/grub/unicode.pf2
if loadfont ($fontdev)/boot/grub/unicode.pf2 ; then
set gfxmode=auto
load_video
insmod gfxterm
set locale_dir=(memdisk)/boot/grub/locale
set lang=zh_CN
insmod gettext
terminal_output gfxterm
fi
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
if background_color 44,0,30; then
clear
fi
insmod reboot
search --no-floppy -f --set=root /boot/grub/wzlboot.cfg
source /boot/grub/wzlboot.cfg
"/boot/grub/wzlboot.cfg"替换成你想用来存放grub菜单的文件路径
- g2ldr.zip
- 写好的文件和现成的g2ldr
- (364.18 KiB) 已下载 106 次
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-14 10:44
由 badlyby
再加一个引导菜单的配置文件,全套的
/boot/grub/wzlboot.cfg:
代码: 全选
menuentry '微型Linux TinyCore'{
search --no-floppy --file --set=root /boot/iso/TinyCore.iso
set isofile="/boot/iso/TinyCore.iso"
loopback loop /boot/iso/TinyCore.iso
linux (loop)/boot/vmlinuz iso-scan/filename=/boot/iso/TinyCore.iso quiet cde
initrd (loop)/boot/core.gz
}
menuentry "运行 Ubuntu Linux" {
search --no-floppy --file --set=root /boot/iso/ubuntu.iso
loopback loop /boot/iso/ubuntu.iso
linux (loop)/casper/vmlinuz iso-scan/filename=/boot/iso/ubuntu.iso file=(loop)/cdrom/preseed/ubuntu.seed noapic nomodeset boot=casper locale=zh_CN.UTF-8 quiet splash --
initrd (loop)/casper/initrd.lz
}
menuentry "安装 Ubuntu Linux" {
search --no-floppy --file --set=root /boot/iso/ubuntu.iso
loopback loop /boot/iso/ubuntu.iso
linux (loop)/casper/vmlinuz iso-scan/filename=/boot/iso/ubuntu.iso file=(loop)/cdrom/preseed/ubuntu.seed noapic nomodeset boot=casper locale=zh_CN.UTF-8 only-ubiquity quiet splash --
initrd (loop)/casper/initrd.lz
}
menuentry "检查Linux安装盘的完整性" {
search --no-floppy --file --set=root /boot/iso/ubuntu.iso
loopback loop /boot/iso/ubuntu.iso
linux (loop)/casper/vmlinuz noapic boot=casper integrity-check locale=zh_CN.UTF-8 quiet splash --
initrd (loop)/casper/initrd.lz
}
menuentry '启动 Windows UEFI'{
search --no-floppy --file --set=root /efi/microsoft/boot/bootmgfw.efi
chainloader /efi/microsoft/boot/bootmgfw.efi
}
menuentry '安装 Windows7 UEFI(需要bootmgfw.efi)'{
search --no-floppy --file --set=root /sources/install.wim
chainloader /bootmgfw.efi
}
menuentry '安装 Windows8 UEFI'{
search --no-floppy --file --set=root /sources/install.wim
chainloader /efi/boot/bootx64.efi
}
menuentry '安装 Windows BIOS'{
insmod ntldr
ntldr /bootmgr
}
menuentry 'DiskGen磁盘分区工具'{
insmod linux16
linux16 ${prefix}/memdisk raw
initrd16 /boot/img/diskgen.img
}
menuentry 'Win98DOS'{
insmod linux16
linux16 ${prefix}/memdisk raw
initrd16 /boot/img/win98.img
}
把/usr/share/grub/unicode.pf2复制到启动盘的/boot/grub目录下可以支持中文显示
下载TinyCore的iso镜像放在/boot/iso/下改名TinyCore.iso可以用来引导TinyCore
下载ubuntu的live cd放在/boot/iso/下改名ubuntu.iso可以用来引导ubuntu live cd
把windows 7的光盘内容复制到启动盘的根目录可以用来引导windows7安装
这样一个可以安装ubuntu和windows7的混合引导盘就做好了(最近在研究grub-efi其中部分代码是UEFI模式的)
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2012-08-14 10:57
由 youzhiyili
先顶后看

Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2013-05-05 1:27
由 niumao

正需要这个呢。真大牛。
Re: 向磁盘分区中添加g2ldr引导记录的工具,附源码
发表于 : 2013-05-05 1:46
由 niumao

正需要这个呢。真大牛。