1

所以我目前正在开发自己的操作系统(只是为了好玩),它目前正在编译成一个 IMG 文件。我知道这不是必需的,但我想尝试将其编译成 ISO,但到目前为止我还没有运气。我不太确定需要哪些文件,所以只需询问它们,我将编辑帖子:)

当我运行 img 时,我得到了这个: 图像结果

但是当我运行 ISO 时,我得到了这个: ISO 结果

这是我批量编写的编译脚本:

@echo off

echo Building KronkOS floppy image!
echo.
echo Assembling bootloader...
echo ======================================================
wsl nasm -f bin bootloader/boot.asm -o bootloader/boot.bin
echo Done!

echo.
echo Assembling KronkOS kernel...
echo ======================================================
wsl nasm -f bin kernel.asm -o KERNEL.BIN -l kernel_list.lst
echo Done!

::echo.
::echo Creating elf kernel file...
::echo ======================================================
::wsl nasm -f elf32 -o kernel.o kernel.asm
::wsl ld -m elf_i386 -o kernel.elf kernel.o
::del kernel.o
::echo Done!

::echo.
::echo Assembling programs...
::echo ======================================================
::cd programs
::    for %%i in (*.BKF) do del %%i
::    for %%i in (*.ASM) do wsl nasm -O0 -f BIN %%i
::    for %%i in (*.) do ren %%i %%i.BKF
::cd ..
::echo Done!

echo.
echo Adding bootsector to disk image...
echo ======================================================
wsl mformat -f 1440 -B bootloader/boot.bin -C -i images/KronkOS.img
echo.
echo Done!

echo.
echo Copying kernel and applications to disk image...
echo ======================================================
wsl mcopy -D o -i images/KronkOS.img KERNEL.BIN ::/
wsl mcopy -D o -i images/KronkOS.img programs/*.BKF ::/
wsl mcopy -D o -i images/KronkOS.img programs/*.BAS ::/
echo.
echo Done!

echo.
echo Do you want to build and ISO?
echo ======================================================
choice /c YN
if errorlevel 1 set x=1
if errorlevel 2 set x=2

if "%x%" == "1" (
    cd images
    wsl genisoimage -input-charset utf-8 -o KronkISO.iso -V KRONKOS -b KronkOS.img ./
    cd..
    echo.
    echo Done!
)

echo.
echo ======================================================
echo Build done!
choice /c YN /m "Run KronkOS build in QEMU?"
if errorlevel 1 set y=1
if errorlevel 2 set y=2

if "%y%" == "1" (
    if "%1" == "-d" (
        wsl sh -c "export DISPLAY=0:0 && qemu-system-x86_64 -s -S -fda images/KronkOS.img"
    ) else (
        if "%x%" == "1" (
            wsl sh -c "export DISPLAY=0:0 && qemu-system-x86_64 images/KronkISO.iso"
        ) else (
            wsl sh -c "export DISPLAY=0:0 && qemu-system-x86_64 -fda images/KronkOS.img"
        )
    )
)'
cls
4

1 回答 1

1

因此,我将用于将其转换为 ISO 的工具fat_imgenmtools.
我还遵循了 Michael Petch 在评论中的建议,即在 qemu 中使用 -cdrom 选项,现在一切似乎都可以正常工作。

于 2020-11-14T11:55:39.040 回答