On 25.11.2013 23:28, SevenBits wrote: > > On 11/25/2013 05:07 PM, Vladimir '?-coder/phcoder' Serbinenko wrote: >> On 25.11.2013 23:03, SevenBits wrote: >>> >>> Thanks for your quick reply. >>> >>> I just have a couple of questions. How do you prefer I allow the user to >>> specify the vendor UUID? By typing it in via the keyboard? And secondly, >>> by saying it needs "readable aliases for known types" do you mean that >>> there should be a function to set an integer, one to set a boolean, etc? >>> >> I meant for UUIDs. E.g. one alias "efi" for shared space, "apple" for >> apple and so on. > So other than a generic variable UUID and Apple, are there others that > you think might be necessary? I can try and put in some common ones but > manufacturers may not disclose what their specific UUIDs are. > I'd include a command to list variables (interactively). We would pretty quickly collect most common UUIDs this way. >> But type of variable is also an issue and there should be at least >> following available: >> hex - transform all in hex >> utf16 - decode utf16 into utf8 >> Probably more, didn't really look into issue > I see, okay, I'll add some in. > >>> Regarding the patch format, I'll tidy that up and send a proper one. >>> >>> -- SevenBits >>> >>> On 11/25/2013 04:41 PM, Vladimir 'phcoder' Serbinenko wrote: >>>> please resend as proper and not as reverse patch. Anotjer issie that > can be >>>> seen from description alone is that you don't allow to specify vendor >>> uuid. >>>> it would be needed and slso it needs readable aliases for known types >>>> On Nov 25, 2013 10:35 PM, "SevenBits" <sevenbitst...@gmail.com> wrote: >>> >>>>> Hello everyone, >>>>> >>>>> This patch adds two GRUB two commands to allow the user to get and set >>>>> the values of (U)EFI firmware variables. When dealing with (U)EFI >>>>> firmware with GRUB I decided this would be a useful tool to have for >>>>> both developers and end-users. >>>>> >>>>> The first command, setefivariable, takes two parameters: the name > of the >>>>> variable to set and its value. The second, getefivariable, also takes >>>>> two parameters: the name of the variable to retrieve and the name > of the >>>>> GRUB environment variable in which you want to store the result. This >>>>> can then be checked using GRUB's built in 'if' statement and scripting >>>>> capability to allow unique booting capabilities based on whether, for >>>>> example, secure boot is enabled or the (U)EFI firmware is in setup > mode. >>>>> >>>>> Have a look and let me know what you think! The patch follows. >>>>> >>>>> -- SevenBits >>>>> >>>>> diff --git a/grub/grub-core/Makefile.core.def >>>>> b/grub-orig/grub-core/Makefile.core.def >>>>> index 177d6d6..5cd84b1 100644 >>>>> --- a/grub/grub-core/Makefile.core.def >>>>> +++ b/grub-orig/grub-core/Makefile.core.def >>>>> @@ -1004,13 +1004,6 @@ module = { >>>>> }; >>>>> >>>>> module = { >>>>> - name = setvariable; >>>>> - common = commands/efi/setvariable.c; >>>>> - enable = i386_efi; >>>>> - enable = x86_64_efi; >>>>> -}; >>>>> - >>>>> -module = { >>>>> name = pcidump; >>>>> common = commands/pcidump.c; >>>>> enable = pci; >>>>> diff --git a/grub/grub-core/commands/efi/setvariable.c >>>>> b/grub/grub-core/commands/efi/setvariable.c >>>>> deleted file mode 100644 >>>>> index b0d0967..0000000 >>>>> --- a/grub/grub-core/commands/efi/setvariable.c >>>>> +++ /dev/null >>>>> @@ -1,96 +0,0 @@ >>>>> -/* setvariable.c - get and set efi firmware variables */ >>>>> -/* >>>>> - * GRUB -- GRand Unified Bootloader >>>>> - * Copyright (C) 2013 Free Software Foundation, Inc. >>>>> - * >>>>> - * GRUB is free software: you can redistribute it and/or modify >>>>> - * it under the terms of the GNU General Public License as > published by >>>>> - * the Free Software Foundation, either version 3 of the License, or >>>>> - * (at your option) any later version. >>>>> - * >>>>> - * GRUB is distributed in the hope that it will be useful, >>>>> - * but WITHOUT ANY WARRANTY; without even the implied warranty of >>>>> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >>>>> - * GNU General Public License for more details. >>>>> - * >>>>> - * You should have received a copy of the GNU General Public License >>>>> - * along with GRUB. If not, see <http://www.gnu.org/licenses/>. >>>>> - */ >>>>> - >>>>> -#include <grub/env.h> >>>>> -#include <grub/dl.h> >>>>> -#include <grub/misc.h> >>>>> -#include <grub/file.h> >>>>> -#include <grub/efi/efi.h> >>>>> -#include <grub/pci.h> >>>>> -#include <grub/command.h> >>>>> -#include <grub/i18n.h> >>>>> - >>>>> -GRUB_MOD_LICENSE ("GPLv3+"); >>>>> - >>>>> -static grub_err_t >>>>> -grub_cmd_setefivariable (grub_command_t cmd __attribute__ ((unused)), >>>>> - int argc, char *argv[]) >>>>> -{ >>>>> - grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; >>>>> - if (argc == 0) >>>>> - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable > name >>>>> expected")); >>>>> - else if (argc == 1) >>>>> - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable > name >>>>> value expected")); >>>>> - >>>>> - grub_err_t status; >>>>> - grub_size_t arg_size = (grub_strlen(argv[1]) + 1) * sizeof(char); >>>>> - >>>>> - status = grub_efi_set_variable (argv[0], &global, argv[1], >>> arg_size); >>>>> - if (status != GRUB_ERR_NONE) >>>>> - { >>>>> - grub_printf ("couldn't set efi variable"); >>>>> - return status; >>>>> - } >>>>> - return 0; >>>>> -} >>>>> - >>>>> -static grub_err_t >>>>> -grub_cmd_getefivariable (grub_command_t cmd __attribute__ ((unused)), >>>>> - int argc, char *argv[]) >>>>> -{ >>>>> - grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; >>>>> - if (argc == 0) >>>>> - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable > name >>>>> expected")); >>>>> - else if (argc == 1) >>>>> - return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("efi variable > name >>>>> value expected")); >>>>> - >>>>> - grub_size_t var_size; >>>>> - grub_err_t status; >>>>> - char *value = (char*)grub_efi_get_variable (argv[0], &global, >>>>> &var_size); >>>>> - status = grub_env_set (argv[1], value); >>>>> - if (status != GRUB_ERR_NONE) >>>>> - { >>>>> - grub_printf ("couldn't set environment variable"); >>>>> - return status; >>>>> - } >>>>> - return 0; >>>>> -} >>>>> - >>>>> -static grub_command_t cmd_setefivariable, cmd_getefivariable; >>>>> - >>>>> -GRUB_MOD_INIT(loadbios) >>>>> -{ >>>>> - cmd_setefivariable = grub_register_command ("setefivariable", >>>>> grub_cmd_setefivariable, >>>>> - N_("NAME VALUE"), >>>>> - N_("Set an EFI firmware variable " >>>>> - "which can be stored and retrieved " >>>>> - "from between sessions.")); >>>>> - >>>>> - cmd_getefivariable = grub_register_command ("getefivariable", >>>>> grub_cmd_getefivariable, >>>>> - N_("NAME ENV_VARIABLE"), >>>>> - N_("Gets an EFI firmware variable " >>>>> - "and stores it as a GRUB environment " >>>>> - "variable named ENV_VARIABLE.")); >>>>> -} >>>>> - >>>>> -GRUB_MOD_FINI(loadbios) >>>>> -{ >>>>> - grub_unregister_command (cmd_setefivariable); >>>>> - grub_unregister_command (cmd_getefivariable); >>>>> -} >>>>> >>>>> _______________________________________________ >>>>> Grub-devel mailing list >>>>> Grub-devel@gnu.org >>>>> https://lists.gnu.org/mailman/listinfo/grub-devel >>>>> >>> >>> >>> >>>> _______________________________________________ >>>> Grub-devel mailing list >>>> Grub-devel@gnu.org >>>> https://lists.gnu.org/mailman/listinfo/grub-devel >>> >>> >>> >>> >>> _______________________________________________ >>> Grub-devel mailing list >>> Grub-devel@gnu.org >>> https://lists.gnu.org/mailman/listinfo/grub-devel >>> > > > > >> _______________________________________________ >> Grub-devel mailing list >> Grub-devel@gnu.org >> https://lists.gnu.org/mailman/listinfo/grub-devel > > > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel