Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сброка toolchain для ARM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Dimchansky
Доброго времени суток,

Попробовал следовать инструкции на страничке:
http://heavy-online.ru/arm-linux/
предварительно скачав все нужные файлы.

Делал пошагово (применял все патчи), а на сборке glibc, где написано,
что собирается очень долго и можно идти пить пиво, конкретно на
строчке:

make 2>&1 | tee make.out

пива попить не удалось, т.к. тут же вывалился с ошибкой:

arm-linux-gcc version.c -c -std=gnu99 -O2 -Wall -Winline -Wstrict-prototypes -Wwrite-strings -g -I../include -I. -I/usr/local/arm/src/BUILD/glibc-2.3.6/csu -I.. -I../libio -I/usr/local/arm/src/BUILD/glibc-2.3.6 -I../sysdeps/arm/elf -I../linuxthreads/sysdeps/unix/sysv/linux/arm -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/arm -I../sysdeps/unix/sysv/linux/arm -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/arm -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/arm -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -nostdinc -isystem /usr/local/arm/lib/gcc/arm-linux/3.4.6/include -isystem /usr/local/arm/sysroot/usr/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DHAVE_INITFINI -o /usr/local/arm/src/BUILD/glibc-2.3.6/csu/version.o -MD -MP -MF /usr/local/arm/src/BUILD/glibc-2.3.6/csu/version.o.dt -MT /usr/local/arm/src/BUILD/glibc-2.3.6/csu/version.o
In file included from version.c:33:
/usr/local/arm/src/BUILD/glibc-2.3.6/csu/version-info.h:2: error: missing terminating " character
/usr/local/arm/src/BUILD/glibc-2.3.6/csu/version-info.h:3: error: missing terminating " character
version.c:40: error: syntax error before string constant
make[2]: *** [/usr/local/arm/src/BUILD/glibc-2.3.6/csu/version.o] Ошибка 1
make[2]: Leaving directory `/usr/local/arm/src/glibc-2.3.6/csu'
make[1]: *** [csu/subdir_lib] Ошибка 2
make[1]: Leaving directory `/usr/local/arm/src/glibc-2.3.6'
make: *** [all] Ошибка 2

В чём может быть проблема?
Может быть нужно ещё какие-то патчи наложить? Я накладывал все, что
нашёл в http://heavy-online.ru/arm-linux/files/packages/patches/

Собираю всё под Ubuntu Feisty 7.04 в Vmware.
Есть идеи?

UPDATE

Похоже, нашёл в чём проблема.
Проблема в dash, который используется в Ubuntu в качестве шелла по умолчанию.

Люди предлагают два варианта:
1. Патчить Makeconfig
2. Поменять dash на bash

Второй мне кажется проще, чем каждый раз патчить Makeconfig.

Узнаём, какой шелл используется по умолчанию:
ls -la /bin/sh

Меняем на bash:
sudo ln -sf /bin/bash /bin/sh

Завтра проверю, поможет ли.
Make_Pic
А меня интересует то-же сборка, но под WIN с использованием CYGWIN -
Кто нибудь здесь может рассказать последовательность сборки по шагам и какие пакеты программ надо иметь для сборки?

Может не совсем в тему - речь идет о сборке GCC под ядро MC68000
Dimchansky
Цитата(Make_Pic @ Aug 7 2007, 06:11) *
А меня интересует то-же сборка, но под WIN с использованием CYGWIN -


Я бы всё-таки рекомендовал Linux под VMware.
Linux сейчас достаточно дружественная система, устанавливается не сложнее WinXP. Если трафик дорогой, то можно заказать тот же диск с Ubuntu за бесплатно (нахаляву).
В 6-ой версии VMWare вообще облегчили жизнь в том плане, что операции drag-and-drop работают между ОС, есть сразу общая папка, общий буфер обмена, даже не замечаешь, что работаешь сразу в двух ОС, складывается впечатление, что это просто окошко с программой. smile.gif
Странник
А если есть тулчейн, на асме для мэйнлупа его использовать можно?
Paramedic
Следую инструкции на странице http://heavy-online.ru/arm-linux/ и не могу преодолеть этап сборки glibc.
При попытке выполнения:
BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar \
RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld \
../../glibc-2.3.6/configure --prefix=/usr --build=i386-unknown-linux \
--host=arm-linux --target=arm-linux --without-fp \
--without-__thread --enable-add-ons=linuxthreads \
--with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
Получаю вот что:
...
checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile

Чтобы это значило?
Собираю всё под Ubuntu 7.04.
andron86
Цитата(Paramedic @ Nov 26 2007, 14:05) *
Следую инструкции на странице http://heavy-online.ru/arm-linux/ и не могу преодолеть этап сборки glibc.
При попытке выполнения:
BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar \
RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld \
../../glibc-2.3.6/configure --prefix=/usr --build=i386-unknown-linux \
--host=arm-linux --target=arm-linux --without-fp \
--without-__thread --enable-add-ons=linuxthreads \
--with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
Получаю вот что:
...
checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile

Чтобы это значило?
Собираю всё под Ubuntu 7.04.

У меня по моему в этом заморочка была,точно не помню:
--build=i386-unknown-linux
постаил свой хост процессор.
Paramedic
Цитата(andron86 @ Nov 26 2007, 17:07) *
У меня по моему в этом заморочка была,точно не помню:
--build=i386-unknown-linux
постаил свой хост процессор.

А это как? Как его название запросить у системы?
andron86
Цитата(Paramedic @ Nov 26 2007, 15:10) *
А это как? Как его название запросить у системы?


в /user посмотри x86-xxx-linux

я точно не помню, давно было.
ghost_gluck
Цитата(Paramedic @ Nov 26 2007, 18:10) *
А это как? Как его название запросить у системы?


Для Debian/Ubuntu Linux попробуй --build=i686-pc-linux-gnu или --build=i686-pc-linux, должно собираться. Свой toolchain собирал ./configure --target=arm-elf --prefix=[toolchain-prefix] --enable-interwork --enable-multilib --with-float=soft

узнать архитектуру и т.д. можно через uname.
uname -ms
-m - print the machine hardware name
-s - print the kernel name (linux, *bsd, aix, etc..)

Готовый toolchain, инструкцию по сборке можно найти http://gnuarm.org/ http://gnuarm.org/support.html
собирал себе таким образом. Бинарники армовские c использованием syscall компилил и исполнял через qemu-arm. Ниже приведен пример, как заставить qemu-arm исполнять бинарники.

Цитата
sudo modprobe binfmt_misc
sudo mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
sudo sh -c 'echo ":arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm:" /proc/sys/fs/binfmt_misc/register'


/usr/bin/qemu-arm - путь к бинарнику эмулятора.
Paramedic
Цитата(ghost_gluck @ Nov 28 2007, 18:17) *
Для Debian/Ubuntu Linux попробуй --build=i686-pc-linux-gnu или --build=i686-pc-linux, должно собираться. Свой toolchain собирал ./configure --target=arm-elf --prefix=[toolchain-prefix] --enable-interwork --enable-multilib --with-float=soft

узнать архитектуру и т.д. можно через uname.
uname -ms
-m - print the machine hardware name
-s - print the kernel name (linux, *bsd, aix, etc..)

Спасибо за совет. Этот этап вроде прошёл, теперь застреваю на
make 2>&1 | tee make.out
С сообщением:
collect2: ld returned 1 exit status
make[1]: *** [/home/mihail/usr/local/arm/src/BUILD/glibc-2.3.6_make/libc.so] Error 1
make[1]: Leaving directory `/home/mihail/usr/local/arm/src/glibc-2.3.6'
make: *** [install] Error 2
andrew_b
Цитата(Dimchansky @ Aug 6 2007, 17:11) *
Узнаём, какой шелл используется по умолчанию:
ls -la /bin/sh

Меняем на bash:
sudo ln -sf /bin/bash /bin/sh
Это принципиально не правильно. У каждого юзера шелл свой. И меняется он командой usermod (либо прямым редактированием файла /etc/passwd) и последующим перелогиниванием. Не надо трогать системный шелл.

Либо временно установите шелл только для этого запуска make, переопределив переменную SHELL:

$ SHELL=/bin/bash make
e-yes
>Это принципиально не правильно. У каждого юзера шелл свой. И меняется он командой usermod (либо прямым редактированием файла /etc/passwd) и последующим перелогиниванием. Не надо трогать системный шелл.

+1

И не надо читать вредные "хауту". То, что мануал по сборке тулчейна и кросскомпиляции ядра от хеви-онлайн на первых местах в гугле несет гораздо больше вреда, чем пользы. Ибо, если опыта до этого не было, практически невозможно что-то собрать, либо труднее, чем разобраться и самостоятельно тему освоить. Многочисленные топики не только на этом форуме - этому подтверждение.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.