Я большой энтузиаст операционных систем и прохожу соответствующий курс. Поэтому в качестве проекта мне поручили реализовать простую операционную систему.
Они предоставили мне простую реализацию операционной системыДЖОШ.
Я могу следовать всем данным инструкциям и скомпилировать загрузочный сектор и элементарную часть ядра с помощью ассемблера NASM. Также я добавил свой собственный код для отображения дополнительной информации о машине.
Подводить итоги,ДЖОШ— это операционная система, разработанная для загрузки с дисководов. Но у меня нет устройств для работы с дисководами.
Разработчики JOSH предусмотрели dd if=boot.bin bs=512 count=1 of=/dev/fd0
возможность записи файла boot.bin на дискету.
Мне нужно знать, можно ли создать виртуальную дискету на USB-накопителе и можно ли загрузить с нее эту операционную систему.
Поскольку я использую Ubuntu, я буду очень признателен, если кто-нибудь объяснит мне, как создать виртуальную дискету на моем USB-накопителе и как поместить файлы boot.bin и kernel.bin на этот виртуальный дисковод.
Насколько я понял, у нас должен быть какой-то сектор размером 512 байт для этого файла boot.bin.
Я буду очень признателен, если кто-то сможет мне в этом помочь.
решение1
Вам следует рассмотретьPXE-загрузка.
Я не говорю, что вам обязательно следует использовать PXE вместо дискеты (хотя вы можете так и сделать).
Но технология загрузки PXE использует виртуальную дискету для начальной загрузки вашей конечной операционной системы. И существуют различные сопутствующие инструменты для работы с виртуальными дискетами (заполнение их, сохранение их в виде файла), а также отправка виртуальной дискеты по проводам для загрузки целевой машины. Так что вы, скорее всего, найдете то, что вам нужно, в мире PXE.
Раньше я использовал Tftpd32 для этого. Я собирался разместить ссылку на него, но Chrome теперь предупреждает о вредоносном ПО на этом сайте, так что будьте осторожны. Я думаю, что Windows теперь тоже включает в себя такие вещи (в WDS в Windows Server).
решение2
Ничего страшного, решение найдено.
ДЖОШэто однозадачная операционная система с прерываниями. Мы получаем загрузочный файл размером 512 байт, имеющий действительную загрузочную подпись, с сайта и простой файл ядра, который на самом деле является операционной системой.
Этот загрузочный сектор понимает только файловую систему FAT12, поэтому для его запуска нам придется использовать дисковод.
Я создал виртуальную дискету, записал загрузочный файл в MBR этого диска, скопировал на нее файл ядра и запустил его на виртуальной машине.
Как я узнал изздесьмы можем создать образ дискеты, используя следующие команды.
~$ cd /media // open the terminal in your home directory and head to /media
/media$ sudo mkdir floppy // create a directory in media
// go back to home directory again
~$ mkfs.msdos -C myfloppy.img 1440 // create a floppy disk image of size 1.44 MB
~ $ sudo mount -o loop myfloppy.img /media/floppy/ // mount the image with the floppy directory.
// now open another terminal where your boot.bin file and kernel.bin file is and enter the following
/os$ lsblk // get the name of the mounted floppy image, you can identify it from the list with a disk that has 1.5 MB size
/os$ sudo dd if=./boot.bin of=/dev/loop0 // now burn the boot file to the MBR
/os$ sudo cp kernel.bin /media/floppy/ // copy the kernel file to the disk image
После этого вы сможете загрузиться с этого образа дискеты, используя виртуальную машину.
решение3
У меня есть старая USB-флешка с эмуляцией дискеты: вы можете записать на нее образ дискеты, и флешка будет обнаружена как USB-дисковод.