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] = '\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. > 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) >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel