王朝网络
分享
 
 
 

在 Grub 中增加一个显示举例的命令

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

在 Grub 中增加一个显示举例的命令

lu_yi_ming(at)sina.com 2004.5.30

最近用 Grub 的时候比较多,感觉到命令行的帮助信息太少,使用的时候又不能像操作系统启动后可以打开详细的文档边看边操作,很不方便,于是就找来源代码,增加了一个命令“example [1|2|3]”,分别显示启动 Linux、FreeBSD、Windows 的命令行代码例子。

我的操作环境:Redhat Linux 8.0,Grub 0.92

步骤:

1. 去 http://www.gnu.org/software/grub/grub.en.html 下载源代码。

2. 修改 stage2/builtins.c,在最后的

struct builtin *builtin_table[] =

之前增加以下代码:

/* example */

static int

example_func (char *arg, int flags)

{

char *example_info_1 = ""

"Boot Linux\n"

"--------------------------------------------------------------\n"

" 1. Set GRUB's root device to the same drive as GNU/Linux's. Probably\n"

" the command `find /boot/vmlinuz' , 'root (hd0,5) or similar can \n"

" help you.\n"

" 2. Load the kernel:\n"

" grub> kernel /vmlinuz root=/dev/hda1\n"

" If you need to specify some kernel parameters, just append them to\n"

" the command. For example, to set `vga' to `ext', do this:\n"

" grub> kernel /vmlinuz root=/dev/hda1 vga=ext\n"

" See the documentation in the Linux source tree for complete\n"

" information on the available options.\n"

" 3. If you use an initrd, execute the command `initrd' after `kernel':\n"

" grub> initrd /initrd\n"

" 4. Finally, run the command `boot'.\n"

"----------------------------------------------\n"

" Boot my Linux 2.4.18-14\n"

" root (hd0,10)\n"

" kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ hdd=ide-scsi\n"

" initrd /boot/initrd-2.4.18-14.img\n"

" boot";

char *example_info_2 = ""

"Boot FreeBSD\n"

"--------------------------------------------------------------\n"

"GRUB can load the kernel directly, either in ELF or a.out format. But\n"

"this is not recommended, since FreeBSD's bootstrap interface sometimes\n"

"changes heavily, so GRUB can't guarantee to pass kernel parameters\n"

"correctly.\n"

" Thus, we'd recommend loading the very flexible loader `/boot/loader'\n"

"instead. See this example:\n"

" grub> root (hd0,a)\n"

" grub> kernel /boot/loader\n"

" grub> boot";

char *example_info_3 = ""

"Load another boot loader to boot unsupported operating systems\n"

"--------------------------------------------------------------\n"

"If you want to boot an unsupported operating system (e.g. Windows 95),\n"

"hain-load a boot loader for the operating system. Normally, the boot\n"

"loader is embedded in the \"boot sector\" of the partition on which the\n"

"operating system is installed.\n"

" 1. Set GRUB's root device to the partition by the command\n"

" `rootnoverify'\n"

" grub> rootnoverify (hd0,0)\n"

" 2. Set the \"active\" flag in the partition using the command\n"

" `makeactive'(1)\n"

" grub> makeactive\n"

" 3. Load the boot loader with the command `chainloader' \n"

" grub> chainloader +1\n"

" `+1' indicates that GRUB should read one sector from the start of\n"

" the partition. \n"

" 4. Run the command `boot'.";

switch (arg[0])

{

case '1':

grub_printf (example_info_1);

break;

case '2':

grub_printf (example_info_2);

break;

case '3':

grub_printf (example_info_3);

break;

default:

grub_printf ("example [1|2|3] \n\n"

" exmple 1 : boot Linux\n"

" exmple 2 : boot FreeBSD\n"

" exmple 3 : boot Windows");

}

return 0;

}

static struct builtin builtin_example =

{

"example",

example_func,

BUILTIN_CMDLINE | BUILTIN_HELP_LIST,

"example [1|2|3]",

"Show examles , page 1|2|3"

};

3. 继续修改 stage2/builtins.c,在最后的

struct builtin *builtin_table[] =

中增加 example 的定义

struct builtin *builtin_table[] =

{

&builtin_blocklist,

...

&builtin_embed,

&builtin_example,

&builtin_fallback,

...

&builtin_vbeprobe,

0

};

4. 编译、安装,不用详细说了

./configure

make

make install

5. 测试一下,在命令行中输入 grub,然后按 Tab 键看看有没有 example,如果有,说明代码编写成功,可以继续输入 example 1 看看是否是启动 Linux 的举例。

6. 将修改后的 Grub 安装到硬盘主引导记录等地方,以便真正起效。

grub-install /dev/hda

7. 重新启动计算机,可以发现原来 Redhat 漂亮的 Grub 彩色界面没有了,变成了黑乎乎的界面。这算是一点损失吧。按 c 进入 Grub 的命令行界面...

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有