LINUX.ORG.RU

ошибка на ARM


0

1

Постигаю азы кросс-компиляции для ARM, возникают проблемы. Пока попробовал 2 способа: через Sourcery и через

sudo apt-get install qemu-kvm-extras-static
sudo build-arm-chroot lenny qemu
sudo chroot qemu

Оба полученных файла при запуске дают один и тот же результат -

Syntax error: word unexpected (expecting ")")

Причем из sourcery я делал вообще по мануалу пример, а из qemu хелловорлд пытался собрать.
ЧЯДНТ? Что читать, куда копать?


Ответ на: комментарий от frey
~/workspace/factorial_s/Debug$ file factorial_s
factorial_s: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped


main.c -

#include <stdio.h>
int factorial(int n) {
if (n == 0)
return 1;
return n * factorial (n - 1);
}
int main () {
int i;
int n;
for (i = 0; i < 10; ++i) {
n = factorial (i);
printf ("factorial(%d) = %d\n", i, n);
}
return 0;
}

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

Код рабочий

# ./a.out 
factorial(0) = 1
factorial(1) = 1
factorial(2) = 2
factorial(3) = 6
factorial(4) = 24
factorial(5) = 120
factorial(6) = 720
factorial(7) = 5040
factorial(8) = 40320
factorial(9) = 362880
# uname -mv
#10 PREEMPT Thu Feb 3 02:08:31 MSK 2011 armv5tejl

gcc version 4.3.4 (crosstool-NG-1.9.2)

Библиотеки libc в /lib скопированы на целевую платформу ? Или собери статически для начала.

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

А каким компилятором собираете, каким собран chroot, может там abi разный?

Возьмите тот, что arm-none-linux-gnueabi.

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

Насчет libc. На хосте собиралось на 2.12.1, на плате с arm - 2.3.3. Может дело в них? Если копировать, то копировать libc.so.6 и libc-2.12.1.so, я верно понимаю?

hdclnr
() автор топика

Я, наверное, чего-то не знаю, но Syntax error намекает на какой-то интерпретатор скриптов.

sudo build-arm-chroot lenny qemu

sudo chroot qemu

Прикольный способ запуска qemu. Это qemu-user?

tailgunner ★★★★★
()
Ответ на: комментарий от true_admin

Пробовал заменить libc.so.6 и libc.so на файлы, взятые с хост-машины, но пишет, что read-only файловая система. Пробовал remount, но после mv /home/newlib/libc.so.6 /lib/libc.so.6 начинает писать, что отсутствует эта библиотека и практически ни одна команда из busybox не работает. После перезагрузки всё работает и файл старой версии лежит в /lib/. Ничего не понимаю.

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

>Пробовал заменить libc.so.6 и libc.so на файлы, взятые с хост-машины
из /lib хост-машины? у вас и хост-машина на ARM-е?

пробуй скомпилить на ARM-овой машине, потом ldd на бинарник, file для каждой библиотеки.
и смотри, чтобы всё правильно было.
ФС для ARM-машины откуда брал?

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

Нет, не на ARM-е. Тогда не прокатит?
На арм-машине ничего не скомпилить же, ни gcc, ничего такого. Busybox и bash урезанный. Машина пришла уже с ФС и системой на борт, стоит там BlueCat Linux.

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

>На арм-машине ничего не скомпилить же, ни gcc, ничего такого. Busybox и bash урезанный. Машина пришла уже с ФС и системой на борт, стоит там BlueCat Linux.


что за устройство такое?

dimon555 ★★★★★
()

Пробовал собирать статически двумя разными кросстулами - всё так же тухло. Плюс ко всему на целевой машине используется ramfs в / что путает ещё больше =(

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

жесть.

Нет, не на ARM-е. Тогда не прокатит?

конечно, нет. как, ты представляешь, процессор с инструкциями архитектуры arm будет выполнять команды i686 ?

даже не знаю, что и посоветовать... :(
arm-овые либы на хосте, надеюсь, все стоят? их-то как раз можно попробовать скопировать на целевую.

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

Перечитал своё сообщение. Так я libc.so.6 и проч брал не из самой системы же, а из кросс-компилятора, которым собирал. Какая тогда разница?
ARM-библиотеки стоят все. Собирал по хаутушкам crosstool, crosstool-ng и убунтовский. Ну и + Code Sourcery (сначала грешил на кросстул потому так много и наставил). В $PATH прописано что нужно.
В общем, научился заменять библиотеки в /lib/ через bash на целевой системе, но новые неожиданности проявились - сразу после операций в /lib/ целевой ничего не запускается как и раньше. А вот после перезагрузки все изменения аннулируются, как раз я думаю из-за того, что там ramfs в / стоит. Вот такие пироги.

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