[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Add support for running a 64-bit Linux kernel on a 32-bit EF
From: |
Steve McIntyre |
Subject: |
Re: [PATCH] Add support for running a 64-bit Linux kernel on a 32-bit EFI |
Date: |
Wed, 28 Jan 2015 23:42:14 +0000 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Wed, Jan 28, 2015 at 06:42:01AM +0300, Andrei Borzenkov wrote:
>В Wed, 28 Jan 2015 00:56:30 +0000
>Steve McIntyre <address@hidden> пишет:
>
>>
>> =====================================================================
>> Some platforms might be capable of running a 64-bit Linux kernel but
>> only use a 32-bit EFI. To support such systems, it is necessary to
>> work out the size of the firmware rather than just the size of the
>> kernel. To enable that, there is now an extra EFI sysfs file to
>> describe the underlying firmware. Read that if possible, otherwise
>> fall back to the kernel type as before.
>>
>> Signed-off-by: Steve McIntyre <address@hidden>
>> ---
>> grub-core/osdep/linux/platform.c | 38
>> +++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 37 insertions(+), 1 deletion(-)
>>
>> diff --git a/grub-core/osdep/linux/platform.c
>> b/grub-core/osdep/linux/platform.c
>> index 4b9f6ef..5668ae5 100644
>> --- a/grub-core/osdep/linux/platform.c
>> +++ b/grub-core/osdep/linux/platform.c
>> @@ -60,6 +60,42 @@ is_64_kernel (void)
>> return strcmp (un.machine, "x86_64") == 0;
>> }
>>
>> +static int
>> +read_platform_size (void)
>> +{
>> + FILE *fp;
>> + char *buf = NULL;
>> + size_t len = 0;
>> + int ret = 0;
>> +
>> + /* Newer kernels can tell us directly about the size of the
>> + * underlying firmware - let's see if that interface is there. */
>> + fp = grub_util_fopen ("/sys/firmware/efi/fw_platform_size", "r");
>> + if (fp != NULL)
>> + {
>> + if (getline (&buf, &len, fp) > 0)
>
>size >= 2
Yup.
>> + {
>> + if (strncmp (buf, "32", 2) == 0)
>> + ret = 32;
>> + else if (strncmp (buf, "64", 2) == 0)
>> + ret = 64;
>> + }
>> + free (buf);
>> + fclose (fp);
>> + }
>> +
>> + if (ret == 0)
>> + /* Unrecognised - fall back to matching the kernel size instead */
>> + {
>
>I usually prefer comments inside braces and indented accordingly.
OK, cool.
>Could you send it suitable for git am? Mentioning platforms in commit
>message would be useful for reference. BTW, re subject - this is
>about installing 32 bit EFI grub on 64 bit Linux, not running, right?
>It already should be able to run kernel if installed appropriately
>manually.
Correct, yes.
v2 coming shortly.
--
Steve McIntyre, Cambridge, UK. address@hidden
Welcome my son, welcome to the machine.