Перейти к содержанию
    

Сброка toolchain для ARM

Доброго времени суток,

 

Попробовал следовать инструкции на страничке:

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

 

Завтра проверю, поможет ли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А меня интересует то-же сборка, но под WIN с использованием CYGWIN -

Кто нибудь здесь может рассказать последовательность сборки по шагам и какие пакеты программ надо иметь для сборки?

 

Может не совсем в тему - речь идет о сборке GCC под ядро MC68000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А меня интересует то-же сборка, но под WIN с использованием CYGWIN -

 

Я бы всё-таки рекомендовал Linux под VMware.

Linux сейчас достаточно дружественная система, устанавливается не сложнее WinXP. Если трафик дорогой, то можно заказать тот же диск с Ubuntu за бесплатно (нахаляву).

В 6-ой версии VMWare вообще облегчили жизнь в том плане, что операции drag-and-drop работают между ОС, есть сразу общая папка, общий буфер обмена, даже не замечаешь, что работаешь сразу в двух ОС, складывается впечатление, что это просто окошко с программой. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если есть тулчейн, на асме для мэйнлупа его использовать можно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Следую инструкции на странице 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Следую инструкции на странице 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

постаил свой хост процессор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня по моему в этом заморочка была,точно не помню:

--build=i386-unknown-linux

постаил свой хост процессор.

А это как? Как его название запросить у системы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А это как? Как его название запросить у системы?

 

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

 

я точно не помню, давно было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А это как? Как его название запросить у системы?

 

Для 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 - путь к бинарнику эмулятора.

Изменено пользователем ghost_gluck

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Узнаём, какой шелл используется по умолчанию:

ls -la /bin/sh

 

Меняем на bash:

sudo ln -sf /bin/bash /bin/sh

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

 

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

 

$ SHELL=/bin/bash make

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

+1

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...