grub2中命令的执行

    xiaoxiao2021-03-26  19

    在grub中有两种方式在grub的源码中执行grub支持的命令 一种是不带参数的,可以用grub_command_execute 来执行 例如常见的normal/linux/boot 命令就是这样执行的。   grub_command_execute ("normal", 0, 0); 还有一种带参数的.例如:smbios --type 0 --get-string 5 这种命令一般放在grub.cfg中执行就行,如果一定要在code中执。可以采用下面的方式 char ×str ="smbios --type 0 --get-string 5"; grub_script_execute_sourcecode (str); 这样做其实就是参考eval命令的实现 cmd = grub_register_command ("eval", grub_cmd_eval, N_("STRING ..."),                 N_("Evaluate arguments as GRUB commands")); 可以看到eval的回调函数是grub_cmd_eval static grub_err_t grub_cmd_eval (grub_command_t cmd __attribute__((__unused__)),            int argc, char *argv[]) {   int i;   grub_size_t size = argc; /* +1 for final zero */   char *str, *p;   grub_err_t ret;   if (argc == 0)     return GRUB_ERR_NONE;   for (i = 0; i < argc; i++)     size += grub_strlen (argv[i]);   str = p = grub_malloc (size);   if (!str)     return grub_errno;   for (i = 0; i < argc; i++)     {       p = grub_stpcpy (p, argv[i]);       *p++ = ' ';     }   *--p = '\0';   ret = grub_script_execute_sourcecode (str);   grub_free (str);   return ret; } 这个函数很简单,就是将str中的命令或者参数取出来加上空格,然后调用grub_script_execute_sourcecode 来执行.但是grub_script_execute_sourcecode的实现很复杂。
    转载请注明原文地址: https://ju.6miu.com/read-658583.html

    最新回复(0)