저는 친구가 extlinux를 사용하여 부팅 가능한 Linux 이미지를 설정하는 것을 돕고 있습니다. 이것이 지금까지 가지고 있는 것이지만 qemu-system-x86_64를 사용하면 이미지를 부팅할 수 없습니다. qemu-system-x86_64의 옵션은 -m 2048 -drive format=raw,file=myapp.img입니다. qemu-system-x86_64에는 "하드 디스크에서 부팅 중..."이라고만 표시됩니다. 내가 뭘 잘못하고 있는지 알고 싶습니다. 커널과 initrd는 qemu에서 정상적으로 부팅됩니다. 부팅 가능한 이미지는 UEFI가 아닌 이전 시스템에 적합합니다.
#!/bin/sh -ex
APP=myapp
IMG=${APP}.img
KERNEL=$1
INITRD=$2
MNTPNT=/media/usb
SIZE=1G
qemu-img create -f raw $IMG $SIZE
sudo dd if=/usr/lib/syslinux/mbr/mbr.bin of=$IMG conv=notrunc bs=440 count=1
parted -s $IMG mklabel msdos
parted -s -a none $IMG mkpart primary ext4 0 $SIZE
lodev=$(losetup -f)
sudo losetup $lodev $IMG
sudo partx -a $lodev
sudo mkfs.ext4 ${lodev}p1
sudo mount ${lodev}p1 $MNTPNT
sudo mkdir -p $MNTPNT/boot/extlinux
sudo cp extlinux.conf $MNTPNT/boot/extlinux/
sudo cp /usr/lib/syslinux/memdisk $MNTPNT/boot/extlinux/
sudo cp /usr/lib/syslinux/modules/bios/* $MNTPNT/boot/extlinux/
sudo cp $KERNEL $MNTPNT/boot/
sudo cp $INITRD $MNTPNT/boot/
sudo extlinux --install $MNTPNT/boot/extlinux/
sudo umount $MNTPNT
sudo partx -d $lodev
sudo losetup -d $lodev
답변1
Linux 파티션을 생성한 후 다음 명령을 추가하면 문제가 해결되었습니다.
parted -s -a none $IMG set 1 boot on
BIOS 모듈과 메모리 디스크를 전혀 복사할 필요가 없습니다.