Я следил за эта статья о том, как сделать очень простое ядро, которое печатает «Hello, World». Файлы моего проекта доступны на Гитхаб.
Я собрал свой кросс-компилятор из этого проект. Я использую эту команду для кросс-компиляции, сборки и сборки моего ISO (образа компакт-диска):
i686-elf-as boot.s -o boot.o
i686-elf-gcc -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
i686-elf-gcc -T linker.ld -o myos.bin -ffreestanding -O2 -nostdlib boot.o kernel.o -lgcc
mkdir -p isodir/boot/grub
cp myos.bin isodir/boot/myos.bin
cp grub.cfg isodir/boot/grub/grub.cfg
grub-mkrescue -o myos.iso isodir
Когда я попытался выполнить его на VirtualBox, он выдает следующее сообщение:
FATAL: No bootable medium found! System halted.
Почему я получаю эту ошибку и как ее исправить?
P.S. Я использую подсистему Ubuntu для Windows 10
@Michael Petch Я использую barebones-toolchain
Файлы точно как в руководстве. Для компилирующих команд: i686-elf-as boot.s -o boot.o
i686-elf-gcc -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
i686-elf-gcc -T linker.ld -o myos.bin -ffreestanding -O2 -nostdlib boot.o kernel.o -lgcc
mkdir -p isodir/boot/grub cp myos.bin isodir/boot/myos.bin cp grub.cfg isodir/boot/grub/grub.cfg grub-mkrescue -o myos.iso isodir
Код: github.com/MOME05/Сборка/загрузить
В моей системе Win10 я установил сервер Xming X11 из sourceforge.net/projects/xming. В Ubuntu 18.04 WSL я сделал sudo apt-get install grub2-common grub-pc xorriso qemu-system-i386
. Я клонировал ваш проект, выполнил команды, которые вы дали выше, и он создал файл myos.iso
. Я убедился, что сделал export DISPLAY=:0
. Затем я запустил qemu-system-i386 -cdrom myos.iso
, и он работал так, как отображался Hello, kernel World!
@Michael Petch Я пытался сделать qemu-system-i386 -cdrom myos.iso
, но это вернуло меня Could not initialize SDL(No available video device) - exiting
. Куда мне поставить export DISPLAY=:0
?
@Michael Petch Я попытался загрузиться в VirtualBox после того, как сделал sudo apt-get install grub2-common grub-pc xorriso qemu-system-i386
и перекомпилировал все, и все работает!!!!! Спасибо! (В любом случае, что означает Could not initialize SDL(No available video device) - exiting
?
@SimoneBroili При запуске программ, которым нужна графика, под Linux Could not initialize SDL(No available video device)
обычно означает, что SDL (Simple DirectMedia Layer) не может найти X-сервер для связи. X-серверы — это графические серверы, с которыми программы взаимодействуют для отображения вещей. Они не должны быть на том же компьютере, на котором запущена программа. В своем комментарии я сказал, что установил Xming. Xming — это такой сервер, который наивно работает в Windows. Если вы запустите Xming и сделаете export DISPLAY=:0
, должно быть достаточно графических программ, таких как QEMU, для вывода.
export DISPLAY=:0
выдается в вашем терминале Ubuntu перед запуском qemu-system-i386 (или любых программ X11). Вы также должны убедиться, что XMing работает в Windows. Вы также можете поместить export DISPLAY=:0
в конец файла ~/.bashrc
, чтобы это автоматически выполнялось каждый раз при запуске вашего терминала Windows Ubuntu.
Вероятно, отсутствует компонент GRUB или установлена неправильная версия Xorriso. В статье Bare Bones, на которую вы ссылаетесь, говорится следующее:
You can easily create a bootable CD-ROM image containing the GRUB bootloader and your kernel using the program grub-mkrescue. You may need to install the GRUB utility programs and the program xorriso (version 0.5.6 or higher).
При использовании grub-mkrescue
для создания ISO-образов чаще всего не загружаемые ISO-образы являются результатом отсутствия установки Xorisso. Если grub-mkrescue
запускается, но вообще не создает ISO-образы, вероятно, отсутствует компонент GRUB. Чтобы убедиться, что у вас установлены все компоненты GRUB и Xorriso, установите компоненты в современных выпусках Ubuntu с помощью:
sudo apt-get install grub2-common grub-pc xorriso
Затем попытайтесь восстановить и повторно запустить образ ISO в VirtualBox.
Как я могу получить инструменты GRUB и xorriso для Mac? Я попытался установить brew, но он их не нашел.
@KlausMaria: я не использую MacOS для разработки OSDev, поэтому я не уверен. Этот конкретный ответ охватывает ubuntu
, поскольку он был помечен как таковой.
Ты настроил grub? Запускается хоть?