Это сложный вопрос, потому что я уверен, что меня собираются засыпать ненавистники, комментирующие: «Если я уже не могу написать операционную систему, я никогда не смогу написать операционную система». Ну, я читал Modern OS от Tanembaum, Linux Kernel Development, Понимание ядра Linux и других. Я до сих пор не знаю, смогу ли я написать операционную систему или нет, и только продвигаясь вперед, чтобы написать одну, я пойму, что я не делаю ». я знаю Кроме того, ни одна из книг, которые я прочитал, даже не удосужилась описать последовательность загрузки / последовательность компиляции.
В любом случае, я ненавижу быть отрицательным, но я просто хотел бы собрать пример кода из учебника bkerndev ниже и иметь абсолютно минимальную операционную систему:
http://www.osdever.net/bkerndev/index.php?the_id=90
Вы можете скачать соответствующий исходный код в формате zip здесь:
http://www.osdever.net/bkerndev/bkerndev.zip
Когда вы пытаетесь скомпилировать это ядро, вы сталкиваетесь со всевозможными ошибками, вызванными тем, что часть кода не работает. Другой пользователь искал помощи для этого здесь из-за переполнения стека здесь:
компиляция моего собственного ядра (не из источника linux-kernel)
Хотя не очень помог. Я исправил эти ошибки, добавив подчеркивание флага gcc и изменив некоторые типы данных. Вы можете увидеть мой код здесь:
http://github.com/PhillipTaylor/farmix
Код успешно скомпилируется и у меня останется исполняемый файл kernel.bin, но когда я загружаюсь из grub, я получаю:
Ошибка 13: нераспознанный или неподдерживаемый формат (или что-то в этом роде)
Когда я беру файл kernel.bin непосредственно из zip-файла авторов и запускаю его на моем eeepc, он загружается абсолютно нормально, поэтому я думаю, что у меня проблема с правильной компиляцией кода. Я думаю, что автор строит его с компьютера с Windows, но я пытаюсь скомпилировать его, используя Fedora 10 i386 с GNU GCC 4.3, и я думаю, что это является причиной проблемы, поэтому я спрашиваю вас, как мне создать действительный исполняемый файл ядро? Я пропустил правильную цель или неправильный двоичный формат?
Я был бы очень признателен, если бы кто-то помог мне с этим смущающим "первым шагом"