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? > > 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