extlinux를 사용하여 부팅 가능한 Linux 이미지 만들기

extlinux를 사용하여 부팅 가능한 Linux 이미지 만들기

저는 친구가 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 모듈과 메모리 디스크를 전혀 복사할 필요가 없습니다.

관련 정보