Попытка скомпилировать код из учебника OS Dev

Это сложный вопрос, потому что я уверен, что меня собираются засыпать ненавистниками, комментирующими: «Если я уже не могу написать операционную систему, я никогда не смогу написать операционную систему». Я прочитал «Современная ОС от Танембаума», «Разработка ядра Linux», «Понимание ядра Linux» и другие. Я до сих пор не знаю, смогу ли я написать операционную систему, и, только продвигаясь вперед, чтобы написать ее, я пойму, что я не делаю » не знаю. Вдобавок ко всему, ни одна из книг, которые я прочитал, даже не удосужилась описать последовательность загрузки / последовательность компиляции.

В любом случае, я ненавижу быть отрицательным, но я просто хотел бы создать пример кода из руководства bkerndev ниже и иметь абсолютно минимальную операционную систему:

http://www.osdever.net/bkerndev/index.php?the_id=90

Вы можете скачать связанный исходный код в формате zip отсюда:

http://www.osdever.net/bkerndev/bkerndev.zip

Когда вы пытаетесь скомпилировать это ядро, вы сталкиваетесь со всевозможными ошибками, вызванными тем, что часть кода повреждена. Другой пользователь искал помощь для этого здесь, при переполнении стека здесь:

Хотя особой помощи не получил. Я исправил эти ошибки, добавив подчеркивания-подчеркивания флага gcc и изменив некоторые типы данных. Вы можете увидеть мой код здесь:

http://github.com/PhillipTaylor/farmix

Код будет успешно скомпилирован и оставит меня с исполняемым файлом kernel.bin, но когда я загружаюсь в него из grub, я получаю:

Ошибка 13: нераспознанный или неподдерживаемый формат (или что-то в этом роде)

Когда я беру kernel.bin прямо из zip-файла авторов и запускаю его на своем eeepc, он загружается абсолютно нормально, поэтому я думаю, что у меня проблема с правильной компиляцией кода. Я считаю, что автор собирает его на машине с Windows, но я пытаюсь скомпилировать его, используя Fedora 10 i386 с GNU GCC 4.3, и я думаю, что это является причиной проблемы, поэтому я спрашиваю вас, как мне создать действительный исполняемый файл ядро? Мне не хватает правильной цели или неправильного двоичного формата?

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


person Philluminati    schedule 22.12.2009    source источник
comment
Возможно, вам больше повезет, если вы получите полезный ответ на форумах OSDev: forum.osdev.org   -  person Amber    schedule 23.12.2009
comment
Я не думаю, что у вас будет много внимания, если у меня есть эта большая куча кода, и он не работает. Лучше задавать серию вопросов о конкретных проблемах (с некоторым перерывом между вопросами: быстрые вопросы тоже не приветствуются).   -  person dmckee --- ex-moderator kitten    schedule 23.12.2009
comment
Кто-то думает, что это хороший вопрос. Теперь, я думаю, он работает над хорошей проблемой, но, похоже, это бесполезный и неясный вопрос. Хотите прокомментировать?   -  person dmckee --- ex-moderator kitten    schedule 23.12.2009
comment
Если вы запустите файл на своем и их файлах kernel.bin, будет ли результат одинаков?   -  person Richard Pennington    schedule 23.12.2009


Ответы (2)


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

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

person Richard Pennington    schedule 22.12.2009
comment
когда я запускаю команду file против авторов (рабочего) ядра и своего ядра, я получаю данные для них обоих, поэтому это не указывает на какую-либо проблему, но, глядя на двоичные файлы в vim, я вижу, что мой начинается со слова Hello World а авторы - нет. Предоставленный файл start.asm действительно говорит нам, что файл действительно нуждается в определенном байтовом шаблоне для правильного распознавания grub, поэтому похоже, что это проблема. Однако я не уверен, что мне нужно сделать, чтобы исправить эту проблему: -s - person Philluminati; 23.12.2009

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

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

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

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

person Philluminati    schedule 22.12.2009