GRUB2基础——增加自定义命令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangwei0512/article/details/86586258

代码上的直观理解

首先GRUB2的源代码来自https://gitee.com/jiangwei0512/grub-2.02

关于如何编译和使用可以参考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下的编译,所以目前没有看出问题的原因。

需要好好查下...

猜你喜欢

转载自blog.csdn.net/jiangwei0512/article/details/86586258
今日推荐