Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Can';t将IMG转换为ISO_Bash_X86_Qemu_Osdev_Iso Image - Fatal编程技术网

Bash Can';t将IMG转换为ISO

Bash Can';t将IMG转换为ISO,bash,x86,qemu,osdev,iso-image,Bash,X86,Qemu,Osdev,Iso Image,因此,我目前正在开发自己的操作系统(只是为了好玩),它目前正在编译成一个IMG文件。我知道不需要它,但我想尝试将它编译成一个ISO,但到目前为止我还没有成功。我不太确定需要哪些文件,所以只要问一下,我就会编辑帖子:) 当我运行img时,我得到以下信息: 但当我运行ISO时,我得到以下信息: 下面是我成批编写的编译脚本: @echo off echo Building KronkOS floppy image! echo. echo Assembling bootloader... echo

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

当我运行img时,我得到以下信息:

但当我运行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

因此,我将用于将其转换为ISO的工具从
fat\u imgen
更改为
mtools

我还遵循了Michael Petch在一篇评论中的建议,即在qemu中使用-cdrom选项,现在一切似乎都正常工作了。

关于导出显示=0:0&&qemu-system-x86_64映像/KronkISO.iso-如果要启动iso,请尝试导出显示=0:0&&qemu-system-x86_64-cdrom映像/KronkISO.iso。我已经指定
cdrom
作为引导设备。我投票重新打开,因为这里面有足够多的内容来确定问题,我相信有解决方案。从技术上讲,解决方案不是针对编程问题,但它是内核开发和Stackoverflow领域的一部分,类似的问题已经存在。添加-cdrom工作,我还更改了用于将其转换为ISO格式的fat_imgen到mtools的工具,因为它产生了一些问题。。。现在一切都很顺利,再次感谢迈克尔。我也同意,如果你问我。。。如何将操作系统编译成ISO似乎非常适合stackoverflow。经过一些测试,我发现它在运行我的读/写代码时似乎遇到了一些问题。。。但我猜这更多的是我的内核代码的问题,而不是我创建ISO的方式的问题。虽然我不确定,因为它在我运行IMG时工作,但在我运行ISO时停止。可能是因为您的ATA代码不适用于CDROM ATAPI设备。