1

В общем вопрос описан в теме. Находил некоторые руководства, но никак: то ошибки во время configure, то во время make. Сейчас все не перечислю.

Программирую на i686, но целевая машина работает на ARM архитектуре. В общем что мне понадобиться для этого?

2

рассказывай по порядку:
гда сборка происходит? кросс-компиляция? нативная? qemu?
если кросс-компиляция, то откуда тулчейн взял? тот же вопрос, про qemu, как настроил?

srg_btl⇓ пишет:

Находил некоторые руководства, но никак: то ошибки во время configure, то во время make. Сейчас все не перечислю.

какие руководства? что делал? какие ошибки? лучше давай полные логи действий/сборки с нуля...

ну и для общей инфы: что за девайс?

95% процентов проблем находятся между клавиатурой и стулом.

3

Использую Debian, да кросс-компиляция, собрал gcc для ARM как описано по этой ссылке: https://code.google.com/p/uos-embedded/wiki/gcc_arm_ru.
Немного покопался по документации и немного запутался в параметрах

--target=
--host=
--build=
CC=

Насколько я понимаю 1 параметр - это для какой машины собирается, 2 - на какой (т.е. мы используем i686-linux), 3 - немного не понятный, ну и 4 это мы указуем компилятор который будет собирать (в моем случае arm-linux-gcc)

Вот несколько ссылок по которым пробовал собирать:
http://blog.galemin.com/2010/10/how-to- … on-ubuntu/
http://embetek.blogspot.com/2011/10/val … r-arm.html
http://www.mail-archive.com/valgrind-us … 01812.html
https://sites.google.com/a/sangjin.info … nd-for-arm

Лог файлы к сожалению залить не могу так как пишу с телефона.
Если можно то на примере ARM9. Спасибо

4 (23.03.2013 21:30:05 отредактировано Fat-Zer)

srg_btl⇓ пишет:

Насколько я понимаю 1 параметр - это для какой машины собирается, 2 - на какой (т.е. мы используем i686-linux), 3 - немного не понятный, ну и 4 это мы указуем компилятор который будет собирать (в моем случае arm-linux-gcc)

нет.... не так... практически до наоборот всё...
build - текущая система, на которой будет производиться сборка (обычно угадывается автоматически).
host - целевая система, на которой бинарники будут запускаться.
target - используется только при сборке тулчейна для кросс-компиляции.

srg_btl⇓ пишет:

Лог файлы к сожалению залить не могу так как пишу с телефона.

без логов дальше и говорить особо не о чем...

95% процентов проблем находятся между клавиатурой и стулом.

5

Итак, значит опишу свои шаги:
1) Устанавливаю компилятор arm-linux-gnueabi-gcc:

export CROSS_COMPILE=arm-linux-gnueabi-
export ARCH=armel

echo "deb http://www.emdebian.org/debian/ lenny main" >> /etc/apt/sources.list
apt-get update
apt-get install gcc-4.3-arm-linux-gnueabi

2) Пробую скомпилировать с помощью этого компилятора исходник http://valgrind.org/docs/manual/quick-s … .interpret

arm-linux-gnueabi-gcc -g -o0 main.c -o run_arm
./run_arm 

bash: ./run_arm: cannot execute binary file

Как понимаю все хорошо раз бинарник не запускаеться (т.к. он предназначен для АРМ-архитектуры

3) Устанавливаю valgrind:

./configure --target=arm-none-linux-gnueabi --host=i686-linux
make
make install

Все нормально устанавливаеться.

4) Пробую потестить свой бинарник

valgrind --leak-check=yes ./run_arm
valgrind: failed to start tool 'memcheck' for platform 'arm-linux': No such file or directory

Бинарники собраные для нашей платформы тестяться нормально.

Какие параметры нужно указать в ./configure ?

6

srg_btl⇓ пишет:

1) Устанавливаю компилятор arm-linux-gnueabi-gcc:

по идее с ним не должен заработать... valgrind портирован только под armv7 (cortex'овские ядра)
покажи на всякий пожарный arm-linux-gnueabi-gcc -v.

у меня собрался для armv7a-hardfloat-linux-gnueabi. тулчейн собрал гентушным crossdev'ом. где такой под deb-дистры такой взять я с ходу не скажу...
под qemu в user-mod'е запускается, но падает на exec()'е. полноценную виртуалку для теста оборудовать мне лень...

srg_btl⇓ пишет:

./configure --target=arm-none-linux-gnueabi --host=i686-linux

нет, это собрался обычный valgrind под x86.
надо ./configure --host=arm-none-linux-gnueabi.
но скорей всего выдаст ошибку, что такая архитектура не поддерживается...
можно подправить ./configure, но тогда скорей всего всё равно не соберётся...

ЗЫ: ещё при сборки надо указывать какой-нть --prefix, чтобы make install не загаживал систему...

95% процентов проблем находятся между клавиатурой и стулом.

7

arm-linux-gnueabi-gcc -v

Using built-in specs.
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --enable-languages=c,c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/4.2.4 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --disable-libssp --disable-sjlj-exceptions --enable-checking=release --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include --build=i486-linux-gnu --host=i486-linux-gnu --target=arm-linux-gnueabi
Thread model: posix
gcc version 4.2.4 (Debian 4.2.4-6)

Отредактировал configure, заменил armv7* на arm*. Пробую:

./configure --host=arm-none-linux-gnueabi --prefix=/home/valgrind
(...)
Maximum build arch: arm
         Primary build arch: arm
       Secondary build arch: 
                   Build OS: linux
       Primary build target: ARM_LINUX
     Secondary build target: 
           Platform variant: vanilla
      Primary -DVGPV string: -DVGPV_arm_linux_vanilla=1
         Default supp files: exp-sgcheck.supp xfree-3.supp xfree-4.supp glibc-2.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-2.X.supp 
make
echo "# This is a generated file, composed of the following suppression rules:" > default.supp
echo "# " exp-sgcheck.supp xfree-3.supp xfree-4.supp glibc-2.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-2.X.supp  >> default.supp
cat exp-sgcheck.supp xfree-3.supp xfree-4.supp glibc-2.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-2.X.supp  >> default.supp
make  all-recursive
make[1]: Entering directory `/home/lifeline/valgrind-3.8.1'
Making all in include
make[2]: Entering directory `/home/lifeline/valgrind-3.8.1/include'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/lifeline/valgrind-3.8.1/include'
Making all in VEX
make[2]: Entering directory `/home/lifeline/valgrind-3.8.1/VEX'
make  all-am
make[3]: Entering directory `/home/lifeline/valgrind-3.8.1/VEX'
gcc -DHAVE_CONFIG_H -I. -I..  -I.. -I../include -I../VEX/pub -DVGA_arm=1 -DVGO_linux=1 -DVGP_arm_linux=1 -DVGPV_arm_linux_vanilla=1 -Ipriv  -m32 -mpreferred-stack-boundary=2 -O2 -g -Wall -Wmissing-prototypes -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations -Wno-format-zero-length -fno-strict-aliasing -fno-builtin -marm -mcpu=cortex-a8 -Wbad-function-cast -Wcast-qual -Wcast-align -fstrict-aliasing -Wno-long-long  -Wno-pointer-sign -fno-stack-protector -MT libvex_arm_linux_a-main_globals.o -MD -MP -MF .deps/libvex_arm_linux_a-main_globals.Tpo -c -o libvex_arm_linux_a-main_globals.o `test -f 'priv/main_globals.c' || echo './'`priv/main_globals.c
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1: error: unrecognized command line option "-marm"
priv/main_globals.c:1: error: bad value (cortex-a8) for -mtune= switch
make[3]: *** [libvex_arm_linux_a-main_globals.o] Error 1
make[3]: Leaving directory `/home/lifeline/valgrind-3.8.1/VEX'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/lifeline/valgrind-3.8.1/VEX'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/lifeline/valgrind-3.8.1'
make: *** [all] Error 2

8

srg_btl⇓ пишет:

Отредактировал configure, заменил armv7* на arm*. Пробую:

srg_btl⇓ пишет:

./configure --host=arm-none-linux-gnueabi --prefix=/home/valgrind

-none лишний

и для чистоты эксперимента пробуй начинать с чистого дерева...

95% процентов проблем находятся между клавиатурой и стулом.

9

Fat-Zer⇓ пишет:

и для чистоты эксперимента пробуй начинать с чистого дерева...

Попробовал... Результат тот же...

10

srg_btl⇓ пишет:

Попробовал... Результат тот же...

давай полный лог конфигурации...

95% процентов проблем находятся между клавиатурой и стулом.

11 (26.03.2013 14:09:58 отредактировано srg_btl)

Собирал таким способом:

./configure CC=arm-linux-gnueabi-gcc --target=arm-none-linux-gnueabi --host=armv7-none-linux-gnueabi --build=i686-linux --prefix=/home/lifeline/valgrind/

make
make install

переместил папку на ARM
но опять трабл:

 ./valgrind -v
valgrind: failed to start tool 'memcheck' for platform 'arm-linux': No such file or directory

12

srg_btl⇓ пишет:

переместил папку на ARM

README читал?

README пишет:

Important!  Do not move the valgrind installation into a place
different from that specified by --prefix at build time.  This will
cause things to break in subtle ways, mostly when Valgrind handles
fork/exec calls.

если не поможет, то посмотри strace'ом, на чём валится...

95% процентов проблем находятся между клавиатурой и стулом.