> On Feb 14, 2016, at 5:26 AM, Vladimir 'phcoder' Serbinenko 
> <phco...@gmail.com> wrote:
> 
> 
> 
> Le dim. 14 févr. 2016 14:21, Shea Levy <s...@shealevy.com> a écrit :
>> This patch uses grub_file_open, but the android bootimg is a disk, not
>> a file. You mentioned something about file_offset_open, but that also
>> expects an input file, not a disk. Should I modify your patch with my
>> code I wrote to create a grub_file_t from an android_bootimg disk
>> device, or is there another approach?
> 
> We already have syntax (hd0,1)+<number of sectors> that we use for i.a. 
> chainloader perhaps we should extend it to have (hd0,1)+ meaning whole disk 
> as file? Or even allow the disk to be opened with GRUB_file_open? I'd like a 
> second opinion on this. Andrei, what do you think?

  I think syntax that allows a whole disk to be specified (e.g. To the 
multiboot module command so a disk image can be passed that way) is a great 
idea.

  --S


>> 
>> On 2016-02-12 16:16, Vladimir 'φ-coder/phcoder' Serbinenko wrote:
>> > On 12.02.2016 20:34, Shea Levy wrote:
>> >> OK. Do you have any thoughts on how best to extract the "load the
>> >> kernel
>> >> and set the command line to a specific string" functionality out of
>> >> the
>> >> linux command, then?
>> >>
>> > At first I wanted to write a short skeleton patch to show what I
>> > meant
>> > but once skeleton is done, there is little actual code involved.
>> > Please
>> > try attached patch
>> >> On 2016-02-12 14:22, Vladimir 'phcoder' Serbinenko wrote:
>> >>> Separate command is better as it keeps interface tidy and
>> >>> unpoluted,
>> >>> decreasing maintenance cost. Correct me if I'm wrong but it should
>> >>> be
>> >>> clear from context of file is Android image or usual linux one?
>> >>>
>> >>> Le ven. 12 févr. 2016 20:19, Shea Levy <s...@shealevy.com> a écrit
>> >>> :
>> >>>
>> >>>> On 2016-02-12 12:50, Vladimir 'φ-coder/phcoder' Serbinenko wrote:
>> >>>> > On 08.02.2016 21:47, Shea Levy wrote:
>> >>>> >> ---
>> >>>> >>  grub-core/loader/i386/linux.c | 27 +++++++++++++++++++++------
>> >>>> >>  1 file changed, 21 insertions(+), 6 deletions(-)
>> >>>> >>
>> >>>> >> diff --git a/grub-core/loader/i386/linux.c
>> >>>> >> b/grub-core/loader/i386/linux.c
>> >>>> >> index fddcc46..6ab8d3c 100644
>> >>>> >> --- a/grub-core/loader/i386/linux.c
>> >>>> >> +++ b/grub-core/loader/i386/linux.c
>> >>>> >> @@ -35,6 +35,7 @@
>> >>>> >>  #include <grub/i18n.h>
>> >>>> >>  #include <grub/lib/cmdline.h>
>> >>>> >>  #include <grub/linux.h>
>> >>>> >> +#include <grub/android_bootimg.h>
>> >>>> >>
>> >>>> >>  GRUB_MOD_LICENSE ("GPLv3+");
>> >>>> >>
>> >>>> >> @@ -695,7 +696,13 @@ grub_cmd_linux (grub_command_t cmd
>> >>>> >> __attribute__ ((unused)),
>> >>>> >>        goto fail;
>> >>>> >>      }
>> >>>> >>
>> >>>> >> -  file = grub_file_open (argv[0]);
>> >>>> >> +  char android_cmdline[BOOT_ARGS_SIZE];
>> >>>> >> +  android_cmdline[0] = '';
>> >>>> >> +  if (grub_memcmp (argv[0], "android_bootimg:", sizeof
>> >>>> >> "android_bootimg:" - 1) == 0)
>> >>>> >> +    grub_android_bootimg_load_kernel (argv[0] + sizeof
>> >>>> >> "android_bootimg:" - 1,
>> >>>> >> +                                      &file, android_cmdline);
>> >>>> >> +  else
>> >>>> >> +      file = grub_file_open (argv[0]);
>> >>>> > I hoped more for autodetection. This gets a bit hairy and proper
>> >>>> > separation is better. Sorry for confusion. I think it's simpler
>> >>>> with
>> >>>> > commands like
>> >>>> > android_bootimg [--no-cmdline] [--no-initrd] IMAGE
>> >>>> [EXTRA_ARGUMENTS]
>> >>>> > by default it will load both IMAGE, with cmdline and initrd.
>> >>>> With
>> >>>> > --no-initrd you can use initrd for custom initrd.
>> >>>>
>> >>>> Autodetection would be possible actually, I didn't think of that.
>> >>>> If
>> >>>> grub_file_open fails, we can try grub_android_bootimg_load_kernel
>> >>>> on the
>> >>>> same file. Would that be preferable or do we still want a separate
>> >>>> command?
>> >>>>
>> >>>> >
>> >>>> >>    if (! file)
>> >>>> >>      goto fail;
>> >>>> >>
>> >>>> >> @@ -1008,12 +1015,20 @@ grub_cmd_linux (grub_command_t cmd
>> >>>> >> __attribute__ ((unused)),
>> >>>> >>    linux_cmdline = grub_zalloc (maximal_cmdline_size + 1);
>> >>>> >>    if (!linux_cmdline)
>> >>>> >>      goto fail;
>> >>>> >> -  grub_memcpy (linux_cmdline, LINUX_IMAGE, sizeof
>> >>>> (LINUX_IMAGE));
>> >>>> >> +  grub_size_t cmdline_offset = 0;
>> >>>> >> +  if (android_cmdline[0])
>> >>>> >> +    {
>> >>>> >> +      cmdline_offset = grub_strlen (android_cmdline) + 1;
>> >>>> >> +      grub_memcpy (linux_cmdline, android_cmdline,
>> >>>> cmdline_offset -
>> >>>> >> 1);
>> >>>> >> +      linux_cmdline[cmdline_offset - 1] = ' ';
>> >>>> >> +    }
>> >>>> >> +  grub_memcpy (linux_cmdline + cmdline_offset, LINUX_IMAGE,
>> >>>> sizeof
>> >>>> >> (LINUX_IMAGE));
>> >>>> >> +  cmdline_offset += sizeof LINUX_IMAGE - 1;
>> >>>> > LINUX_IMAGE must be at the beginning. don't forget brackets
>> >>>> around
>> >>>> > sizeof.
>> >>>> >>    grub_create_loader_cmdline (argc, argv,
>> >>>> >> -                          linux_cmdline
>> >>>> >> -                          + sizeof (LINUX_IMAGE) - 1,
>> >>>> >> -                          maximal_cmdline_size
>> >>>> >> -                          - (sizeof (LINUX_IMAGE) - 1));
>> >>>> >> +                              linux_cmdline
>> >>>> >> +                              + cmdline_offset,
>> >>>> >> +                              maximal_cmdline_size
>> >>>> >> +                              - cmdline_offset);
>> >>>> >>
>> >>>> >>    len = prot_file_size;
>> >>>> >>    if (grub_file_read (file, prot_mode_mem, len) != len &&
>> >>>> >> !grub_errno)
>> >>>> >>
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> > _______________________________________________
>> >>>> > Grub-devel mailing list
>> >>>> > Grub-devel@gnu.org
>> >>>> > https://lists.gnu.org/mailman/listinfo/grub-devel [1]
>> >>>>
>> >>>> _______________________________________________
>> >>>> Grub-devel mailing list
>> >>>> Grub-devel@gnu.org
>> >>>> https://lists.gnu.org/mailman/listinfo/grub-devel [1]
>> >>>
>> >>>
>> >>> Links:
>> >>> ------
>> >>> [1] 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
> _______________________________________________
> 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

Reply via email to