Попытка скомпилировать код из учебника OS Dev - PullRequest
3 голосов
/ 23 декабря 2009

Это сложный вопрос, потому что я уверен, что меня собираются засыпать ненавистники, комментирующие: «Если я уже не могу написать операционную систему, я никогда не смогу написать операционную система». Ну, я читал 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, и я думаю, что это является причиной проблемы, поэтому я спрашиваю вас, как мне создать действительный исполняемый файл ядро? Я пропустил правильную цель или неправильный двоичный формат?

Я был бы очень признателен, если бы кто-то помог мне с этим смущающим "первым шагом"

Ответы [ 2 ]

2 голосов
/ 23 декабря 2009

Мой комментарий выше не был очень ясным. Я имел в виду «Что команда file сообщает в вашем kernel.bin против их?». Вывод компоновщика представляет собой необработанный двоичный файл. Это должно начаться с нескольких волшебных слов, которые распознает grub. Они определены в start.asm рядом с "mboot". Я подозреваю, что ваш отличается от их.

У меня нет под рукой nasm, поэтому я не могу построить, но вы можете начать с сравнения первых нескольких слов файла .bin.

1 голос
/ 23 декабря 2009

Оказывается, что строка, используемая для компиляции приложения, была явно настроена на компиляцию в формате «aout», который был тем, что сказано в руководстве, и что я предположил, чтобы быть правдой. Только чтение материала в руководстве " barebones " убедило меня в том, что я, возможно, запутался. Как только я изменил эту строку на "nasm -f elf", все заработало.

Это тег в моем репозитории, который указывает на базовую РАБОЧУЮ версию учебного кода bkerndev (Как написать собственную операционную систему) для использования в будущем и для людей, которые были на моей должности ..

Он поставляется с make-файлом для сборки его из 32-битной системы Linux.

http://github.com/PhillipTaylor/farmix/tree/bkerndev_tutorial_working

...