Разработка ядер и тестирование их на виртуальных машинах

StackOverflow https://stackoverflow.com/questions/650050

Вопрос

Мне нравятся задачи программирования, и написание ядра кажется сложной задачей для программирования.

К сожалению, ядра особенно сложно тестировать, потому что они в основном являются ядром операционных систем, и поэтому их нелегко запустить поверх операционной системы.

Однако я знаю о приложениях, называемых виртуальными машинами, которые могут эмулировать компьютерное оборудование.

Каков самый простой / наилучший способ разработки и тестирования ядер (C + Assembly) с использованием виртуальных машин?

Это было полезно?

Решение

В то время как BOCHS, кажется, лучше дает вам знать, когда что-то идет не так с вашей любимой операционной системой...это очень слооооооо!Я использую VirtualPC для тестирования общего назначения и BOCH, когда ситуация становится мутной.

Кроме того, вы, скорее всего, будете загружать ОС каждые 2 минуты, поэтому полезно иметь какой-то автоматизированный способ создания загрузочного образа и запуска виртуального ПК.

Я создал образ загрузочной дискеты GRUB со всем необходимым для загрузки ядра.Bin из корневого каталога.Я использую пакетный файл, чтобы скопировать этот файл в каталог виртуального проекта, используйте Генератор Жирных Изображений скопировать мое ядро в изображение.Затем просто запустите проект VirtualPC.Vola!

Выдержка из моего пакетного файла:

COPY Images\Base.vfd Images\Boot.vfd /Y
fat_imgen.exe modify Images\Boot.vfd -f Source\Bin\KERNEL.BIN
COPY Images\Boot.vfd Emulators\VirtualPC\ /Y
START Emulators\VirtualPC\MyOS.vmc

Одно последнее предложение:Установите приоритет процесса VirtualPC на низкий - доверьтесь мне в этом!Я был бы рад обменяться каким-нибудь кодом!

Инструменты: DGJPP, NASM, GRUB.
Код: osdev.org , osdever.net

Другие советы

Возможно, вас заинтересует HelenOS . Это микроядро с нуля, портированное на многие архитектуры (просто отлично загружается на голом металле), разработанное с использованием симуляторов, таких как Simics и QEMU.

Мы используем статический grub, который копируется в окончательный ISO во время процесса сборки. Некоторые вещи должны быть такими, пока ОС не станет самостоятельной. Я настоятельно рекомендую НЕ реализовывать свою собственную библиотеку C в пространстве пользователя, если вы действительно не хотите делать все с нуля ... вы станете самостоятельным хостингом гораздо раньше:)

Хотя Simics не является бесплатной, я настоятельно рекомендую ее (и встроенные в нее средства отладки / профилирования) при создании ядра. Когда у вас есть какая-то консоль ядра и логгер, QEMU проделывает отличную работу.

Это просто. Настройте виртуальную машину, запишите свое ядро, скопируйте его на виртуальную машину, загрузите виртуальную машину.

Вам нужно быть более конкретным, если вам нужен более конкретный совет.

Возможно, просто настройте компьютер (я думаю, x86), а затем выясните, как он себя ведет во время загрузки. В файловой системе хоста должен быть один или несколько файлов, которые действуют как файловая система виртуальной машины, а затем вам нужно будет поместить туда некоторую информацию о загрузочном секторе, которая приведет к загрузке вашего ядра в разработке.

Это, конечно, означало бы, что система сборки на хосте имеет способ записи ядра в файловую систему виртуальной машины, что может варьироваться по сложности.

Выбор одного из них наугад, bochs кажется поддержка редактирования загрузочного носителя извне с использованием стандартных инструментов, таких как dd и т. д.

Первый вопрос, который вам нужно задать себе, - на какую аппаратную архитектуру вы ориентируетесь? Ради этого обсуждения я предполагаю, что вы нацеливаетесь на архитектуру IA_32, которая, вероятно, была бы разумным выбором, поскольку на этом процессоре имеется множество легкодоступной документации.

Если вы действительно серьезно относитесь к этой задаче, то вам обязательно нужно запустить цикл отладки / кода / сборки / развертывания для эмулятора или виртуальной машины. Кто-то упомянул BOCHS, который очень популярен. Если вам нужна скорость эмуляции, есть также эмулятор Qemu, который работает быстрее, чем BOCHS.

Я бы посоветовал, чтобы ваша среда разработки работала под Linux или Windows, что опять-таки было бы разумным выбором из-за доступной документации для этих сред разработки.

Сделай твой друг. Используйте его для автоматизации процесса сборки / выполнения. Я бы посоветовал вам заранее выбрать наборы инструментов / компиляторы и хорошо их изучить. Это спасет вас в долгосрочной перспективе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top