Компилирование С-кода для выполнения вне ОС

Все о программировании под *nix
Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Компилирование С-кода для выполнения вне ОС

Сообщение Victor Gr. »

Ребята, подскажите. А как компилируется Си-код для выполнения вне ОС?

Например, для размещения в области загрузочного сектора, считывания оттуда BIOS-ом и выполнения процессором.

Это какие-то опции компилятора или просто непревращённый ещё в ELF бинарный код?

joub
Заглянувший
Сообщения: 10
Зарегистрирован: 25 мар 2007, 14:47
Откуда: планета Земля !.. шутка, с марса мы )

Сообщение joub »

ASM учи :) гаразда круче будет ! ))
на С++ делал boot loder, но со всеми функциями он многа весил, а на асме гоооооразда меньше )
$-]

ZvK
Фанатеющий
Сообщения: 140
Зарегистрирован: 30 май 2006, 18:07
Контактная информация:

Re: Компилирование С-кода для выполнения вне ОС

Сообщение ZvK »

Victor Gr. писал(а):Ребята, подскажите. А как компилируется Си-код для выполнения вне ОС?

Например, для размещения в области загрузочного сектора, считывания оттуда BIOS-ом и выполнения процессором.

Это какие-то опции компилятора или просто непревращённый ещё в ELF бинарный код?
открой для себя скрипты линковщика и утилиты типа objcopy

ZvK
Фанатеющий
Сообщения: 140
Зарегистрирован: 30 май 2006, 18:07
Контактная информация:

Сообщение ZvK »

joub писал(а):ASM учи :) гаразда круче будет ! ))
на С++ делал boot loder, но со всеми функциями он многа весил, а на асме гоооооразда меньше )
совсем не обязательно

joub
Заглянувший
Сообщения: 10
Зарегистрирован: 25 мар 2007, 14:47
Откуда: планета Земля !.. шутка, с марса мы )

Сообщение joub »

неспорю но асм для этих дел лучше. С(++) эт уже то что загружают. )
$-]

rei3er
Заглянувший
Сообщения: 4
Зарегистрирован: 19 фев 2006, 20:39

Сообщение rei3er »

Код: Выделить всё

# ld --oformat binary boot.o -o boot
boot.o объектный файл (полученный из *.[c/cpp/cc/...] или *.[S/s])
вообще, boot-сектор никто на С не пишет, хотя бы потому, что С-компилятор (GCC) не сможет сгенерировать чистый 16 битный код
хак с

Код: Выделить всё

__asm__(".code16");
...
поможет, но, т. к GCC в любом случае сгенерирует 32-ух битный код, для каждой 32-ух битной инструкции GAS поставит префикс 0x66, что увеличивает размер инструкции на 1 байт (что важно, потому как boot-сектор должен быть максимально функциональным при минимальном весе (+ ограничение в 512 байт)) и время выполнения на 1 такт

ZvK
Фанатеющий
Сообщения: 140
Зарегистрирован: 30 май 2006, 18:07
Контактная информация:

Сообщение ZvK »

Я так понимаю, вопрос задан общий, а загрузочный сектор бытовых PC -- это только пример?

В общем случае, "ld --oformat binary" -- плохой метод, так как получение предварительно ELF'а, особенно с debug символами, позволяет сохранить все адреса (загрузки и т.д.), а так же использовать source-level отладчик через JTAG, например.

Аватара пользователя
red f0x
Неотъемлемая часть форума
Сообщения: 338
Зарегистрирован: 08 мар 2004, 01:41

Сообщение red f0x »

В общем случае, как раз-таки, почему бы и нет? ld --oformat вполне приемленый путь, ИМХО. + as для 16-битного кода,
а писать бут-сектора на с++, это да, классный юмор :D
Ну какая работа со строками может быть в языке, название которого является не строкой, а символом? (c) Sergue E. Leontiev

ZvK
Фанатеющий
Сообщения: 140
Зарегистрирован: 30 май 2006, 18:07
Контактная информация:

Сообщение ZvK »

чукча не читатель, чукча писатель?

Аватара пользователя
red f0x
Неотъемлемая часть форума
Сообщения: 338
Зарегистрирован: 08 мар 2004, 01:41

Сообщение red f0x »

острим? и как, получается?
И с какого боку здесь JTAG? Может уже сразу тестером лезть отлаживать код, да?
Ну какая работа со строками может быть в языке, название которого является не строкой, а символом? (c) Sergue E. Leontiev

ZvK
Фанатеющий
Сообщения: 140
Зарегистрирован: 30 май 2006, 18:07
Контактная информация:

Сообщение ZvK »

вопрос исчерпан, imho.

PS: перечитай на досуге еще раз, и еще много, много раз.

Аватара пользователя
red f0x
Неотъемлемая часть форума
Сообщения: 338
Зарегистрирован: 08 мар 2004, 01:41

Сообщение red f0x »

угу, умно, ничего не скажешь.

PS: не так уж интересно тебя перечитывать, не льсти себе
Ну какая работа со строками может быть в языке, название которого является не строкой, а символом? (c) Sergue E. Leontiev

rei3er
Заглянувший
Сообщения: 4
Зарегистрирован: 19 фев 2006, 20:39

Сообщение rei3er »

согласен, ELF можно создать для получения карты, но не более того
для boot-сектора нужен бинарный формат

Ответить