Я хотел бы построить встроенное ядро для машины x86 с помощью Visual C++. У меня есть некоторые C и файлы кода сборки для компиляции, и я бы хотел связать их все вместе таким образом, который совместим с загрузчиком Multiboot, таким как GRUB.Как создать образ ядра с помощью Visual Studio?
ответ
OSDev имеет wiki entry on Visual Studio, которые могут обеспечить некоторое представление о том, в особенности со ссылками на Каушик Srenevasan-х blogentries на тему PE ядер, предназначенных для загрузки на мультизагрузочных основе загрузчиков (например, GRUB).
Несколько больших широкоплечий ударов вещей, которые вы должны знать:
- В мультизагрузочном заголовке, вы должны использовать AOUT кладж.
- Вам необходимо указать аргумент/BASE: 0x100000 для компоновщика, поэтому окончательный двоичный код основан на том, куда будет загружаться загрузчик.
- Точка входа вашего ядра (обычно называемая «
kmain
») должна содержать__declspec(noreturn)
, и вам нужно будет сделать__asm { hlt }
вместо возврата.
Здесь также не работает копирование и вставка, но указывает на ошибку: он выглядит как «... kernels-using% 5F03.html», но должен быть «... kernels-using_03.html». –
Я не знаю, почему, но я копирую и вставляю его из адресной строки сюда, и у меня есть буквальный текст _ _, когда я редактирую - SO, похоже, заменяет его по любой причине. –
Хорошо, я отправил письмо в команду SO, и они указали, что есть другие способы сделать ссылку, поэтому я переключил ее на ту, которая работает. –
Вы действительно уверены, что хотите спуститься по пути MSVC? Это отличный компилятор, но я думаю, что это было бы намного проще с GCC/MingW –
Я думаю, что GCC/MinGW также сгенерирует исполняемые файлы PE. Мне нужно будет внести необходимые изменения для ELF в PE в любой среде. VS просто так приятно использовать, я думаю, что предпочел бы это. –