LINUX.ORG.RU

Кросскомпиляция - трудности с тестовой программой


0

0

1. Есть программа void main() { int a = 1; } 2. Есть Makefile a-sh4.bin: a-sh4.o $(LD) -s a-sh4.o --entry=0x0C000000 -nostatrfiles -nodefaultlibs -nostdlib --oformat=binary -o a-sh4.bin a-sh4.o: a.c $(CC) -c a.c -o a-sh4.o 3. Когда я не указываю --entry и $(LD) -s a-sh4.o -nostatrfiles -nodefaultlibs -nostdlib --oformat=binary -o a-sh4.bin То получаю программу такую же как и в 2) ( сравнил глазами в HEX ) - эта программа не работает на моей железке. 4. Хочу попробовать загрузить с адреса 0x0C000000 собранную по правилам 2) программу, и думаю что она тоже не заработает потому что она одинакова с 3) Вопрос: В что я не учел? (пробовал переименовывать main в foo - хотя насколько я понимаю название не имеет значение)

anonymous
Ответ на: комментарий от anonymous

собираешь на чем? binutils, gcc собрал для целевой платформы? Необходимые хидеры и объедки (.o) отдал линкеру? минимальные необходимые crtX.o хотя бы должны быть.

anonymous
()
Ответ на: комментарий от anonymous

>binutils, gcc собрал для целевой платформы - да конечно для sh4 у меня кроскомпилятор и все утилиты типа ar, objectcopy собраны.

>Необходимые хидеры и объедки (.o) отдал линкеру тут не совсем понял, что за обьедки, Вобщем когда я собираю ELF то вижу там в описании что это под SH4 Renesas поэтому предполагаю что с кросскомпилятором все нормально

---------------------------------- Да еще: я хочу получить код который запускаю на чистом железе (на железяке нет Linux и пока не надо)

anonymous
()

Почти получилось. Оказывается при компиляции не указал bigendian. Теперь дугая проблемма: в map файле вижу, что стартовый адрес не мой (--entry=0x0C000000), там стоиит по умолчанию 0x004000.

Опция --image-base у меня почемуто не поддерживается и вообще нужна ли она?

anonymous
()
Ответ на: комментарий от anonymous

укажи нужный тебе проц, типа -m4 и в зависимости от того, если ли у тебя fpu -m4-nofpu, -m4-single-only/-m4-single, для big-endian -mb, -ml для little endian

anonymous
()
Ответ на: комментарий от anonymous

Да это я все сделал, спасибо. Проблемма в том что указываю при линковке с помощью моего ld -e 0x0C000000 (он естественно тоже кросс), а в map файле вижу 0x400000 LOAD a-sh4.o 0x0000000000400000 PROVIDE (__executable_start, 0x400000) 0x0000000000400000 . = (0x400000 + SIZEOF_HEADERS). Это же значение 0x400000 ставиться по умолчанию когда я вообще не указываю --entry. Естественно всякие пинания колес были типа --entry=XXX, --entry XXX, -e XXX и проч. :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.