J'ai un appareil avec un processeur AMD64 mais un chargeur de démarrage UEFI qui ne prend en charge que i386.
J'ai créé un programme d'installation ISO Ubuntu 19.04 personnalisé en utilisant Cubic et je l'ai flashé sur un périphérique USB en utilisant usb-creator-gtk (Startup Disk Creator).
Cela crée deux partitions sur l'USB:
La première partition formatée en ISO9660 et contient le contenu ISO, la seconde est une partition FAT32 qui contient uniquement les fichiers de démarrage .EFI.
La deuxième partition est celle à partir de laquelle la tablette va démarrer. Son contenu provient d'un fichier efi.img stocké dans/boot/grub sur l'ISO. À l'origine, il ne contenait que des fichiers AMD64 EFI:
J'ai créé mon propre fichier img.efi de remplacement et entré un fichier bootia32.efi à l'aide de ces commandes:
dd if=/dev/zero of=efi.img bs=1M count=5
mkfs.fat efi.img
Sudo mount -o loop,rw efi.img /media/efi
Sudo cp -r <files> /media/efi
Cela crée avec succès une clé USB amorçable, cependant il ne charge pas le programme d'installation Grub, il charge uniquement une ligne de commande Grub.
J'ai utilisé ce bootia32.efi
fichier pour charger avec succès grub auparavant, si je formate manuellement l'USB en FAT32, copie les fichiers ISO et place le fichier EFI personnalisé dans/EFI/BOOT alors l'appareil démarrera dans Grub comme je m'y attendais.
Mais je voudrais faire un ISO qui peut être flashé normalement et démarrer correctement.
Ma question est, quel est l'intérêt de créer une partition séparée pour contenir les fichiers EFI de démarrage comme le fait usb-creator-gtk? Comment puis-je faire en sorte que cette partition charge la configuration Grub de l'installateur au lieu de simplement la ligne de commande Grub?
Je vous remercie
Merci à @oldfred d'avoir expliqué que les partitions séparées doivent dépasser la limite de taille de fichier de 4 Go pour FAT32.
J'ai réussi à créer l'ISO amorçable en plaçant à la fois le dossier boot
et les dossiers EFI
de l'ISO dans la partition FAT32 (efi.img).
J'ai modifié le grub.cfg pour le lancer à partir d'une partition différente de celle dans laquelle il se trouve.
Cela ne me semble pas correct car le fichier efi.img d'origine ne contenait que trois fichiers:
BOOTx64.EFI
grubx64.efi
mmx64.efi
Mais ça marche donc je suis content.
La structure exacte de mon fichier efi.img est la suivante:
. ├── boot │ └── grub │ ├── font.pf2 │ ├── grub.cfg │ ├── loopback.cfg │ └── x86_64-efi │ ├── acpi.mod │ ├── adler32.mod │ ├── ahci.mod │ ├── all_video.mod │ ├── aout.mod │ ├── appleldr.mod │ ├── archelp.mod │ ├── ata.mod │ ├── at_keyboard.mod │ ├── backtrace.mod │ ├── bfs.mod │ ├── bitmap.mod │ ├── bitmap_scale.mod │ ├── blocklist.mod │ ├── boot.mod │ ├── bsd.mod │ ├── bswap_test.mod │ ├── btrfs.mod │ ├── bufio.mod │ ├── cat.mod │ ├── cbfs.mod │ ├── cbls.mod │ ├── cbmemc.mod │ ├── cbtable.mod │ ├── cbtime.mod │ ├── chain.mod │ ├── cmdline_cat_test.mod │ ├── cmp.mod │ ├── cmp_test.mod │ ├── command.lst │ ├── cpio_be.mod │ ├── cpio.mod │ ├── cpuid.mod │ ├── crc64.mod │ ├── cryptodisk.mod │ ├── crypto.lst │ ├── crypto.mod │ ├── cs5536.mod │ ├── ctz_test.mod │ ├── datehook.mod │ ├── date.mod │ ├── datetime.mod │ ├── diskfilter.mod │ ├── disk.mod │ ├── div.mod │ ├── div_test.mod │ ├── dm_nv.mod │ ├── echo.mod │ ├── efifwsetup.mod │ ├── efi_gop.mod │ ├── efinet.mod │ ├── efi_uga.mod │ ├── ehci.mod │ ├── elf.mod │ ├── eval.mod │ ├── exfat.mod │ ├── exfctest.mod │ ├── ext2.mod │ ├── fat.mod │ ├── file.mod │ ├── fixvideo.mod │ ├── font.mod │ ├── fs.lst │ ├── gcry_arcfour.mod │ ├── gcry_blowfish.mod │ ├── gcry_camellia.mod │ ├── gcry_cast5.mod │ ├── gcry_crc.mod │ ├── gcry_des.mod │ ├── gcry_dsa.mod │ ├── gcry_idea.mod │ ├── gcry_md4.mod │ ├── gcry_md5.mod │ ├── gcry_rfc2268.mod │ ├── gcry_rijndael.mod │ ├── gcry_rmd160.mod │ ├── gcry_rsa.mod │ ├── gcry_seed.mod │ ├── gcry_serpent.mod │ ├── gcry_sha1.mod │ ├── gcry_sha256.mod │ ├── gcry_sha512.mod │ ├── gcry_tiger.mod │ ├── gcry_twofish.mod │ ├── gcry_whirlpool.mod │ ├── geli.mod │ ├── gettext.mod │ ├── gfxmenu.mod │ ├── gfxterm_background.mod │ ├── gfxterm_menu.mod │ ├── gfxterm.mod │ ├── gptsync.mod │ ├── grub.cfg │ ├── gzio.mod │ ├── halt.mod │ ├── hashsum.mod │ ├── hdparm.mod │ ├── help.mod │ ├── hexdump.mod │ ├── hfs.mod │ ├── hfspluscomp.mod │ ├── hfsplus.mod │ ├── http.mod │ ├── iorw.mod │ ├── jfs.mod │ ├── jpeg.mod │ ├── keylayouts.mod │ ├── keystatus.mod │ ├── ldm.mod │ ├── legacycfg.mod │ ├── legacy_password_test.mod │ ├── linux16.mod │ ├── linuxefi.mod │ ├── linux.mod │ ├── loadbios.mod │ ├── loadenv.mod │ ├── loopback.mod │ ├── lsacpi.mod │ ├── lsefimmap.mod │ ├── lsefi.mod │ ├── lsefisystab.mod │ ├── lsmmap.mod │ ├── ls.mod │ ├── lspci.mod │ ├── lssal.mod │ ├── luks.mod │ ├── lvm.mod │ ├── lzopio.mod │ ├── macbless.mod │ ├── macho.mod │ ├── mdraid09_be.mod │ ├── mdraid09.mod │ ├── mdraid1x.mod │ ├── memrw.mod │ ├── minicmd.mod │ ├── minix2_be.mod │ ├── minix2.mod │ ├── minix3_be.mod │ ├── minix3.mod │ ├── minix_be.mod │ ├── mmap.mod │ ├── moddep.lst │ ├── morse.mod │ ├── mpi.mod │ ├── msdospart.mod │ ├── mul_test.mod │ ├── multiboot2.mod │ ├── multiboot.mod │ ├── nativedisk.mod │ ├── net.mod │ ├── newc.mod │ ├── ntfscomp.mod │ ├── ntfs.mod │ ├── odc.mod │ ├── offsetio.mod │ ├── ohci.mod │ ├── part_acorn.mod │ ├── part_amiga.mod │ ├── part_Apple.mod │ ├── part_bsd.mod │ ├── part_dfly.mod │ ├── part_dvh.mod │ ├── part_gpt.mod │ ├── partmap.lst │ ├── part_msdos.mod │ ├── part_plan.mod │ ├── part_Sun.mod │ ├── part_sunpc.mod │ ├── parttool.lst │ ├── parttool.mod │ ├── password.mod │ ├── password_pbkdf2.mod │ ├── pata.mod │ ├── pbkdf2.mod │ ├── pbkdf2_test.mod │ ├── pcidump.mod │ ├── play.mod │ ├── png.mod │ ├── priority_queue.mod │ ├── probe.mod │ ├── procfs.mod │ ├── progress.mod │ ├── raid5rec.mod │ ├── raid6rec.mod │ ├── random.mod │ ├── read.mod │ ├── reboot.mod │ ├── regexp.mod │ ├── reiserfs.mod │ ├── relocator.mod │ ├── romfs.mod │ ├── scsi.mod │ ├── serial.mod │ ├── setjmp.mod │ ├── setjmp_test.mod │ ├── setpci.mod │ ├── shift_test.mod │ ├── signature_test.mod │ ├── sleep.mod │ ├── sleep_test.mod │ ├── spkmodem.mod │ ├── squash4.mod │ ├── syslinuxcfg.mod │ ├── terminal.lst │ ├── terminal.mod │ ├── terminfo.mod │ ├── test_blockarg.mod │ ├── testload.mod │ ├── test.mod │ ├── testspeed.mod │ ├── tftp.mod │ ├── tga.mod │ ├── time.mod │ ├── trig.mod │ ├── tr.mod │ ├── true.mod │ ├── udf.mod │ ├── ufs1_be.mod │ ├── ufs1.mod │ ├── ufs2.mod │ ├── uhci.mod │ ├── usb_keyboard.mod │ ├── usb.mod │ ├── usbms.mod │ ├── usbserial_common.mod │ ├── usbserial_ftdi.mod │ ├── usbserial_pl2303.mod │ ├── usbserial_usbdebug.mod │ ├── usbtest.mod │ ├── verify.mod │ ├── video_bochs.mod │ ├── video_cirrus.mod │ ├── video_colors.mod │ ├── video_fb.mod │ ├── videoinfo.mod │ ├── video.lst │ ├── video.mod │ ├── videotest_checksum.mod │ ├── videotest.mod │ ├── xfs.mod │ ├── xnu.mod │ ├── xnu_uuid.mod │ ├── xnu_uuid_test.mod │ ├── xzio.mod │ └── zfscrypt.mod └── efi └── boot ├── bootia32.efi ├── BOOTx64.EFI ├── grubx64.efi └── mmx64.efi
Certains d'entre eux ne sont probablement pas nécessaires, mais je ne suis pas préoccupé par les 10 Mo supplémentaires d'espace qu'il utilise.
C'est mon grub.cfg dans le fichier img.efi, notez la set root=(hd0)
:
if loadfont /boot/grub/font.pf2 ; then
set gfxmode=auto
insmod efi_gop
insmod efi_uga
insmod gfxterm
terminal_output gfxterm
fi
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
set timeout=5
menuentry "Install Ubuntu Server" {
set root=(hd0)
set gfxpayload=keep
linux /casper/vmlinuz boot=casper only-ubiquity quiet splash ---
initrd /casper/initrd
}
menuentry "Run from internal disk" {
linux (hd1,gpt2)/boot/vmlinuz root=/dev/mmcblk1p2 intel_idle.max_cstate=0 quiet splash $vt_handoff
initrd (hd1,gpt2)/boot/initrd
}
Si quelqu'un peut faire la lumière sur ce qui devrait se trouver à l'intérieur du fichier efi.img, faites-le moi savoir.