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: Andrei Borzenkov
Subject: Re: Cannot boot from dual bios/uefi boot CD
Date: Sat, 28 Feb 2015 08:53:45 +0300

В Sat, 28 Feb 2015 09:01:43 +0400
John Frankish <address@hidden> пишет:

> > > > > I ran the following:
> > > > > 
> > > > > $ sudo x86_64-grub-mkrescue --modules="iso9660 fshelp loadbios 
> > > > > part_msdos part_gpt normal terminal crypto extcmd boot gettext 
> > > > > linux video relocator mmap font bufio efi_gop video_fb efi_uga 
> > > > > gfxterm bitmap_scale bitmap gfxmenu trig" -o myiso.iso iso
> > > > > 
> > > > > The iso as-is boots, but still contains copies all of the modules in 
> > > > > i386pc and x86_64-efi.
> > > > >
> > > > > I don't see the logic in embedding modules if the same modules will 
> > > > > be copied to the iso anyway?
> > > > > 
> > > > > If I delete the x86_64-efi folder from the iso, it doesn't boot and 
> > > > > complains about all of the missing modules for ever.
> > > >
> > > > And which modules are missing? This works for me
> > > >
> > > > address@hidden:~/build/grub> pkgdatadir=$PWD ./grub-mkrescue -d 
> > > > grub-core -o /tmp/foo.iso --modules="linux part_msdos minicmd ls" 
> > > > --install-modules="" /linux=/boot/vmlinuz-3.16.7-7-desktop 
> > > > /initrd=/boot/initrd-3.16.7-7-desktop
> > > >
> > > > linux /linux
> > > > initrd /initrd
> > > > boot
> > > >
> > > > minicmd is for lsmod and ls is for ls. part_msdos is not really needed.
> > > > It still works using minimal --modules=linux
> > > 
> > > Thanks for the continued help with this.
> > > 
> > > I was using grub-2.00, which doesn't have "-d" or "--install-modules="
> > > 
> > > If I use grub-2.02~beta2, then the same command works for me, except that 
> > > I'm booting to the console prompt so in uefi
> > > boot I get a blank display after "error: no suitable video more found. 
> > > Booting in blind mode".
> > 
> >
> > Yes, on BIOS linux depends on and automatically pulls in vbe. The following 
> > works for me on EFI
> > (for booting from ISO image of course)
> >
> > address@hidden:~/build/grub> pkgdatadir=$PWD ./grub-mkrescue -d grub-core 
> > -o /tmp/foo.iso --modules="linux minicmd
> > ls efi_gop" --install-modules="" /linux=/boot/vmlinuz-3.16.7-7-desktop 
> > /initrd=/boot/initrd-3.16.7-7-desktop
> >
> > > BTW, if I use --modules="linux" or --modules="linux part_dos iso9660", 
> > > then uefi boot fails with the error:
> > > file `/boot/grub/x86_64-efi/part_acorn.mod` not found. Entering rescue 
> > > mode.
> >
> > See above. It works for me using EFI build. And the following allows me to 
> > boot from HDD:
> >
> > address@hidden:~/build/grub> pkgdatadir=$PWD ./grub-mkrescue -d grub-core 
> > -o /tmp/foo.iso
> > --modules="linux minicmd ls efi_gop ext2" --install-modules=""
> >
> > Adjust for your filesystem. You may need to add part_msdos and part_gpt 
> > (current GIT head does it automatically on EFI).
> 
> [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.

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. 

> 
> > > ..so it appears that I'm stuck?
> > > 
> >
> > If your intention is to build dual-platform support, you probably 
> > misunderstood what I said earlier. You need to build and
> > install grub twice for two different platforms USING THE SAME PREFIX AND 
> > PROGRAM NAME. It appears you built it
> > twice but placed in two different locations, so you can now only use one of 
> > them at a time.
> 
> No, that's not the case, both are under /usr/local:
> 
> /usr/local/lib/grub/i386-pc/*modules
> /usr/local/lib/grub/x86_64-efi/*modules
> 
> > You should have something like
> >
> > address@hidden:~/src/grub> LC_ALL=C ll /usr/lib/grub2 total 40 drwxr-xr-x 2 
> > root root 20480 Nov  8 07:54 i386-pc drwxr-xr-x > 2 root root 20480 Nov  8 
> > 08:05 x86_64-efi
> >
> > Now replace /usr/lib with /usr/local/lib, i.e. you have to build and 
> > install twice using
> >
> >./configure --prefix=/usr/local --with-platform=pc ./configure 
> >--prefix=/usr/local --with-platform=efi
> >
> 
> As per above, that's exactly what I did
> 
> > > Note also that, the mkrescue command appears to copy files all  over the 
> > > place:
> > > 
> > > $ ls /mnt/sr0/boot/grub/x86_64-efi [why is this required if the modules 
> > > are embedded?]
> > > command.lst   crypto.lst    fs.lst        moddep.lst    modinfo.sh    
> > > partmap.lst   parttool.lst  terminal.lst  video.lst
> > > 
> > > $ ls /mnt/sr0/System/Library/CoreServices
> > > SystemVersion.plist  boot.efi [is boot.efi duplicating efi.img?]
> > > 
> > > $ ls /mnt/sr0
> > > System/       boot/         boot.catalog  efi.img       mach_kernel
> > > 
> > > ..and copies Unicode.pf2 to the cd when it cannot be used and creates 
> > > empty directories for locale and rom.
> > > 
> 




reply via email to

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