2009-03-20 4 views
6

Я хотел бы построить встроенное ядро ​​для машины x86 с помощью Visual C++. У меня есть некоторые C и файлы кода сборки для компиляции, и я бы хотел связать их все вместе таким образом, который совместим с загрузчиком Multiboot, таким как GRUB.Как создать образ ядра с помощью Visual Studio?

+0

Вы действительно уверены, что хотите спуститься по пути MSVC? Это отличный компилятор, но я думаю, что это было бы намного проще с GCC/MingW –

+0

Я думаю, что GCC/MinGW также сгенерирует исполняемые файлы PE. Мне нужно будет внести необходимые изменения для ELF в PE в любой среде. VS просто так приятно использовать, я думаю, что предпочел бы это. –

ответ

6

OSDev имеет wiki entry on Visual Studio, которые могут обеспечить некоторое представление о том, в особенности со ссылками на Каушик Srenevasan-х blogentries на тему PE ядер, предназначенных для загрузки на мультизагрузочных основе загрузчиков (например, GRUB).

Несколько больших широкоплечий ударов вещей, которые вы должны знать:

  • В мультизагрузочном заголовке, вы должны использовать AOUT кладж.
  • Вам необходимо указать аргумент/BASE: 0x100000 для компоновщика, поэтому окончательный двоичный код основан на том, куда будет загружаться загрузчик.
  • Точка входа вашего ядра (обычно называемая «kmain») должна содержать __declspec(noreturn), и вам нужно будет сделать __asm { hlt } вместо возврата.
+0

Здесь также не работает копирование и вставка, но указывает на ошибку: он выглядит как «... kernels-using% 5F03.html», но должен быть «... kernels-using_03.html». –

+0

Я не знаю, почему, но я копирую и вставляю его из адресной строки сюда, и у меня есть буквальный текст _ _, когда я редактирую - SO, похоже, заменяет его по любой причине. –

+0

Хорошо, я отправил письмо в команду SO, и они указали, что есть другие способы сделать ссылку, поэтому я переключил ее на ту, которая работает. –