Open Watcom подойдёт для создания своей ОС ?

Тема в разделе "WASM.BEGINNERS", создана пользователем repne, 16 июл 2006.

  1. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Заголовок немного неправильно написан мной. Я имел в виду немного другое.
    Как люди и при помощи каких компиляторов пишут код на C++ для своих ОС ?
    Ведь наверное нужно чтобы создавался какой нибудь BIN файл без заголовков,
    только лишь с одним кодом, или какой нибудь OBJ ? Очень хочу знать как это.
    Скачал Open Watcom. Или посоветуйте чем лучше это делать? Спасибо, тема
    очень важная.

    Вот прямая ссылка на последнюю версию Open Watcom.
    Те кто хочет, может сам скачать и попробовать:
    http://downloads.openwatcom.org/ftp/open-watcom-c-win32-1.5.exe (~59 Mb)
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Я сам еще не пробовал, но теоритически сработать должно :)

    1. Можно использовать GRUB для загрузки твоего ядра. Он умеет загружать ELF-файлы (один из видов исполняемых в UNIX). Тогда для компиляции можно использовать gcc + встроенный asm, gcc + какой-либо ассемблер по вкусу.

    2. Еще более теоритический вариант -- использовать MS VS 6.0. Компилируешь проект с ключом /FIXED -- чтобы не генерировались релокации и /BASE:база твоего ядра. Правда, остается вопрос, как ты будешь загружать ядро и передавать ему управление. Можно написать какой-то базовый загрузчик PE (не самый лучший вариант), можно вытащить код и данные в бинарник, предварительно объединив секции кода и данных -- опция /MERGE: (это проще).

    Второй вариант -- плод моего больного воображения. Но причин, по которым работать не будет, вроде, нет.
     
  3. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    У меня была одна дурацкая идея:
    Компильнуть, потом дизассемблировать в файл LST, и ... Только вот проблема
    в том, что формат какой то свой представления. :-(
    Ну должны же быть форматы RAW в компиляторе. Я читал на форуме что вроде
    бы есть. Но сам в опциях не нашёл, хоть перерыл всё. Вот ещё способ. После
    компиляции получается OBJ-файл, вот если его обработать и создать свой файл.
    Но ведь нужно знать формат этого OBJ файла, а я не знаю.



    Mika0x65
    Насчёт GCC. Сегодня залазил на официальный сайт, видел список откомпилированных
    файлов, но не нашёл под Windows.
     
  4. Iceberg

    Iceberg New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    54
    Адрес:
    Санкт-Петербург
    собрать бинарник можно с помощью линкера ld.exe, входящего в пакет djgpp. Пробовал обычный линуксовый линкер, но не удалось найти среди его опции таких, которые позволяют собирать в бинарник. Если кто знает, будет интересно услышать.

    PS: А написать загрузчик PE лишним не будет.
     
  5. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    в бинарник это как?
    ты это имеешь в виду:
    Код (Text):
    1. ld -Ttext 0x0 --oformat=binary -o ouput.bin input.o
    ?
     
  6. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Да дело не в загрузчике PE, а в том чтобы генерировался код без stub вначале, будь то DOS32Extender или TNT и так далее. Вот выход то как раз и состоит в том, чтобы
    создавать код линкером из OBJ :) Спасибо.
     
  7. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Подкиньте пожалуйста ссылку на хорошую какую-нибудь версию djgpp или на ld.exe
     
  8. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Iceberg
    Видимо, ld вполне годится для сборки экзешников в "своём" формате. В этом топике на meos.sysbin как раз есть скрипт и шаблон для линковки сишных обьектников в плоский формат для KolibriOS.
     
  9. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Имхо лучший выход - это загрузчик PE написаный на фасме. И сам код можно будет писать любым компилятором который может генерить бинарники для винды.
    Загрузчик PE это дело весьма простое, я от 320 байт (в скомпиленом виде) писал.
     
  10. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Скачал djgpp 2.04, но не нашёл там ld.exe, скажите где же его искать то?
    Может я что-то не понимаю... Может он теперь по другому называется?


    Что касается компиляторов которые создают PE код. Я если ты знаешь
    спрашиваю про OpenWatcom, но при помощи него получается файл для
    Windows всегда с приличной "шапкой". То есть stub большой. Ты отсеивал
    ненужную информацию? :-D Поясни пожалуйста, потому что это очень важно.

    Даже если я напишу просто

    Код (Text):
    1. void main(){
    2.  
    3.   int x=0;
    4.  
    5. };
    EXE файл будет "весить" 22016 и в нём будет много ненужных мне данных.

    А при помощи чего делать ?
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    repne
    Когда я последний раз ставил Cygwin, был там ld.exe. В демо-версии BlitzMax он тоже есть. Называется LD.EXE. 553Кб.
     
  12. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Начал скачивать BlitzMax,а вот скачал Cygwin, инсталльнул (около 54 мб получилось),
    но не нашёл поиск LD.exe :))))
    Ура, в BlitzMax`е есть ld.exe.
     
  13. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Арррггх. Так и хочеться написать автору fasm`а , чтобы он начал писАть fcpp :)))
    Flat C++, чтобы как и в fasm`е создавались bin-файлы. ЭЭЭЭЭххх.
     
  14. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    repne
    А в чём собственно проблема? И на VC++ можно создать "bin" файл.
    Делаешь обычный PE, указывая линкеру объединить все секции и нужный адрес загрузки (с учётом отрезаемого заголовка).
    Затем отрезаешь заголовок и bin готов. :derisive:
     
  15. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Это всё не то. У меня голова пухнет от количества информации перелопаченной сегодня.
    Нужно переварить всё это.
    Жду ответа от человека который говорил про использование любого компилятора
    создающего PE файл. Каким лучше то. Попробую VC.Net 2005.
     
  16. repne

    repne New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2006
    Сообщения:
    39
    Адрес:
    Москва
    Наткнулся в описании к OpenWatcom на такую строчку (выделена жирным):

    The Open Watcom Linker is capable of producing a number of executable file formats. The following lists these executable file formats.
    · DOS executable files
    · ELF executable files
    · executable files that run under FlashTek's DOS extender
    · executable files that run under Phar Lap's 386|DOS-Extender
    · executable files that run under CauseWay DOS extender, Tenberry Software's DOS/4G and DOS/4GW DOS extenders, and compatible products
    · NetWare Loadable Modules (NLMs) that run under Novell's NetWare operating system
    · OS/2 executable files including Dynamic Link Libraries
    · QNX executable files
    · 16-bit Windows (Win16) executable files including Dynamic Link Libraries
    · 32-bit Windows (Win32) executable files including Dynamic Link Libraries
    · raw binary images
    · Intel Hex files (Hex80, Hex86 and extended linear)


    Вот только чёрт возьми не написано как это реализовать. Какие параметры подставить.
    Я буду искать дальше, но если кто знает - поделитесь.