使用 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 模块和内存磁盘。

相关内容