这个系列的技术文章很久没有更新了. 原因是遗忘了现在继续补上. 查看以前的请点击这里.这次是实战 Grub2. 从无到有的开始. 为什么是 Grub2 而不是 Grub4dos。因为 Grub2 支持 EFI,Grub4dos 不支持。而且 Grub2 还支持 png 和 tga 图片作为启动背景图。
编译 Grub 2
这里用编译环境是 Ubuntu 11.04. 也可以在虚拟机里面编译. 先下载 Grub2 的源码包, 地址是:
写这个文章的时候最新版本是 grub-1.98. 虽然里面有个1.99的包,但为了稳定 1.99的就暂时不用了,等1.99的 rc 去掉都。
或者是通过 SVN 获得
svn co http://svn.savannah.gnu.org/svn/grub/trunk/grub
或
bzr branch http://bzr.savannah.gnu.org/r/grub/trunk/grub
好了,现在开始编译,请先启动 Ubuntu。如果是装在虚拟机里面的那就打开 Ubuntu 的虚拟机。
先打开 Ubuntu 的终端, 也就是那个类似与 Windows 里面的那个 CMD 命令行.
运行下面命令添加编译 Grub 2 需要的支持库:
$ sudo apt-get install gcc gcc-multilib bison autoconf automake make ruby gettext bzr binutils ruby
接着在自己的用户目录里面建立一个用于存放编译后的文件的文件夹. 这样方便管理编译后的文件. 比如:~/grub2 和~/grub2_efi.
解压下载 了的 grub-1.98. 1.99.tar.gz 到自己的用户目录里面。比如: ~/grub2-198
先输入命令建立一个临时的文件夹用来存放编译时候产生的文件,这样就不会把这些文件和源代码放在一起了。
$ mkdir build
开始配置编译参数
$ cd build
$ ../configure --prefix=${HOME}/grub2
如果你想编译 EFI 版本 32 位的Grub 那么配置命令就用下面这个:
$ ../configure --prefix=${HOME}/grub2_efi --with-platform=efi
编译 EFI 版本 64 位的要先执行 autogen.sh 这个脚本,然后再去配置:
$ ./autogen.sh
$ cd build
$ ../configure --prefix=${HOME}/grub2_efi --with-platform=efi –enable-grub-mkfont
还可以这样关闭一些编译的选项比如这样:
$ ../configure --with-platform=efi --enable-grub-fstest=no --enable-grub-mkfont=no --disable-nls --enable-efiemu=no
等命令执行完毕后敲入开始编译命令
$ make
不过编译的时间有点长,要慢慢的等待,期间你可以去喝杯茶。
等编译完成后运行命令:
$ make install
好了,你自己定义的 Grub2 就乖乖的躺在你配置的时候指定的目录里面了。不过这个目录是按照 Grub 安装是的路径进行存放的。
到这步编译过程就结束了。
生成 Grub2 启动文件
编译好了就要生产一个可以启动的文件了。其实就是把 Grub 的核心和 Grub 的模块打包在一起了。
PC 和 EFI 版本的创建启动文件的命令都是 grub-mkimage 格式为:
$ grub-mkimage -d . -o [启动文件名] [模块]
也可以通过添加 -p 来制定 grub 配置文件和模块的位置,如:
$ grub-mkimage -d . -p /EFI/grub -o [启动文件名] [模块]
更多的命令敲入 grub-mkimage --help 就可以查看到参数了。
现在开始打包启动文件,命令如下:
$ ./grub-mkimage -d . -o gr2ldr boot linux part_gpt fat ext2 normal sh configfile lspci ls reboot datetime loadenv search help quit
EFI 版本的命令为:
$ ./grub-mkimage -d . -o grub.efi boot linux part_gpt fat ext2 normal sh configfile lspci ls reboot datetime loadenv search help quit
这样就创建了一个 带有自己定义模块的 efi 启动文件了。
对于模块都是推荐 添加一些分区支持和基本命令的模块。如果没有加载到那也可以在 grub2 的配置文件里面加载的。也可以把这命令带有的模块作为基本模块进行扩充。当然你也可以把所有模块一起打包进去。
Grub 2 的模块介绍在这里:http://bbs.znpc.net/viewthread.php?tid=4933
下一篇讲 Grub 2 配置好了。

2012-07-14 23:28 Evan says:
“下一篇讲 Grub 2 配置好了” 请问下一篇什么时候放出来啊
2011-07-04 07:36 Azaria says:
sudo apt-get install gcc gcc-multilib bison autoconf automake autogen make ruby gettext bzr binutils ruby qemu unifont
2011-06-13 22:58 张博 says:
😀 学习了~~
2011-06-03 10:56 elaphent says:
还真是技术活儿,咱还是用现成的吧