Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Разработка операционных систем - для начинающих и не только!


Информационный Канал Subscribe.Ru

Разработка операционных систем

Новость

Все исходники, опубликованные в каких-либо выпусках этой рассылки, теперь можно взять по адресу:
http://www.lowlevel.ru/osdev/sources.htm

Intro

При компиляции кода, приведенного в выпуске 9, многие из вас (те, кто использовали Windows и MinGW) столкнулись с ошибкой компоновщика, которую я совершенно не ожидал. С невероятными усилиями :) нам с LaFlour удалось решить эту проблему. Он вам расскажет поподробнее о том, что же случилось и о способах исправления этой ошибки.

Выпуск 9.a (2003-05-31) от LaFlour

Изменения для пользователей win32 платформ.
Все действия Lonesome описывал для *nix систем. Но пользователи windows столкнутся с особеностями софта, который не позволит им создать исходный бинарник с применением кода на си как было описано в 9м выпуске. Здесь я постараюсь внести некоторые пояснения и опишу какие изменения нам надо будет предпринять с вами.

Все дело заключается в компоновщике, который не хочет понимать полученный от Nasm объектный код в формате ELF (Примечание: для тех кто не смог создать объектный файл с ключом -felf - вам надо взять Nasm для win32) Но из этой ситуации есть выход. Давайте заменим наш startup.asm на аналогичный, но переделанный на си. Вот код startup.c:

void _start()
{
kernel_main();
}

Теперь давайте его откомпилируем:
gcc -ffreestanding -c -o startup.o startup.c

Проблем быть не должно.

После этого если мы попробуем скомпоновать файлы:
ld --oformat binary -Ttext 0x200000 -o kernel.bin startup.o ktty.o kernel.o
То получим ошибку:
":ld: PE operations on non PE file"

Вот такой наш LD. Ну не хочет он создавать сырые бинарники под Win32. Но из этой ситуации есть выход. Скомпонуем наши файлы в бинарник (не сырой), то есть в тот формат, который нам LD предлагает по умолчанию:
ld -Ttext 0x200000 -o kernel.bin startup.o ktty.o kernel.o

Все! Победили :) Теперь осталось получить сырой бинарник. Для этого делаем:
objcopy kernel.bin -O binary

Готово. Теперь по очереди соберем sb.bin и bootsect.bin. Итоговый bootsect.bin (содержащий все наши мучения) можем смело писать на флоп и тестить в VMWare. В итоге мы должны получить на экране надпись:
"We use C, isn't this great?"

Если у вас она не появилась, то что-то вы сделали не так. Проверьте все шаги по очереди. На этом все.

Данный пример был проверен и отлажен на системe Windows XP, Nasm for Win32.

Выпуск 9.b

На этом проблемы для пользователей Windows не заканчиваются. Оказалось, что у них под рукой нет утилиты Make. Взять GNU Make для Windows можно здесь:
http://www.atnetsend.net/files/make-3.77.zip

Но не спешите ее скачивать (сначала посмотрите, может она у вас уже есть :) - Make обычно поставляется вместе с другими средствами разработки, например она есть в комплекте LCC-WIN32.
Также существует версия Make от Microsoft - называется NMake.

Outro

Обязательно добейтесь, чтобы все работало, прежде чем мы продолжим! Если что-то не получается - пишите, будем разбираться.



Как всегда, мой почтовый ящик открыт для вас: lonesome@lowlevel.ru
Также вы можете задавать интересующие вас вопросы в форуме lowlevel.ru
Предыдущие выпуски рассылки вы можете найти по этому адресу:
http://subscribe.ru/archive/comp.soft.prog.osdev
Всего наилучшего!
Lonesome

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное