Re: Lenovo BIOS boot fix

From: Hans Ottevanger <hans_at_beastielabs.net>
Date: Mon, 13 Jul 2015 09:58:54 +0200
On 07/12/15 20:07, Allan Jude wrote:
> On 2015-07-12 11:10, Andrey V. Elsukov wrote:
>> On 12.07.2015 09:02, Allan Jude wrote:
>>> I forgot to include the link to the patch as well:
>>>
>>> http://www.allanjude.com/bsd/lenovofix_gpart.patch
>>>
>>> I will most likely make this patch optional, behind a flag to the 'gpart
>>> create -s gpt' command, to avoid potentially breaking existing working
>>> systems, but if using offset 1 works on all other hardware, having it as
>>> the default would be nice.
>>>
>>> Another option would be to make a separate standalone program to modify
>>> the pMBR for Lenovo machines, rather than modifying gpart.
>>
>> Hi,
>>
>> I think Lenovo's BIOS just think that your partition layout is MBR and
>> uses legacy boot.
>>
>> if (MBR_partition[0].type == 0xee && gpt_is_ok()) {
>>      UEFI_boot();
>> } else {
>>      MBR_boot();
>> }
>>
>
> I am not sure what they actually do, but, by making it the
> MBR_partition[1].type that is 0xee, FreeBSD is still perfectly happy,
> and the Lenovo boots.
>
> Other non-lenovo machines I tested on also worked.
>
> Tested Platforms (in BIOS/non-UEFI mode):
>
> Lenovo X220
> Lenovo X230 (doesn't have the bug, boots fine with MBR[0].type = 0xee)
> Lenovo T530 (also doesn't have the bug)
> Asus Core2Duo
> Asus i7 Nehalem desktop
> Asus i5 Sandy bridge desktop
> Gigabyte i5 Ivy bridge desktop
> Intel Ivy bridge NUC
> Intel Haswell NUC
> Supermicro i7 Haswell workstation
>
>

Hi Allan,

I did some experiments with the newest memstick image you provided 
(lenovofix_20150712-r285132.img).

On an oldish Q6600 based system using an INTEL DP965LT main-board (it 
only has BIOS mode) I first pulled the SATA connectors before trying to 
boot from the USB stick. It shows the same problem as always with a 
fresh install of FreeBSD 10.x:

No bootable device -- insert boot disk and press any key

This can be fixed by first modifying the image on the USB stick using

gpart recover da0

(the stick is 8Gbyte and the image as copied on it is 1Gbyte, so the GPT 
seems corrupt), followed by the usual

gpart set -a active da0

I think this issue manifests itself on a generation of older Intel and 
Foxconn main-boards and possibly differs from the problem that you try 
to solve with Lenovo hardware.

I also tried the unmodified image on an even older T7200 based system 
having an Asus NL4VM-DH main-board and there it just dumps the registers 
(followed by "BTX Halted") very early in the boot process. This has 
happened before on several occasions with FreeBSD 10.x. The board is 
probably too rare to worry about too much, though it still runs OpenBSD 
5.7 perfectly.


Kind regards,

Hans Ottevanger

Eindhoven, Netherlands
www.beastielabs.net
Received on Mon Jul 13 2015 - 05:58:58 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:58 UTC