LINUX.ORG.RU

Собрать ng-crosstool для MB 77.07

 ,


0

1

Беру конфиг config-hardfp-3.10 из https://github.com/RC-MODULE/crosstool-ng-configs, переименовываю config-hardfp-3.10 в .config, получается такая штука https://gist.github.com/ft232r/c0a0ee853d252927a265

crosstool собирал из https://github.com/crosstool-ng/crosstool-ng (master, последний коммит 767aa9befcf74d6b70f37539ac3a442370a9421b). Система - Ubuntu 14.04.1 x86_64.

Запускаю ct-ng build, оно отрабатывает и говорит https://gist.github.com/ft232r/3b5b6c2f3c9c96dd8c41. Смотрю build.log в надежде что-то найти, вижу только https://gist.github.com/ft232r/391710837f0eeed3dbb3. Воткнул echo в соответствующий скрипт, вижу что система сборки пытается запустить arm-module-linux-gnueabihf-gcc, при этом единственный собранный gcc который я нашел в папке .build называется x86_64-build_unknown-linux-gnu-gcc (uname -a выдает Linux ubuntu 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux).

Возникает вопрос: может быть у меня не доустановлены все необходимые зависимости или же crosstool-ng кривая?

Cast ncrmnt

0. Во-первых, рекомендую использовать не git master кросстула, а релизнутый вариант. В git срезе могут быть самые разные, веселые и непредсказуемые косяки - на то это и git master. Таррболл берем с http://crosstool-ng.org/. Те бинарники, что выложены собраны ct-ng 1.18.0, 1.19.0 тоже нормально собирает, я проверял.

1. Перед тем как собирать кросстул надо убедиться что в дереве исходников ядра .config отвечает текущему конфигу ядра для mb77.07

cp arch/arm/configs/uemd_defconfig .config

Либо, можно взять мой текущий конфиг тут:

http://pastebin.com/FKf4R11B

2. Поправить путь к исходникам ядра через ct-ng menuconfig. Так же можно взять gcc поновее. Новые версии libc лучше не выбирать - ломают (ВНЕЗАПНО) некоторые альза-утилы, типа speaker-test'а, баг где-то в апстриме.

3. ct-ng build

4. (опционально) Установить в sysroot тулчейна дополнительные библиотеки. Обычно я в sysroot добавляю alsalib mad libelf v4l и easynmc. Если надо, могу поделиться скриптом, который делает это автоматом.

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

1.18.0 при компиляции libc свалился в кору (воспроизводится постоянно), с 1.19.0 - вроде все собралось

спасибо!

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

Хм, как любопытно. У меня такое поведение не воспроизводится (debian wheezy). С падениями и косяками, в полуручном виде проходит только сборка канадиан-кроссом для win32.

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

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

P.s. это я все пытаюсь вкорячить wifi свисток (под рукой Asus USB-N10, т.е. rtl8188su), вроде ядро после пересборки свисток узнает в dmesg-е, но iwconfig-а нет, поэтому поднять его - не могу ну и плюс в ifconfig -a свисток не отображается.

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

Через binfmt-misc делается, ядро не нужно.

apt-get install qemu-user-static
cp `which qemu-arm-static` ./rootfs/usr/bin/
mount -o bind /proc ./rootfs/proc
mount -o bind /sys ./rootfs/sys
mount -o bind /dev ./rootfs/dev
chroot ./rootfs/
cp /etc/resolv.conf ./rootfs/etc/resolv.conf
...

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

продолжаю тупить: в комплекте с raspbian-ом шел файлик filesystem.ubifs, как его превратить в папку rootfs, а потом обратно превратить в filesystem.ubifs?

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

Как вариант - на usb флешку и root=/dev/sda1 (это если 1 гига нанда мало будет), в треде выше я как раз выкладывал скрипты сборки/разборки rootfs

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

Скачал с http://module.ru/mb7707/ выложенный кросс тулчейн. Распаковал, настроил пути и бац, никакие бинарники не запускаются. Порылся в сети и нашел фразу, что этот тулчейн для х64, а у меня 32 разрядный виртуальный debian. Попытался собрать сам, но из меня еще тот линуксоид. Не получилось вообщем.

Уважаемый ncrmnt, здесь на форуме вы упоминали, что собираетесь выложить тулчейн для 32 разрядных систем. Я с большим нетерпением это жду. Сориентируйте меня по срокам. Когда можно ожидать этого события.

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

Пока еще не собирал еще, другими работами занят. Постараюсь сегодня-завтра в 32-хбитном чруте собрать.

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

Еще вопрос.

Просматривал содержимое тулчейна и увидел, что исползуется gcc-4.9 и соответствующие версии либ. А вот в прошивке для платы (что в debian, что в raspbian) версии библиотек соответствуют gcc-4.6. Я так понимаю, что прога собранная в gcc-4.9 с либами от gcc-4.6 работать не будет?

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

Должно работать, версии libc одинаковые с debian'ом идут. 4.8-4.9 используется так как часть нашего софта хочет C++11 и последних фичей.

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

Должно работать, версии libc одинаковые с debian'ом идут.

Не работает. Вообщем замутил еще одну виртуальную debian x64. Поставил туда ваш кросс тулчейн и удачно скомпилил прогу. Установл ее на плату, запустил, а она пишет, что не найдены libstdc++ версии такой-то и libc версии такой-то.

Помыкался по интернетам, но так и не одолел собрать кросс тулчейн на базе gcc 4.6. Сделал в лоб. Скопировал из вашего тулчейна эти либы на плату и ... отвалились все команды оболочки, использующие libc (как я думаю, т.к. segmentation fault полезло).

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

Такс. начнем с того, что зашито в МВ77.07?

Если raspbian - то использовать надо armhf (c триплетом arm-module-linux-gnueabihf-) тулчейн. Если debian - то armel (c триплетом arm-module-linux-gnueabi-). Если совсем думать лень/надо что-то быстро собрать - можно собирать со -static.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от My_name_is_Bond

Скопировал из вашего тулчейна эти либы на плату и ... отвалились все команды оболочки, использующие libc (как я думаю, т.к. segmentation fault полезло).

Вот это была очень плохая идея.

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

В плату зашита raspbian от 21.01.215. Тулчейн arm-module-linux-gnueabihf, т.е. соответствует. Также пробовал и другую пару, были те же проблемы.

Компилил nodejs v0.12.0.

-static вариант, но не вариант в долгосрочной перспективе.

А на счет прямого копирования либ - это я от безысходности (когда не понимаешь что происходит, ощущения те еще).

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

Нода есть емнип в jessie в репозиториях. Доберусь до работы - проверю еще раз.

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

Raspbian стоит jessie или wheezy? Полное имя залитой туда прошивки и полное имя тулчейна с датами.

ncrmnt ★★★★★ ()
Последнее исправление: ncrmnt (всего исправлений: 2)
Ответ на: комментарий от My_name_is_Bond

Оукей, спасибо, попробую воспроизвести у себя.

В двух словах опишу текущее состояние вещей с кросс-компиляцией пакетов. У debian с этим пока все плохо. У убунты есть какие-то поползновения в сторону нормальной кросс-компиляции, но в дебиан этого пока не завезли.

1. Рекомендованный в debian wiki способ сборки пакетов - sbuild/schroot, т.е. фактически сборка при помощи gcc запущенным в армовом чруте через qemu, что мягко говоря очень не быстро даже на моем i7@2.0Ghz. Да и развертывать sbuild то еще веселье с большим набором граблей по пути. Зато гарантировано совместимо со всей debian'овской кухней.

2. Сборка кроссом с --sysroot=/путь/к/корневой/фс/debian требует multilib тулчейна, так как в debian теперь multilib. Это самый правильный путь. Но со сборкой мультилиб тулчейна у crosstool-ng были серьезные проблемы последний раз, когда я тыкал. Может сейчас и починили, надо будет потыкать еще раз.

3. Сборка чистым кроссом (как сейчас) требует наличия всех зависимостей либо в дереве исходников пакета, либо в sysroot тулчейна. Сейчас в sysroot тулчейна ставится libelf, libmad, libv4l, alsalib и libeasynmc. Ну и это единственный способ сделать тулчейн для windows который будет собирать работающие бинарники, хотя canadian-cross на винду приходится делать дичайшими хаками, и от релиза к релизу ct-ng оно ломается в самых неожиданных местах.

4. Сборка gcc на плате. Это уже совсем на любителя.

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

Оукей, спасибо, попробую воспроизвести у себя.

Удалось воспроизвести?

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

Да, частично воспроизвелось. Следующим обновлением постараюсь пофиксить.

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

4. Сборка gcc на плате. Это уже совсем на любителя.

Главное даже не пытаться собирать на разделе который в флеше. только tmpfs, только порн-кор!

А вообще получается даже приемлимо.

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