Вы, кажется, имеете в виду это руководство на OSDev.org .
Если вы заметите, это не стандартная программа на C с main()
как точка входа.Фактически, на странице отображаются две точки входа: одна написана на ассемблере таким образом, чтобы GRUB мог найти и загрузить, и которая настраивает и загружает вторую, kmain()
, которая написана на C.авторы используют имя kmain
для обозначения «ядра ядра»;предположительно dmain
является точкой входа для драйверов и будет означать «основной драйвер».
C проводит различие между «автономными» и «размещенными» реализациями.Хостинг это то, что вы, вероятно, более знакомы с;доступна стандартная библиотека C, и все программы запускаются с функцией main
.
Ядра ОС (часто) являются хорошими примерами автономных сред.Например, библиотека C, вероятно, будет недоступна (за исключением некоторых заголовков, таких как stddef.h
& stdarg.h
; подробности см. В стандарте).Кроме того, точка входа больше не определяется стандартом.Учебник OSDev.org делает особый вывод из этого факта, явно определяя его точку входа с другим именем.
Возможно, вы могли бы запустить учебник, переименовывая kmain
в main
, но обратите внимание, что этовсе еще void main(void*, unsigned int)
, не int main(int, char**)
;фактически такая путаница, вероятно, является одной из причин, по которой авторы решили использовать другое имя.Но это всего лишь соглашение, которое они выбрали, а не что-то стандартизированное.