【GRUB】增加自定义命令

代码上的直观理解

首先GRUB2的源代码来自grub-2.02: GRUB2源代码,来自ftp://ftp.gnu.org/gnu/grub/,版本是grub-2.02.tar.gz。

关于如何编译和使用可以参考GRUB2编译与使用 

于是我们就能够进入到GRUB界面了:

从上图还可以看到使用了hello这条命令。

查看代码,发现确实是有一个hello.c的文件,其实现如下:

GRUB_MOD_LICENSE ("GPLv3+");

static grub_err_t
grub_cmd_hello (grub_extcmd_context_t ctxt __attribute__ ((unused)),
		int argc __attribute__ ((unused)),
		char **args __attribute__ ((unused)))
{
  grub_printf ("%s\n", _("Hello World"));
  return 0;
}

static grub_extcmd_t cmd;

GRUB_MOD_INIT(hello)
{
  cmd = grub_register_extcmd ("hello", grub_cmd_hello, 0, 0,
			      N_("Say `Hello World'."), 0);
}

GRUB_MOD_FINI(hello)
{
  grub_unregister_extcmd (cmd);
}

从上述的代码,很容易看出来GRUB下的命令是如何实现的,即使用grub_register_extcmd()来注册其实现。

基本上关于命令的实现就这么简单。

然而......

问题出现

为了进一步验证hello命令就是上述的代码引入的,这里修改了打印信息:

static grub_err_t
grub_cmd_hello (grub_extcmd_context_t ctxt __attribute__ ((unused)),
		int argc __attribute__ ((unused)),
		char **args __attribute__ ((unused)))
{
  grub_printf ("%s\n", _("Goodbye World"));
  return 0;
}

修改完之后重新编译,可以看到编译的打印中hello.c确实是被重新编译了。

但是却发现结果还是打印Hello World,而不是这里修改的Goodbye World。

比较两次生成的二进制:

发现除了一个类似时间戳的东西发生了变化,没有其它的变化,也就是说上述修改的字符串根本就没有生效。

由于不是很懂Linux下的编译,所以目前没有看出问题的原因。

需要好好查下......

更新:在【GRUB】GRUB2编译与使用已经说明了原因。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值