Страница 1 из 1
Компилирование С-кода для выполнения вне ОС
Добавлено: 07 апр 2007, 21:42
Victor Gr.
Ребята, подскажите. А как компилируется Си-код для выполнения вне ОС?
Например, для размещения в области загрузочного сектора, считывания оттуда BIOS-ом и выполнения процессором.
Это какие-то опции компилятора или просто непревращённый ещё в ELF бинарный код?
Добавлено: 11 апр 2007, 20:17
joub
ASM учи
гаразда круче будет ! ))
на С++ делал boot loder, но со всеми функциями он многа весил, а на асме гоооооразда меньше )
Re: Компилирование С-кода для выполнения вне ОС
Добавлено: 11 апр 2007, 20:35
ZvK
Victor Gr. писал(а):Ребята, подскажите. А как компилируется Си-код для выполнения вне ОС?
Например, для размещения в области загрузочного сектора, считывания оттуда BIOS-ом и выполнения процессором.
Это какие-то опции компилятора или просто непревращённый ещё в ELF бинарный код?
открой для себя скрипты линковщика и утилиты типа objcopy
Добавлено: 11 апр 2007, 20:37
ZvK
joub писал(а):ASM учи :) гаразда круче будет ! ))
на С++ делал boot loder, но со всеми функциями он многа весил, а на асме гоооооразда меньше )
совсем не обязательно
Добавлено: 11 апр 2007, 20:43
joub
неспорю но асм для этих дел лучше. С(++) эт уже то что загружают. )
Добавлено: 14 апр 2007, 09:38
rei3er
boot.o объектный файл (полученный из *.[c/cpp/cc/...] или *.[S/s])
вообще, boot-сектор никто на С не пишет, хотя бы потому, что С-компилятор (GCC) не сможет сгенерировать чистый 16 битный код
хак с
поможет, но, т. к GCC в любом случае сгенерирует 32-ух битный код, для каждой 32-ух битной инструкции GAS поставит префикс 0x66, что увеличивает размер инструкции на 1 байт (что важно, потому как boot-сектор должен быть максимально функциональным при минимальном весе (+ ограничение в 512 байт)) и время выполнения на 1 такт
Добавлено: 16 апр 2007, 08:48
ZvK
Я так понимаю, вопрос задан общий, а загрузочный сектор бытовых PC -- это только пример?
В общем случае, "ld --oformat binary" -- плохой метод, так как получение предварительно ELF'а, особенно с debug символами, позволяет сохранить все адреса (загрузки и т.д.), а так же использовать source-level отладчик через JTAG, например.
Добавлено: 26 апр 2007, 17:14
red f0x
В общем случае, как раз-таки, почему бы и нет? ld --oformat вполне приемленый путь, ИМХО. + as для 16-битного кода,
а писать бут-сектора на с++, это да, классный юмор
Добавлено: 26 апр 2007, 18:07
ZvK
чукча не читатель, чукча писатель?
Добавлено: 27 апр 2007, 08:53
red f0x
острим? и как, получается?
И с какого боку здесь JTAG? Может уже сразу тестером лезть отлаживать код, да?
Добавлено: 27 апр 2007, 10:25
ZvK
вопрос исчерпан, imho.
PS: перечитай на досуге еще раз, и еще много, много раз.
Добавлено: 27 апр 2007, 11:07
red f0x
угу, умно, ничего не скажешь.
PS: не так уж интересно тебя перечитывать, не льсти себе
Добавлено: 06 май 2007, 12:41
rei3er
согласен, ELF можно создать для получения карты, но не более того
для boot-сектора нужен бинарный формат