Q:Grubを使用してEFIシステムからLinuxを手動で起動する方法は?
問題の原因:x64システムにカスタムカーネル、ルートファイルシステム、およびグラブをインストールしようとしています。 USBスティックには同等のインストールスクリプトがあり、起動しますが、x64デバイスにeMMCをインストールしようとすると、「起動オプションの回復」と表示されます。これは再起動ループであり、Grubの使用方法に関連していると思われます。
写真(私のものではありません):
ホーム画面:
利用可能なオプション:
(簡体字)コード:
#! /bin/bash
set -e
# Create GPT, partition 1, type BIOS boot, bootable flag
(echo -e "g\nn\n1\n\n+128M\nt\n4\nM\na\nM\nw\n") | fdisk /dev/mmcblk0
sleep 1
mkfs.vfat -N BOOT /dev/mmcblk0p1
# Create partition 2
(echo -e "n\n2\n\n\nY\nw\n") | fdisk /dev/mmcblk0
sleep 1
mkfs.ext4 -F -L ROOTFS /dev/mmcblk0p2
dd if=rootfs of=/dev/mmcblk0p2 conv=fsync
mount /dev/mmcblk0p2 /mnt
mount /dev/mmcblk0p1 /mnt/boot/efi
cp vmlinuz-custom /mnt/boot
chroot /mnt <<-EOF
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devtmpfs none /dev
# This could be moved out of the chroot, but for is use this.
update-initramfs -c -k custom
umount /proc /sys /dev
EOF
grub-install --target=x86_64-efi --removable --recheck \
--root-directory=/mnt \
--efi-directory=/mnt/boot/efi \
--boot-directory=/mnt/boot/efi/EFI \
--bootloader-id=grub /dev/mmcblk0;
cat > /mnt/boot/efi/EFI/grub/grub.cfg <<-EOF
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod normal
search.fs_label BOOT grub
search.fs_label ROOTFS rootfs
set prefix=/bogus # Unavailable prefix (prefix required by Grub)
sleep 1
linux (\$rootfs)/boot/vmlinuz-custom root=UUID=$(blkid -o value -s UUID /dev/mmcblk0p2) i915.force_probe=* swiotlb=65536 module_blacklist="pinctrl_elkhartlake,dp83867"
initrd (\$rootfs)/boot/initrd.img-custom
boot
EOF
すでに確認済み:
- GrubのUUIDが正しいようです
- USBとEMMCのインストールスクリプトは同じではありませんが、同じです。
- BIOSオプションをデフォルト設定にリセット
- すべてのコマンドが正しく実行されているようです。
ベストアンサー1
正確には覚えていませんが、Grubの作成に関連していたようです。削除してみてください--removable
。また、削除してみてください--recheck
。
結局、カーネルをEFIパーティションのEFI専用の場所に移動しました。このefibootmgr
処理方法はGrubよりはるかに優れています。