|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Dmitry Ponyatov 2:5057/18.29 19 Aug 2006 13:56:52 To : Dmitry E Oboukhov Subject : получить чистый бинарник -------------------------------------------------------------------------------- DEO> ну и компиляция DEO> gcc -c main.c -o main.o DEO> gcc main.o -o test.elf а должно быть gcc -nostdlib -o main.o -c main.c targetasm startup.asm ldd -f binary -T 0x10000 -o main.bin startup.o main.o bin2hex main.bin main.hex точноть параметров ldd не гарантируют -- думаю тут меня поправят -f binary включает линковку в бинарник -T 0x10000 устанавливает в бинарнике ORG на второй 64К банк памяти качни с нета пяток мелких проектов для твоей целевой платформы, и см. Makefile и кстати твой _main должен вызываться стартапом (у меня для i386 это пяток команд на асме), который должен по крайней мере выставить стек, и самый правда необязательный геморрой, который я так и не осилил -- инициализировать менеджер кучи, и в сишном коде реализовать свой аллокатор памяти, и заставить работать ООПшные фигни вот мой стартап по памяти: .org 0x10000 ; код начинается во вторых 64К линейной памяти ; (protected mode 4Gb flat включался дискетным загрузчиком) _startup: cli mov byte [0xB8000+0],'X'; \ вывод желтого X в левом верхнем mov byte [0xB8000+1],14 ; / углу экрана для контроля mov esp,0x10000 ; стек размещается в нижних 64К ОЗУ call _main hlt ; останов на случай возврата из _main при вызове линкера вначале идет startup.o и он размещается с адреса -T 0x10000, за ним помещается твой main.o и прочие модули --- * Origin: forth@km.ru (2:5057/18.29) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/2426973afca56.html, оценка из 5, голосов 10
|