help-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Cannot boot from dual bios/uefi boot CD


From: John Frankish
Subject: RE: Cannot boot from dual bios/uefi boot CD
Date: Sat, 28 Feb 2015 11:30:59 +0400

> > [all of this was done with grub built from git as of two days ago]
> > 
> > As you can see above that's what I did, I'm booting from CD into RAM.
> > 
> > --modules="linux part_msdos minicmd ls" works --modules="linux" gives 
> > error part_acorn.mod not found --modules="linux part_dos iso9660" 
> > gives error part_acorn.mod not found
> > 
>
> Now I must ask - what "works" means? I still can boot linux even though I get 
> this error. Yes, it is not pretty, but it works.

"Works" means:

Legacy-bios boots without problems

Uefi boots blind and, since I'm booting to a console prompt, remains blind (I 
know from previous experience if I enter commands blind to run, for example, 
Xfbdev I will eventually get a gui.

In the case of " error part_acorn.mod not found", mkrescue does not build the 
iso.

> The difference between the first and other two is that "ls" depends on and 
> requires "normal" so it is added to image. This
>  "hides" this error (grub-mkrescue always adds commands to load all partition 
> drivers).
>
> > >
> > > This means your grub-mkrescue sees only i386-pc platform. loadbios.mod 
> > > exists in EFI build only.
> > >
> > 
> > I don't think that's the case, I have:
> > 
> > /usr/local/lib/grub/i386-pc/*modules
> > /usr/local/lib/grub/x86_64-efi/*modules
> > 
>
> Yes. But loadbios.mod exists in i386-pc only. When you use module in 
> --modules="..." list, it is added to image for *every*
> platform. As it does not exist for EFI, you get error.
>
> ..and since --modules="linux part_msdos minicmd ls" works for both 
> legacy-bios and uefi boot, grub sees both sets of modules
> 
> > For me, grub-mkrescue should understand that I need certain modules for 
> > uefi only, otherwise how am I going to get
> > an efi-fb display in uefi boot when the same modules don't exist for 
> > legacy-bios?
>
> You seem to misunderstand both the intended usage of grub-mkrescue and 
> --modules parameter.
>
> The goal of grub-mkrescue is to create image that a) contains all modules and 
> b) can be booted on every
> supported platform.
>
> The goal of --modules="..." parameters is to add modules to initial grub core 
> image that is loaded and executed by frmware.
> This initial grub core image intended to contain *ONLY* modules needed to 
> access grub ISO which contains everything else.
> grub-mkrescue knows which modules are needed on each supported platform so it 
> actually puts different modules in each
> core image. Everything else is under /boot/grub on ISO and can be loaded on 
> demand or manually as needed. You can also
> create grub.cfg on ISO image that will automatically load different modules 
> depending on current platform.
>
> At which point I have to remind you that I never told you to use --modules in 
> the first place :) You somehow insist on it,
>for reasons I do not understand. 

The reason is that, if I don't do this, mkrescue writes 4mb of modules to 
/boot/grub/{i386-pc, x86_64-efi}, most of which are not required.

If I manually edit the iso to remove the modules that are not required, then 
the iso refuses to boot complaining that the modules I removed are missing 
(even though they are not required to boot the cd).

What I am trying to do is make an iso that, when burned to cd, will boot in 
legacy-bios and uefi mode to a console prompt. In the case of legacy-bios, this 
is easy. In the case of uefi, I need to load gop_efi and unicode fonts in order 
to have a display at the console prompt.

Since I'd like the above iso to be as small as possible, I'd like grub-mkrescue 
to either:

1. Embed only the required modules for both legacy-bios and uefi to boot.

Or

2. Copy only those modules required to boot to the iso under 
/boot/grub/{i386-pc, x86_64-efi}

This doesn't seem unreasonable :)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]