* grub-core/loader/arm/linux.c: Pass arguments through on ATAG
platforms.
This commit is contained in:
parent
3deedfc033
commit
37f617c025
2 changed files with 26 additions and 6 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2013-12-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/loader/arm/linux.c: Pass arguments through on ATAG
|
||||||
|
platforms.
|
||||||
|
|
||||||
2013-12-22 Lars Wendler <polynomial-c@gentoo.org>
|
2013-12-22 Lars Wendler <polynomial-c@gentoo.org>
|
||||||
|
|
||||||
* util/grub-mkconfig.in: Skip non-executable files.
|
* util/grub-mkconfig.in: Skip non-executable files.
|
||||||
|
|
|
@ -74,6 +74,8 @@ linux_prepare_atag (void)
|
||||||
grub_uint32_t *tmp_atag, *from, *to;
|
grub_uint32_t *tmp_atag, *from, *to;
|
||||||
grub_size_t tmp_size;
|
grub_size_t tmp_size;
|
||||||
grub_size_t arg_size = grub_strlen (linux_args);
|
grub_size_t arg_size = grub_strlen (linux_args);
|
||||||
|
char *cmdline_orig = NULL;
|
||||||
|
grub_size_t cmdline_orig_len = 0;
|
||||||
|
|
||||||
/* some place for cmdline, initrd and terminator. */
|
/* some place for cmdline, initrd and terminator. */
|
||||||
tmp_size = get_atag_size (atag_orig) + 20 + (arg_size) / 4;
|
tmp_size = get_atag_size (atag_orig) + 20 + (arg_size) / 4;
|
||||||
|
@ -88,7 +90,13 @@ linux_prepare_atag (void)
|
||||||
case 0x54410004:
|
case 0x54410004:
|
||||||
case 0x54410005:
|
case 0x54410005:
|
||||||
case 0x54420005:
|
case 0x54420005:
|
||||||
case 0x54420009:
|
break;
|
||||||
|
case 0x54410009:
|
||||||
|
if (*(char *) (from + 2))
|
||||||
|
{
|
||||||
|
cmdline_orig = (char *) (from + 2);
|
||||||
|
cmdline_orig_len = grub_strlen (cmdline_orig) + 1;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
grub_memcpy (to, from, sizeof (grub_uint32_t) * from[0]);
|
grub_memcpy (to, from, sizeof (grub_uint32_t) * from[0]);
|
||||||
|
@ -96,15 +104,22 @@ linux_prepare_atag (void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_dprintf ("linux", "linux inherited args: '%s'\n",
|
||||||
|
cmdline_orig ? : "");
|
||||||
grub_dprintf ("linux", "linux_args: '%s'\n", linux_args);
|
grub_dprintf ("linux", "linux_args: '%s'\n", linux_args);
|
||||||
|
|
||||||
/* Generate and set command line */
|
/* Generate and set command line */
|
||||||
to[0] = 3 + arg_size / 4;
|
to[0] = 3 + (arg_size + cmdline_orig_len) / 4;
|
||||||
to[1] = 0x54410009;
|
to[1] = 0x54410009;
|
||||||
grub_memcpy (to + 2, linux_args, arg_size);
|
if (cmdline_orig)
|
||||||
grub_memset ((char *) to + 8 + arg_size, 0,
|
{
|
||||||
4 - (arg_size & 3));
|
grub_memcpy ((char *) to + 8, cmdline_orig, cmdline_orig_len - 1);
|
||||||
to += 3 + arg_size / 4;
|
*((char *) to + 8 + cmdline_orig_len - 1) = ' ';
|
||||||
|
}
|
||||||
|
grub_memcpy ((char *) to + 8 + cmdline_orig_len, linux_args, arg_size);
|
||||||
|
grub_memset ((char *) to + 8 + cmdline_orig_len + arg_size, 0,
|
||||||
|
4 - ((arg_size + cmdline_orig_len) & 3));
|
||||||
|
to += to[0];
|
||||||
|
|
||||||
if (initrd_start && initrd_end)
|
if (initrd_start && initrd_end)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue