Разработка ядер и тестирование их на виртуальных машинах - PullRequest
8 голосов
/ 16 марта 2009

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

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

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

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

Ответы [ 5 ]

11 голосов
/ 16 марта 2009

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

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

Я собрал образ загрузочной дискеты GRUB со всем необходимым, чтобы он загрузил Kernel.Bin из корня. Я использую пакетный файл, чтобы скопировать этот файл в каталог виртуального проекта, используйте FAT Image Generator , чтобы скопировать мое ядро ​​в образ. Тогда просто запустите проект VirtualPC. Вола!

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

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

1 голос
/ 16 марта 2009

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

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

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

0 голосов
/ 17 марта 2009

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

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

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

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

0 голосов
/ 16 марта 2009

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

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

0 голосов
/ 16 марта 2009

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

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

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

...