PDA

Bekijk de volledige versie : Переход от нативной компиляции к кросс-компиляции



ryzhov_al
21-12-2010, 19:52
Ниже на достаточно лёгком примере я попытаюсь собрать несложную сетевую утилиту, а Вы, коллеги, покажете, где в моих расуждениях засада.

Итак, преамбула.

Нативная компиляция, на мой взгляд, самый простой способ сборки ПО для роутера. Простота нативной компиляции состоит в том, что софт компилируется в самой благоприятной среде: общие библиотеки находятся в /opt/lib, заголовочные файлы в /opt/include, и пр. Кроме того, оценить получившийся результат можно сразу после компиляции. Но на ряду с простотой, нативный способ имеет следующие недостатки:

долгое время компиляции софта,
потенциальная нехватка памяти для работы компилятора,
устаревший тулчейн (главный недостаток!),
возможные проблемы с libtool, установленной в системе.


Перечислю инструменты, предлагаемые для кросс-компиляции:

Старый тулчейн Олега (http://oleg.wl500g.info/#toolchain). gcc 4.1.1(?) + uClibc 0.9.19. В качестве инструмента не рассматриваю, он устарел.
Тулчейн Optware (http://www.wl500g.info/showpost.php?p=72777&postcount=6). gcc 4.1.1 + uClibc 0.9.28. Кстати, именно эта связка инструментов используется при нативной компиляции. После установки этот тулчейн отпугнул меня своей кучей скриптов на все случаи жизни. Чтобы начать с ним работать, необходимо разобраться с шаблоном скрипта template.mk и действовать аналогично. Честно говоря, я не хочу разбираться с этой кучей скриптов, и, тем более, искать причину если что-то пойдёт не так.
Тулчейн энтузиастов (http://code.google.com/p/wl500g/downloads/list?can=2&q=hndtools-mipsel-uclibc), gcc 4.3.5 + uClibc 0.9.30.1. Этим тулчейном собирается сама прошивка. Собранный с помощью него софт пойдёт только на нашей коробочке и не запустится на других optware-based роутерах. На сайте прошивки есть два архива - hndtools-mipsel-uclibc-4.3.5-2.tar.bz2 (http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.3.5-2.tar.bz2&can=2&q=hndtools-mipsel-uclibc) и появившийся несколько дней назад hndtools-mipsel-uclibc-4.3.5-x86_64-3.tar.bz2 (http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.3.5-x86_64-3.tar.bz2&can=2&q=hndtools-mipsel-uclibc). Бинарники из второго в последней Ubuntu у меня выполняться отказались и я выбрал в качестве инструмента первый архив. Этот инструмент мне понравился больше всего: в нём содержатся исключительно исключительно инструменты для компиляции. Никаких скриптов, как в варианте optware нет, поэтому различные зависимости для компилировния софта придётся прописывать самому, что лучше всего подходит для понимания процесса.


Теперь тестовый пример.
Маленькая сетевая утилита Ping Tunnel (http://www.cs.uit.no/~daniels/PingTunnel/), имеющая одну зависимость. Как нельзя лучше подходит для примера.

Нативная компиляция.
Устанавливаем зависимости:

$ ipkg install libpcap libpcap-dev
Скачиваем, распаковываем исходники и компилируем:

$ wget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.71.tar.gz
$ tar -xvzf ./PingTunnel-0.71.tar.gz
$ cd PingTunnel/
$ make
Готово!

Кросс-компиляция тулчейном энтузиастов.

Устанавливаю тулчейн в ~/newtoolchain,
В ~/newtoolchain/opt/lib и в ~/newtoolchain/opt/include кладу распакованные из ipk-пакетов файлы зависимой библиотеки libpcap.
Правлю Makefile софтины, указывая перечисленные выше директории для компилятора и линковщика соответственно. Меняю компилятор с gcc на mipsel-linux-uclibc-gcc.

# Makefile for the pingtunnel utility
# (c) 2004-2009 Daniel Stoedle, daniels@cs.uit.no
# ptunnel.exe target added by Mike Miller, mike@mikeage.net

CC = mipsel-linux-uclibc-gcc
CFLAGS = -Wall -g -I/home/al/newtoolchain/opt/include -I/home/al/newtoolchain/lib/gcc/mipsel-linux-uclibc/4.3.5/include
LDOPTS = -lpthread -L/home/al/newtoolchain/opt/lib -L/home/al/newtoolchain/lib/gcc/mipsel-linux-uclibc/4.3.5 -lpcap
PT_OBJS = ptunnel.o md5.o
...

4. Пытаюсь компилировать:

$ make
mipsel-linux-uclibc-gcc -o ptunnel ptunnel.o md5.o -lpthread -L/home/al/newtoolchain/opt/lib -L/home/al/newtoolchain/lib/gcc/mipsel-linux-uclibc/4.3.5 -lpcap
/home/al/newtoolchain/opt/lib/libpcap.so: undefined reference to `__ctype_b_loc'
collect2: ld returned 1 exit status
make: *** [ptunnel] Ошибка 1


В чём засада?

Zyxmon
22-12-2010, 05:14
А чем стандартный путь не устраивает?
http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware

Тулчейн (свой) правда будет собираться долго. Если собирать не модуль ведра, а утилиту, то все вроде работает.
Зря испугались пути номер 2.

ryzhov_al
22-12-2010, 05:30
А чем стандартный путь не устраивает?
http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware
Смотри п.2.

lly
22-12-2010, 07:55
Старый тулчейн Олега (http://oleg.wl500g.info/#toolchain). gcc 4.1.1(?) + uClibc 0.9.19. В качестве инструмента не рассматриваю, он устарел.
gcc 3.2.3


На сайте прошивки есть два архива - hndtools-mipsel-uclibc-4.3.5-2.tar.bz2 (http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.3.5-2.tar.bz2&can=2&q=hndtools-mipsel-uclibc) и появившийся несколько дней назад hndtools-mipsel-uclibc-4.3.5-x86_64-3.tar.bz2 (http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.3.5-x86_64-3.tar.bz2&can=2&q=hndtools-mipsel-uclibc).
Как легко догадаться, второй только для 64-битной системы. Свежий 32-битный выложит theMIROn, как сможет. Кросс-сборку 32-битного тулчейна на 64-битном хосте я еще не допилил, всё времени не хватает...


Кросс-компиляция тулчейном энтузиастов.

# Makefile for the pingtunnel utility
# (c) 2004-2009 Daniel Stoedle, daniels@cs.uit.no
# ptunnel.exe target added by Mike Miller, mike@mikeage.net

CC = mipsel-linux-uclibc-gcc
CFLAGS = -Wall -g -I/home/al/newtoolchain/opt/include -I/home/al/newtoolchain/lib/gcc/mipsel-linux-uclibc/4.3.5/include
LDOPTS = -lpthread -L/home/al/newtoolchain/opt/lib -L/home/al/newtoolchain/lib/gcc/mipsel-linux-uclibc/4.3.5 -lpcap
PT_OBJS = ptunnel.o md5.o
...


Стандартные пути (/home/al/newtoolchain/lib/gcc/mipsel-linux-uclibc/4.3.5) не нужно включать, они подцепляются сами.




$ make
mipsel-linux-uclibc-gcc -o ptunnel ptunnel.o md5.o -lpthread -L/home/al/newtoolchain/opt/lib -L/home/al/newtoolchain/lib/gcc/mipsel-linux-uclibc/4.3.5 -lpcap
/home/al/newtoolchain/opt/lib/libpcap.so: undefined reference to `__ctype_b_loc'
collect2: ld returned 1 exit status
make: *** [ptunnel] Ошибка 1


В чём засада?
Скорее всего, придётся пересобрать и libpcap под нашу uClibc. Различие в конфиге - у нас выключено UCLIBC_HAS_LOCALE.

ryzhov_al
22-12-2010, 09:49
Следует заметить, что весь optware'вский софт должен использовать свою версию uClibc.
Значит, лучше не выделываться и собирать софт с помощью тулчейна optware. В противном случае нельзя будет использовать наработки optware.
Энтузиастский тулчейн оставить в покое и использовать только для сбора прошивки.

lly
22-12-2010, 09:58
Значит, лучше не выделываться и собирать софт с помощью тулчейна optware. В противном случае нельзя будет использовать наработки optware.
Энтузиастский тулчейн оставить в покое и использовать только для сбора прошивки.
В зависимости от твоих целей. Я всегда пересобираю из исходников нашим тулчейном ;)
Взять хотя бы до сих пор неустранённые грабли с PIE бинарниками в optware (см. мои сообщения о баге в binutils)...

Если очень хочется бинарной совместимости с optware uClibc, надо наш тулчейн пересобирать с uClibc 0.9.29 и бекпортить пару пудов патчей из 0.9.30.1

Ну или спортировать фиксы в optware'вский тулчейн.

theMIROn
22-12-2010, 10:12
причем второе гораздо кошернее :)
p.s. тулчейн x86 постараюсь сегодня выложить

theMIROn
22-12-2010, 10:14
Значит, лучше не выделываться и собирать софт с помощью тулчейна optware. В противном случае нельзя будет использовать наработки optware.
Энтузиастский тулчейн оставить в покое и использовать только для сбора прошивки.

наш тулчейн, помимо того, что озвучил lly позволяет использовать софт без optware, совсем.
с другой стороны, если есть куча зависимостей - их проще решать через optware

ryzhov_al
22-12-2010, 12:59
наш тулчейн, помимо того, что озвучил lly позволяет использовать софт без optware, совсем.
Как? Статической линковкой?

с другой стороны, если есть куча зависимостей - их проще решать через optware
Получается так:

при малом числе зависимостей лучше собирать новым тулчейном, перекомпилировав зависимости. Результат слинковать статически.
если зависимостей много и пересобирать их задача нетривиальная, то лучше использовать тулчейн optware.

Так? Значит, от optware'овского тулчейна мне никуда не деться и вопрос выбора тулчейна закрыт:)


Кстати говоря, а чем присутствующие собирают ipk-пакет после компиляции? На www-просторах для этих целей есть куча самых разнообразных shell-скриптов. Тот, который использую я, имеет косяк в заполнении поля Description. Если в optware'овском тулчейне такой скрипт есть, то этот вопрос то же закрыт.

lly
22-12-2010, 13:16
Как? Статической линковкой?
зачем??? не выставляй LD_LIBRARY_PATH=/opt/lib и библиотеки из /lib найдутся сами. Ну можно добавить контрольный выстрел - rpath

Кстати говоря, а чем присутствующие собирают ipk-пакет после компиляции?
Ну например http://wl500g.googlecode.com/svn/ipkg/src/packages/ipkg-utils/

ryzhov_al
22-12-2010, 13:31
зачем??? не выставляй LD_LIBRARY_PATH=/opt/lib и библиотеки из /lib найдутся сами. Ну можно добавить контрольный выстрел - rpath
Хотя бы за тем, чтобы не возник случай описанный в примере выше.

Обновлённая uClibc возьмётся из /lib. Согласен,
Зависимую libpcap всё равно придётся брать из /opt/lib.
Финиш. В примере из первого поста софтина, собранная с uClibc 0.9.30.1 не слинковалась с динамической библиотекой libpcap из optware, так как библиотека была собрана с uClibc 0.9.28.


Ну например http://wl500g.googlecode.com/svn/ipkg/src/packages/ipkg-utils/
Очень хорошо. Пару скриптов ipkg-build* утащил к себе в нору.

lly
22-12-2010, 13:37
Зависимую libpcap всё равно придётся брать из /opt/lib.
Что мешает положить в /opt/lib пересобранную версию libpcap? Боишься, что кто-то еще будет использовать?
Ну тогда делать отдельную /opt/lib.new и прописывать rpath.

Zyxmon
22-12-2010, 13:38
Кстати говоря, а чем присутствующие собирают ipk-пакет после компиляции?
Если используете optware, то все просто

make mypackage-check

При сборке скриптами optware "жестко" проставляется rpath и uClibc, и все библиотеки будут браться из /opt/lib.

Если

Ну или спортировать фиксы в optware'вский тулчейн.
То можно жить без uClibc и пр. в /opt/lib

ryzhov_al
22-12-2010, 14:15
Что мешает положить в /opt/lib пересобранную версию libpcap? Боишься, что кто-то еще будет использовать?
Ну тогда делать отдельную /opt/lib.new и прописывать rpath.
За изобретательство велосипедов можно получить... лучи ненависти от пользователей.

Пока не встречу серьёзных ограничений optware'овского тулчейна, буду работать с ним. Рано или поздно, optware будет вынужден обновить свой инструментарий. Благо большую часть репозитория можно пересобрать хоть сейчас, на автопилоте.

Вопросов у меня ещё будет море:) Те, что будут касаться нашей коробочки, буду задавать здесь.

Спасибо присутствующим! Помогли определиться с тулчейном.

lly
22-12-2010, 14:25
Рано или поздно, optware будет вынужден обновить свой инструментарий.
Увы, насколько я понимаю ситуацию, сейчас это делать банально некому. Герои вроде Олега появляются очень редко.

ryzhov_al
23-12-2010, 05:56
Кстати говоря, а чем присутствующие собирают ipk-пакет после компиляции?Если используете optware, то все просто

make mypackage-check
Разобрался. Только по канонам optware-тулчейна:

$ make mypackage-ipk
Не забыв перед эти собрать сами скрипты сборки ipk-пакета:

$ make ipkg-utils

Zyxmon
23-12-2010, 06:01
Про make ipkg-utils вроде как написано "в канонах".
Я написал в свое время такую инструкцию-пересказ канонов

http://www.synology-forum.ru/wiki/index.php/%D0%9A%D0%B0%D0%BA_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0% D1%82%D1%8C_ipk_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82_%D0 %BD%D0%B0_%D0%B4%D0%B5%D1%81%D0%BA%D1%82%D0%BE%D0% BF%D0%B5

Это не для mipsel, но значения не имеет.
Из дисрибутивов, чтобы напильником не работать, под которым все собирается остался debian 5.

ryzhov_al
23-12-2010, 07:10
А чем стандартный путь не устраивает?
http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware
...
Зря испугались пути номер 2.Потратил вечер, чтобы разобраться со сборочными скриптами optware и успешно пересобрал (http://www.wl500g.info/showthread.php?p=218383#post218383) свой пример. Как и ожидалось, основные усилия пришлось затратить на подстройку под логику работы тулчейна. Если полностью принять эту логику, то процесс автоматизируется вплоть до пересборки зависимостей и выкатывания на финише готового ipk-пакета. Что одновременно и хорошо, и плохо:

Хорошо тем, что такая автоматизация - мечта мейнтейнера. Скрипты сами скачают обновлённые исходники, накладывают на них патчи, конфигурируют и собирают исходники, результат собирают в ipk-пакет.
Плохо тем первопроходцам, что собирают новый софт из (в основном чужих) исходников. Так как подобная автоматизация оказывает в этом случае медвежью услугу.

На втором случае остановлюсь подробнее. Первая засада ждёт в самом начале работы:

указал в шаблоне make-файла для новой софтины откуда скачивать исходники,
получил первую ошибку при сборке с помощью тулчейна optware,
подправил make-файл софтины и перезапустил сборку.

В этом случае, скрипты не обнаружив в каталоге исходников софтины флаг .configured, сроют к чертям все изменения и заново распакуют исходники. Отсюда первый костыль - запись в каталог исходников флага .configured. Причём при работе анализируется время изменения этих флагов. Засада с флагами возникает на каждом шагу:

если Makefile новее бинарника - убить бинарник!
если флаг .build старее бинарника - убить бинарник!
если нет флага .configured (см.выше) - убить исходники!
если бинарник новее ipk-пакета - убить пакет!
и прочая, и прочая.

Получается, что находишься в состоянии постоянного ожидания подвоха. Скажем, сделал strip скомпилированному бинарнику и после решил записать пришедшую мыслю в Makefile... прощай, бинарник.

Вторая засада в том, что тулчейн в своих шаблонах надеется обнаружить использование libtool для конфигурирования софтины. Если же такового нет (как в примере), то все телодвижения скриптов optware до начала компиляции тщетны. Для моего примера мне пришлось просто "украсть" значения переменных GCC, LDOPTS и пр. у optware-скриптов. Другой путь в этом случае - писать скрипт-заглушку configure в директории исходников софтины для сохранения полученных от optware настроек.

Вот по этим перечисленным причинам я вначале остановил свой выбор на тулчейне энтузиастов. Мне не пришлось бы потратить на разбор скриптов вчерашний вечер. Но в связи с тем, что от тулчейна optware далеко не уйдёшь, можно сделать вывод:

хочешь постоянно поддерживать актуальным какой-нибудь пакет в репозитории - положись на скрипты optware,
взялся за непаханые сырцы - держись от них подальше. Всё равно тебе от этих скриптов в итоге нужны будут только ключи для компиляции и линковки и пара shell-скриптов для сборки пакета перед тем как обнародовать свои наработки.

Zyxmon
23-12-2010, 07:42
Я в основном подправлял готовые пакеты.

Пара замечаний.

В качестве источника исходников наверняка можно указывать
file://......

Ну а что и когда убивается - логика Makefile такая.
После configure можно запускать кросскомпиляцию в папке с исходниками через make.

strip в optware делается автоматически при сборке ipk.

al37919
23-12-2010, 08:21
3. подправил make-файл софтины и перезапустил сборку.
в optware исходники править не полагается. Для этой цели следует изготовить патч, при наложении которого проблема исправляется. Либо если исходники локальные, то править Makefile не в самом optware, а там откуда он их берет.

ryzhov_al
23-12-2010, 08:25
Я в основном подравлял готовые пакеты.
А я - нет:)

Ну а что и когда убивается - логика Makefile такая.
Поэтому и не удобна мне эта логика.

strip в optware делается автоматически при сборке ipk.
Делается для всех пакетов один - самый безопасный. В моём примере:

94КБ - бинарник после компиляции,
70КБ - бинарник после stip'a средствами Optware,
44КБ - бинарник, который я "обтёсывал" strip'ом сам.

Просто не хочется быть обезъяной с пучком чужих скриптов. Результат всегда лучше, когда процессом руководишь ручками. Лучше всего:

проанализировал работу тулчейна optware,
взял на вооружение механизмы его работы,
дальше делай всё сам(!). И со своим стилем работы.

Уж если понадобится обнародовать сырцы после допиливания - патчи diff'ами наклепать можно быстро.

ryzhov_al
23-12-2010, 08:27
в optware исходники править не полагается. Для этой цели следует изготовить патч, при наложении которого проблема исправляется.Угу, не спорю. Но для отладки ведь это не удобно, правда?
Мыслить patch-файлами я пока не научился...

Colibri
06-01-2011, 21:51
Собираю tinc на debian5 в colinux.
Использую http://svn.nslu2-linux.org/svnroot/optware/trunk
Одна из зависимостей - openssl - установлена в debian, также её скомпилировал в тулчейне
Подскажите, чего не хватает:


checking openssl/pem.h usability... yes
checking openssl/pem.h presence... yes
checking for openssl/pem.h... yes
checking openssl/engine.h usability... yes
checking openssl/engine.h presence... yes
checking for openssl/engine.h... yes
checking for SHA1_version in -lcrypto... no
configure: error: OpenSSL libraries not found.
make: *** [/home/user/optware/oleg/builds/tinc/.configured] Error 1
colinux:/home/user/optware/oleg#

ryzhov_al
07-01-2011, 08:18
Ищите причину. Всё собирается автоматом, вплоть до пакета.


Собираю tinc на debian5 в colinux....
Одна из зависимостей - openssl - установлена в debian
Дебиановская библиотека в кросс-компиляции не должна участвовать.
./configure скорее всего не находит интерфейсные файлы *.h библиотеки openssl.

Colibri
07-01-2011, 14:19
ryzhov_al
Спасибо! Теперь получилось. В основном благодаря .mk-файлу, в нем оказались некоторые неочевидные для меня вещи.

ryzhov_al
07-01-2011, 15:15
Я на эти не очевидные вещи тоже (http://www.wl500g.info/showpost.php?p=220419&postcount=18) целый вечер убил.

Кстати, я забыл в tinc.mk указать ещё одну зависимость. Если будете где-то выкладывать пакет, не забудьте указать:

TINC_DEPENDS=openssl,lzo
вместо

TINC_DEPENDS=openssl
(!) На роутере всесторонне бинарник в работе не проверял. Просто убедился в том, что он не валится в segfault.

Colibri
07-01-2011, 18:14
Кстати, я забыл в tinc.mk указать ещё одну зависимость. Если будете где-то выкладывать пакет, не забудьте указать:

TINC_DEPENDS=openssl,lzo
(!) На роутере всесторонне бинарник в работе не проверял. Просто убедился в том, что он не валится в segfault.

И еще там zlib в зависимостях.

Я сгенерировал на роутере ключи и подключился к существующей сети - работает.

ryzhov_al
14-01-2011, 06:47
Есть предложение унифицировать размещение файлов, собранных энтузиастким тулчейном (http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.3.5-3.tar.bz2&can=2&q=) (gcc 4.3.5 uClibc 0.9.30.1). Файлы предлагаю записывать по следующим путям:

/opt/1.9.2.7/bin
/opt/1.9.2.7/lib
/opt/1.9.2.7/include

Что позволит:
а) развязать библиотеки, собранные тулчейном optware и новым тулчейном,
б) автоматизировать сборку libtool'ом, используя ./configure --prefix=/opt/1.9.2.7/,
в) пользоваться совместными наработками, ссылаясь в своих проектах на указанные пути.

Конкретизировать в пути "/opt/1.9.2.7-d/" или "/opt/1.9.2.7-rtn/" считаю избыточным, также считаю, что путь "/opt/1.9.2.7/" со старой олеговской прошивкой (http://www.wl500g.info/showthread.php?t=18519) ассоциироваться не будет. Да и вряд ли кто станет использовать устаревший тулчейн тех времён.

ryzhov_al
14-01-2011, 07:24
При сборке с помощью энтузиасткого тулчейна есть необходимость использования собственных библиотек, лежащих в /opt/1.9.2.7/lib. Какие ключи необходимо использовать при линковке для того, чтобы по умолчанию библиотеки искались в папке /lib, а затем в папке /opt/1.9.2.7/lib?

Насколько я понял, optware жестко прописывает пути к библиотекам в /opt/lib

LDFLAGS=" -L/optware/staging/opt/lib -Wl,-rpath,/opt/lib -Wl,-rpath-link,/optware/staging/opt/lib "
поэтому решение по аналогии не подойдёт. После прописывания rpath на /opt/1.9.2.7/lib библиотеки перестанут искаться в /lib.

Пока для сборки новым тулчейном использую ключи, нагло спёртые у тулчейна optware:)

$ cat /media/projects/mk_new.sh
#!/bin/sh
AR=/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-ar \
AS=/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-as \
LD=/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-ld \
NM=/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-nm \
CC=/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-gcc \
CPP="/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-gcc -E" \
GCC=/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-gcc \
CXX=/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-g++ \
RANLIB=/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-ranlib \
STRIP=/media/brcm/hndtools-mipsel-uclibc-4.3.5/bin/mipsel-uclibc-strip \
CPPFLAGS="-O2 -pipe -I/media/projects/staging/opt/1.9.2.7/include " \
LDFLAGS=" -L/media/projects/staging/opt/1.9.2.7/lib " \
./configure \
--build=i386-pc-linux-gnu \
--host=mipsel-linux \
--target=mipsel-linux \
--prefix=/opt/1.9.2.7 \
--disable-nls \
--disable-static

lly
14-01-2011, 07:53
Есть предложение унифицировать размещение файлов, собранных энтузиастким тулчейном (http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.3.5-3.tar.bz2&can=2&q=) (gcc 4.3.5 uClibc 0.9.30.1). Файлы предлагаю записывать по следующим путям:

/opt/1.9.2.7/bin
/opt/1.9.2.7/lib
/opt/1.9.2.7/include


Предложение интересное, за исключением того что 1.9.2.7 мне не особо нравится.

Реально разделять нужно только библиотеки, include вообще неактуальны на роутере, так как у нас нет нативного компилятора(аналог buildroot). Выделять bin я тоже не вижу смысла.


После прописывания rpath на /opt/1.9.2.7/lib библиотеки перестанут искаться в /lib.
Неправильно, посмотри описание ld. Это всего-лишь первый пункт в списке путей. Ну и иметь несколько путей в rpath никто не запрещает.

al37919
14-01-2011, 08:59
Предложение интересное, за исключением того что 1.9.2.7 мне не особо нравится.
TARGET = oleg++ :) ?
в развитие оптварного
TARGET = oleg

AndreyUA
14-01-2011, 09:36
TARGET = oleg++ :) ?
в развитие оптварного
TARGET = olegoleg-ng ;)

ryzhov_al
15-01-2011, 13:10
Есть предложение унифицировать размещение файлов, собранных энтузиастким тулчейном (http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.3.5-3.tar.bz2&can=2&q=) (gcc 4.3.5 uClibc 0.9.30.1). Файлы предлагаю записывать по следующим путям:

/opt/1.9.2.7/bin
/opt/1.9.2.7/lib
/opt/1.9.2.7/includeПредложение интересное, за исключением того что 1.9.2.7 мне не особо нравится.
Посмотри на свою подпись:) "1.9.2.7" или "oleg" - единственная узнаваемая часть из названия прошивки. Остальные варианты будут выдумкой.


Реально разделять нужно только библиотеки, include вообще неактуальны на роутере, так как у нас нет нативного компилятора(аналог buildroot). Выделять bin я тоже не вижу смысла.
Ок. Из первоначального предложения оставляю один пункт:

/opt/lib-1.9.2.7
По аналогии с RT-N16-1.9.2.7-rtn-rXXXX.trx или modules-1.9.2.7-d-rXXXX.tgz в названии прошивок.

ryzhov_al
15-01-2011, 13:58
После прописывания rpath на /opt/1.9.2.7/lib библиотеки перестанут искаться в /lib.Неправильно, посмотри описание ld. Это всего-лишь первый пункт в списке путей. Ну и иметь несколько путей в rpath никто не запрещает.
Правильный ответ такой?

LDFLAGS=" -L/media/projects/staging-opt/lib-1.9.2.7 -Wl,-rpath,/opt/lib-1.9.2.7 -Wl,-rpath-link,/media/projects/staging-opt/lib-1.9.2.7" \
Насколько я понял, путь rpath будет иметь приоритет над дефолтными значениями из ld.so.conf.

lly
15-01-2011, 17:09
Правильный ответ такой?
Примерно, особенно если ты пояснишь зачем во всех пакетах ставить rpath-link.

Насколько я понял, путь rpath будет иметь приоритет над дефолтными значениями из ld.so.conf.
ДА

P.S. Префикс oleg-ng мне нравиться;)

theMIROn
15-01-2011, 17:25
P.S. Префикс oleg-ng мне нравиться;)
аналогично.

ryzhov_al
18-01-2011, 07:27
P.S. Префикс oleg-ng мне нравиться;)
Окончательный вариант:

/opt/lib - для optware'овских библиотек,
/opt/lib-oleg-ng - для библиотек, собранных энтузиастким тулчейном.

Возражения есть?

Только сразу условимся. Например, в http://wl500g.googlecode.com/svn/ipkg/optware/ и optware-d есть библиотеки как для использования с софтом optware, так и нет. Давайте класть в /opt/lib-oleg-ng исключительно те библиотеки, которые не будут использоваться optware'овским софтом.

lly
18-01-2011, 08:22
Окончательный вариант:

/opt/lib - для optware'овских библиотек,
/opt/lib-oleg-ng - для библиотек, собранных энтузиастким тулчейном.

Возражения есть?
Нет.

Только сразу условимся. Например, в http://wl500g.googlecode.com/svn/ipkg/optware/ и optware-d есть библиотеки как для использования с софтом optware, так и нет. Давайте класть в /opt/lib-oleg-ng исключительно те библиотеки, которые не будут использоваться optware'овским софтом.
В svn/ipkg/optware должны лежать пакеты собранные optware'вским тулчейном. Зачем Влад сделал r2487 (http://code.google.com/p/wl500g/source/detail?r=2487) я пока не разбирался, не успел.
А в optware-d как раз собранные нашим тулчейном, с завязками на нашу uClibc, ядро.

ryzhov_al
18-01-2011, 11:18
А в optware-d как раз собранные нашим тулчейном, с завязками на нашу uClibc, ядро.
Странно. Почему тогда usbip_0.1.7-2_mipsel.ipk и sysfsutils_2.1.0-1_mipsel.ipk положили в optware, а не в optware-d, хотя он собран нашим тулчейном.

theMIROn
18-01-2011, 15:26
Странно. Почему тогда usbip_0.1.7-2_mipsel.ipk и sysfsutils_2.1.0-1_mipsel.ipk положили в optware, а не в optware-d, хотя он собран нашим тулчейном.

все просто, пакеты собраны optware тулчейном, в нашем нет glib2 (hint: ldd)
завязка получается только на ядро, точнее на дополнительные модули ядра, которые не rtn-specific

p.s. думаю у меня есть возможность связаться с optware maintainers... поэтому PM мне ваши идеи зачем бы нам это было нужно

lly
18-01-2011, 16:35
все просто, пакеты собраны optware тулчейном, в нашем нет glib2 (hint: ldd)
завязка получается только на ядро, точнее на дополнительные модули ядра, которые не rtn-specific
А я думал что ты уже собрал no-glib версию с github.


p.s. думаю у меня есть возможность связаться с optware maintainers... поэтому PM мне ваши идеи зачем бы нам это было нужно
Навскидку

критические фиксы тулчейна (PIE в binutils, например)
возможно часть приложений из нашего ipkg/optware смигрировать к ним

ryzhov_al
13-02-2011, 19:03
Вплоть до сегодняшего дня на форуме популярен vsftpd+ (http://vsftpd.devnet.ru/rus/), умеющий менять кодировку имён файлов UTF8>CP1251. В энтузиастком репозитории (http://www.wl500g.info/showthread.php?p=222570#post222570) пакет обновлён до версии 2.3.2-ext.1.

theMIROn
13-02-2011, 19:18
Вплоть до сегодняшего дня на форуме популярен vsftpd+ (http://vsftpd.devnet.ru/rus/), умеющий менять кодировку имён файлов UTF8>CP1251. В энтузиастом репозитории сейчас находится (http://code.google.com/p/wl500g/source/browse/ipkg/optware/vsftpd%2B_2.1.2-ext1-1_mipsel.ipk) vsftpd+2.1.2-ext1 середины 2009 года. Я собрал vsftpd+_2.3.2-1_mipsel.ipk (ryzhov-al.homeip.net/files/vsftpd+_2.3.2-1_mipsel.ipk) октября 2010 года энтузиастким тулчейном. Отличия старой и новой версии:

$ ldd ./vsftpd
libcrypt.so.0 => /opt/lib/libcrypt.so.0 (0x2aabf000)
libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x2aae3000)
libc.so.0 => /opt/lib/libc.so.0 (0x2ab02000)
ld-uClibc.so.0 => /opt/lib/ld-uClibc.so.0 (0x2aaa8000)
$ ldd ./new/vsftpd
libcrypt.so.0 => /lib/libcrypt.so.0 (0x2aabe000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2aae2000)
libc.so.0 => /lib/libc.so.0 (0x2ab01000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)

PS На обновление меня сподвиг тот факт, что встроенный в прошивку vsftpd перестал работать при использовании (http://www.wl500g.info/showthread.php?p=224769#post224769) собственного /etc/fstab.

А встроенная самба?

ryzhov_al
13-02-2011, 19:21
В моём случае тоже перестала запускаться:

$ mount | grep ext3
/dev/discs/disca/part2 on /opt type ext3 (rw,noatime,data=ordered)
/dev/discs/disca/part1 on /tmp/storage type ext3 (rw,noatime,data=ordered)
$ ls /tmp/mnt/
$ ls /tmp/ | grep harddisk
$

lly
13-02-2011, 19:25
В моём случае тоже перестала работать:

Выражайся пожалуйста корректнее - не перестала работать, а перестала запускаться автоматом. Это фича еще от Олега - автозапуск только по /tmp/mnt /tmp/harddisk

theMIROn
13-02-2011, 19:34
В моём случае тоже перестала запускаться:

$ mount | grep ext3
/dev/discs/disca/part2 on /opt type ext3 (rw,noatime,data=ordered)
/dev/discs/disca/part1 on /tmp/storage type ext3 (rw,noatime,data=ordered)
$ ls /tmp/mnt/
$ ls /tmp/ | grep harddisk
$

монтируй не на /tmp/storage, а на /tmp/mnt/disc*
пока - так, подробнее в rc/services_ex.c/hotpug_usb_mass()



Выражайся пожалуйста корректнее - не перестала работать, а перестала запускаться автоматом. Это фича еще от Олега - автозапуск только по /tmp/mnt /tmp/harddisk
а точнее /tmp/harddisk будет симлинком на первый /tmp/mnt/disc* moutpoint

ryzhov_al
27-02-2011, 11:14
Коллеги, раньше наш репозиторий optware (ветка OPTWARE_TARGET=oleg) достаточно активно обновлялся. Я сейчас случайно обнаружил, что в дереве тулчейна optware доступна и новая libevent и новый transmission:

$ svn co http://svn.nslu2-linux.org/svnroot/optware/trunk /media/Projects/optware/
U /media/Projects/optware/Makefile
U /media/Projects/optware/make/transmission.mk
U /media/Projects/optware/make/avahi.mk
U /media/Projects/optware/make/samba35.mk
U /media/Projects/optware/make/mc.mk
U /media/Projects/optware/make/libevent.mk
U /media/Projects/optware/make/samba2.mk
U /media/Projects/optware/make/libtorrent-rasterbar.mk
Получена редакция 12246.
$ cat /media/Projects/optware/make/transmission.mk | grep "^TRANSMISSION_VER"
TRANSMISSION_VERSION=2.20
$ cat /media/Projects/optware/make/libevent.mk | grep "^LIBEVENT_VER"
LIBEVENT_VERSION=2.0.10

Получается, что нашу ветку (http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/) пакетов мейнтейнеры optware забросили?

ryzhov_al
27-03-2011, 20:52
С 15.02.11г по сегодняшний день в репозитории optware не хватает ряда пакетов.
Коллеги, репозиторий optware снова в строю. На моей памяти это был самый длительный промежуток времени, когда с ним были проблемы. Срок "заморозки" репозитория составил почти полтора месяца.

theMIROn
27-03-2011, 21:26
Отлично, попробую с мейнтейнерами еще разок связаться, наши пакеты перекинуть

ryzhov_al
28-03-2011, 05:20
Отлично, попробую с мейнтейнерами еще разок связаться, наши пакеты перекинуть
Я не готов предоставить ВСЕ make-файлы для автоматизированной сборки. А без выполнения пунктов PackagingBestPractices (http://www.nslu2-linux.org/wiki/Optware/PackagingBestPractices?from=Unslung.PackagingBestP ractices) нам там не обрадуются.

Чуть позже перечислю пакеты, для которых можно предоставить make-файлы с патчами.

ryzhov_al
28-04-2011, 21:24
Коллеги, чтобы не повторяться, опишу создание среды для кросс-компиляции на основе последней Ubuntu. Для сборки из Windows чайнику необходимо:
...


Статья перенесена (http://wiki.vectormm.net/index.php/%D0%9A%D1%80%D0%BE%D1%81%D1%81-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D 0%B8%D1%8F) в Wiki.

Zyxmon
29-04-2011, 08:06
В нём напоследок можно подсмотреть какой ip-адрес присвоен VM

Ну зачем же так. Если соединение "мост", то сетевой адаптер VM будет получать ip от домашнего DHCP сервера. Или привязать ip по маку, или руками задать в VM.

Я предпочитаю работать в VM. Для передачи файлов на ББ использую vboxsf. Ну и другие протоколы cifs/ftp/scp никто не отменял.

vectorm
28-05-2011, 21:58
Пытаюсь кросскомпилить LCD4linux на Debian 5.

./configure из Wiki проходит без ошибок, а при make получаю:


...........
hndtools-mipsel-uclibc-4.3.5-K26/bin/mipsel-uclibc-gcc -DHAVE_CONFIG_H -I. -O2 -pipe -D_GNU_SOURCE -Wall -W -fno-strict-aliasing -g -O2 -MT drv_Curses.o -MD -MP -MF .deps/drv_Curses.Tpo -c -o drv_Curses.o drv_Curses.c
drv_Curses.c:45:20: error: curses.h: No such file or directory
drv_Curses.c:63: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
drv_Curses.c:64: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
drv_Curses.c: In function 'drv_Curs_clear':
и т.д.
libncurses естественно стоят, остальное все собирается на ура, например LCDProc.

ryzhov_al
29-05-2011, 06:36
drv_Curses.c:45:20: error: curses.h: No such file or directory
Библиотека ncurses установлена. А интерфейсы?

libncurses-dev стоит и curses.h доступен по путям поиска (gcc -I/path/to/dir-with-curses-h)?
не используются ли при конфигурировании исходников curses хост-системы (ubuntu/debian/name one)?

vectorm
29-05-2011, 10:49
Библиотека ncurses установлена. А интерфейсы?

libncurses-dev стоит и curses.h доступен по путям поиска (gcc -I/path/to/dir-with-curses-h)?
не используются ли при конфигурировании исходников curses хост-системы (ubuntu/debian/name one)?

Стоят конечно.

# locate curses.h
/usr/include/curses.h
/usr/include/ncurses.h
/usr/include/ncursesw/curses.h
/usr/include/ncursesw/ncurses.h

И обычная компиляция под хостовую систему проходит без ошибок.

Пытался указывать в опциях ./configure путь к curses.h ( --with-ncurses=/usr/include), никак не повлияло на результат.

Если тупо подложить хостовый /usr/include/curses.h в директорию компиляции - ошибка эта исчезает, но выдает кучу ошибок типа:


.........
drv_Curses.c:66: error: storage class specified for parameter 'EROWS'
drv_Curses.c:74: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:82: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:103: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:111: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:153: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:211: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:222: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:278: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:286: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:347: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
drv_Curses.c:368: error: expected declaration specifiers before 'DRIVER'
drv_Curses.c:373: error: expected declaration specifiers before ';' token
drv_Curses.c:373: error: old-style parameter declarations in prototyped function definition
./curses.h:225: error: parameter name omitted
drv_Curses.c:373: error: expected '{' at end of input
make[1]: *** [drv_Curses.o] Error 1

ryzhov_al
29-05-2011, 11:41
Стоят конечно.
...
Пытался указывать в опциях ./configure путь к curses.h ( --with-ncurses=/usr/include), никак не повлияло на результат.
Не-не-не, Дэвид Блэйн! Это путь до интерфейсов curses хост-машины. Необходимо указать путь до интерфейсов ncurses, скомпилированной для роутера. Другими словами, необходимо:

скачать (http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/ncurses_5.7-1_mipsel.ipk) и распаковать ncurses для роутера.
скачать (http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/ncursesw-dev_5.7-1_mipsel.ipk) и распаковать интерфейсы ncurses для роутера.
проставить ключи для компилятора (-I...) и линковщика (-L...) указанным ниже образом.


$ cat /media/Projects/mk_optware.sh
#!/bin/sh
AR=/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-ar \
AS=/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-as \
LD=/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-ld \
NM=/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-nm \
CC=/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc \
CPP="/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc -E" \
GCC=/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc \
CXX=/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-g++ \
RANLIB=/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-ranlib \
STRIP=/media/Projects/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-strip \
CPPFLAGS="-O2 -pipe -I/media/Projects/optware/staging/opt/include " \
LDFLAGS=" -L/media/Projects/optware/staging/opt/lib -Wl,-rpath,/opt/lib -Wl,-rpath-link,/media/Projects/optware/staging/opt/lib " \
./configure \
--build=i386-pc-linux-gnu \
--host=mipsel-linux \
--target=mipsel-linux \
--prefix=/media/Projects/projects/make-install/opt \
...

где /media/Projects/optware/staging/opt/include и /media/Projects/optware/staging/opt/lib, соответственно, пути до распакованных интерфейсов ncurses и самой libncurses.
Хочу заметить, что процедура сборки зависимых библиотек в тулчейне optware автоматизирована. Приведённый выше кусок скрипта выдран из этой автоматизации.

А ещё хочу заметить, что вы пытаетесь собрать lcd4linux тулчейном энтузиастов, а зависимая ncurses собрана тулчейном optware. Во избежание хитропереподвыподвернутых неприятностей, используйте в процессе сборки один и тот же тулчейн.

vectorm
29-05-2011, 13:50
Не-не-не, Дэвид Блэйн! Это путь до интерфейсов curses хост-машины. Необходимо указать путь до интерфейсов ncurses, скомпилированной для роутера.

А ещё хочу заметить, что вы пытаетесь собрать lcd4linux тулчейном энтузиастов, а зависимая ncurses собрана тулчейном optware. Во избежание хитропереподвыподвернутых неприятностей, используйте в процессе сборки один и тот же тулчейн.
Скомпилил ncurses 5.9, libusb 1.0, разложил по папочкам, все проверки наличия (n)curses и l(n)curses проходят на ура, lcd4linux собрался (тулчейном Энтузиастов):
http://asus.vectormm.net/compiled%20tools/lcd4linux%200.11.0/

Пытаюсь пересобрать lcdproc, чтобы собрать драйвер curses:

hndtools-mipsel-uclibc-4.3.5-K26/bin/mipsel-uclibc-gcc -fPIC -Wall -O3 -Wno-unused-function -shared -Lhndtools-mipsel-uclibc-4.3.5-K26/lib -Wl,-rpath,/opt/lib -Wl,-rpath-link,hndtools-mipsel-uclibc-4.3.5-K26/lib -o curses.so curses_drv.o -lncurses -ldl
hndtools-mipsel-uclibc-4.3.5-K26/lib/gcc/mipsel-linux-uclibc/4.3.5/../../../../mipsel-linux-uclibc/bin/ld: hndtools-mipsel-uclibc-4.3.5-K26/lib/libncurses.a(lib_addch.o): relocation R_MIPS_HI16 against `__gnu_local_gp' can not be used when making a shared object; recompile with -fPIC
hndtools-mipsel-uclibc-4.3.5-K26/lib/libncurses.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[3]: *** [curses.so] Error 1

Как победить?

lly
29-05-2011, 14:08
Как победить?
Ну ответ же написан в тексте :cool:

recompile with -fPIC

Начиная с версии 4.2 gcc требует, чтобы .so библиотеки были собраны с ключом -fPIC

vectorm
29-05-2011, 14:14
Ну ответ же написан в тексте :cool:


Начиная с версии 4.2 gcc требует, чтобы .so библиотеки были собраны с ключом -fPIC
:) я уже как-то раньше сталкивался с этой рекомендацией, но не помню, как обходил...

Все, разобрался:


CPPFLAGS="-O2 -pipe -fPIC -I/opt/brcm/hndtools-mipsel-uclibc-4.3.5-K26/include " \

lly
29-05-2011, 14:32
Это к libusb относится? У curses нет .so файлов.
Надо поднимать доку - в каких-то случаях это относится и к .a

ryzhov_al
30-05-2011, 06:09
Скомпилил ncurses 5.9, libusb 1.0, разложил по папочкам, все проверки наличия (n)curses и l(n)curses проходят на ура, lcd4linux собрался (тулчейном Энтузиастов):
libusb-1.0, собранный тулчейном энтузиастов уже входит в состав прошивки:

$ find /usr/lib -name libusb*
/usr/lib/libusb-1.0.so

Настоятельно рекомендую использовать статически собранные библиотеки ncurses 5.9, libusb 1.0 для того, чтобы не налететь на dependency hell (http://www.wl500g.info/showthread.php?p=225195#post225195). Невозможно будет предсказать какой вариант библиотеки будет использоваться загрузчиком libdl. Например, если будет загружен в память ваш вариант ncurses, то не будет работать завязанный на него софт из состава optware и наоборот: если в память сначала будет загружен экземпляр ncurses из optware, то ваш вариант подгружен не будет, так как загрузчик не увидит разницы, и, соответственно, необходимости в повторной загрузки в память разделяемого объекта.


Все, разобрался:

CPPFLAGS="-O2 -pipe -fPIC -I/opt/brcm/hndtools-mipsel-uclibc-4.3.5-K26/include " \
В опции -I/... здесь указана т.н. стандартная директория поиска интерфейсов. Она и так будет использоваться тулчейном без явного на то указания. Если не используется ключ -nostdinc, то эту опцию можно опустить.

vectorm
30-05-2011, 07:44
...........
Ну я только учусь :)
Спасибо за рекомендации.
Я пытаюсь решить конкретную узкую задачу в лоб, ну и плюс лишний опыт.

ryzhov_al
30-05-2011, 07:49
Ну я только учусь :)
Спасибо за рекомендации.
Ни в коем случае не пытаюсь разнести в клочья ваши созидательные поползновения:)
Просто разглядел грабли, на которые сам когда-то налетел.

necrom
30-11-2011, 21:31
Пытаюсь собрать toollchain. Под Debian c ядром 2.6.26-2-686
Выполняю следующие команды, аналогично этой (http://www.hub.ru/wiki/%D0%9A%D1%80%D0%BE%D1%81%D1%81-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D 0%B8%D1%8F) инструкции


svn co https://svn.nslu2-linux.org/svnroot/optware/trunk optware
echo "export OPTWARE_TARGET=oleg" >> .profile
cd optware
make directories toolchain


Но сборка до конца не доходит, из лога видно, что нет файла binutils на сервере.


+ wget --tries=5 --passive-ftp -P /home/necrom/downloads -c http://www.kernel.org/pub/linux/devel/binutils/binutils-2.15.94.0.2.tar.gz
--2011-12-01 02:22:20-- http://www.kernel.org/pub/linux/devel/binutils/binutils-2.15.94.0.2.tar.gz
Resolving www.kernel.org... 149.20.4.69
Connecting to www.kernel.org|149.20.4.69|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2011-12-01 02:22:20 ERROR 404: Not Found.

+ test -f /home/necrom/downloads/binutils-2.15.94.0.2.tar.gz
+ abort 'file binutils-2.15.94.0.2.tar.gz not found'
+ echo file binutils-2.15.94.0.2.tar.gz not found
file binutils-2.15.94.0.2.tar.gz not found
+ exec false
make: *** [/home/necrom/optware/toolchain/crosstool/.built] Ошибка 1

Подскажите где взять его.
И ещё такой вопрос, данный toollchain подойдёт для:

Linux version 2.4.37.11 (root@localhost) (gcc version 3.4.6) 1.9.2.7-d-r2624

ryzhov_al
01-12-2011, 05:05
Пытаюсь собрать toollchain. Под Debian c ядром 2.6.26-2-686
Выполняю следующие команды, аналогично этой (http://www.hub.ru/wiki/%D0%9A%D1%80%D0%BE%D1%81%D1%81-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D 0%B8%D1%8F) инструкцииУже ответил в личке на ваши вопросы. Прошу в будущем или писать только в личку, или писать сюда прилюдно.

И ещё такой вопрос, данный toollchain подойдёт для:Да.

necrom
01-12-2011, 18:04
Сегодня на конец то собрал toolchain, но возникла проблема со сборкой тестового пакета для rtorrent.
Что сделал:


Устанавил пакеты:

sudo apt-get install autoconf automake bash bison++ bzip2 diff dropbear file flex g++ gawk groff libncurses-dev libtool libslang2 make mc patch perl sed shtool subversion tar texinfo zlib1g zlib1g-dev build-essential

Добавляем в ~/.profile

export OPTWARE_TARGET=oleg
Пере зашёл в Gnome.

cd ~
svn co http://svn.nslu2-linux.org/svnroot/optware/trunk optware
cd ./optware
Скачал пакеты и добавил в папку download

binutils-2.17.50.0.8.tar.bz2
linux-libc-headers-oleg.tar.bz2
buildroot-svn-17310.tar.gz
ncurses-5.5.tar.gz
busybox-1.1.3.tar.bz2
uClibc++-0.2.2+r26250.tbz2
gcc-4.1.1.tar.bz2
uClibc-0.9.28.tar.bz2
gdb-6.5.tar.bz2
uClibc-locale-030818.tgz



make directories toolchain
make oleg-target
cd oleg
make directories ipkg-utils
make rtorrent

Всё шло хорошо пока не выпал такой вот букет.


/home/necrom/optware/oleg/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-uclibc-gcc -c -I/home/necrom/optware/oleg/builds/xmlrpc-c -I/home/necrom/optware/oleg/builds/xmlrpc-c/include -I/home/necrom/optware/oleg/builds/xmlrpc-c/include -I/home/necrom/optware/oleg/builds/xmlrpc-c/lib/util/include -I/home/necrom/optware/oleg/staging/opt/include -DNDEBUG -O2 -pipe -I/home/necrom/optware/oleg/staging/opt/include -Wall -Wundef -Wimplicit -W -Winline -Wundef -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -fno-common -g -O3 xmlrpc_curl_transport.c -fPIC -DPIC -o xmlrpc_curl_transport.lo
xmlrpc_curl_transport.c:78:24: error: curl/types.h: No such file or directory
xmlrpc_curl_transport.c: In function 'setInterrupt':
xmlrpc_curl_transport.c:1733: warning: pointer targets in assignment differ in signedness
xmlrpc_curl_transport.c: In function 'finishAsynch':
xmlrpc_curl_transport.c:1998: warning: pointer targets in passing argument 5 of 'curlMulti_finish' differ in signedness
xmlrpc_curl_transport.c: In function 'call':
xmlrpc_curl_transport.c:2055: warning: pointer targets in passing argument 4 of 'performRpc' differ in signedness
make[4]: *** [xmlrpc_curl_transport.lo] Ошибка 1
make[4]: Leaving directory `/home/necrom/optware/oleg/builds/xmlrpc-c/lib/curl_transport'
make[3]: *** [curl_transport/all] Ошибка 2
make[3]: Leaving directory `/home/necrom/optware/oleg/builds/xmlrpc-c/lib'
make[2]: *** [lib/all] Ошибка 2
make[2]: Leaving directory `/home/necrom/optware/oleg/builds/xmlrpc-c'
make[1]: *** [/home/necrom/optware/oleg/builds/xmlrpc-c/.built] Ошибка 2
make[1]: Leaving directory `/home/necrom/optware/oleg'
make: *** [/home/necrom/optware/oleg/builds/rtorrent/.configured] Ошибка 2

Ошибка была в том, что в поставляемом файле xmlrpc_curl_transport.c нужно за комментировать на строке 78 библиотеку curl/types.h

xmlrpc_curl_transport.c:78:24: error: curl/types.h: No such file or directory

Для поиска файла используем

find ./ -name 'xmlrpc_curl_transport.c'

Подскажите, как собрать теперь в пакет rtorrent. А также udpxy, скаченный отсюда (http://sourceforge.net/projects/udpxy/). Желательно детально, если не сложно.

ryzhov_al
02-12-2011, 07:51
Ошибка была в том, что в поставляемом файле xmlrpc_curl_transport.c нужно за комментировать на строке 78 библиотеку curl/types.h Загляните (http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/rtorrent_0.8.6-1_mipsel.ipk) в пакет rtorrent, там есть зависимая libcurl, для которой могли забыть добавить:
а) цель curl-stage в rtorrent.mk,
б) путь к интерфейсам (ключ -I/... для компилятора) и самой библиотеке (ключ -L/... для линковщика).


Подскажите, как собрать теперь в пакет rtorrent. А также udpxy, скаченный отсюда (http://sourceforge.net/projects/udpxy/). Желательно детально, если не сложно.
1) Прочитать README (http://sourceforge.net/projects/udpxy/files/udpxy/Chipmunk-1.0/README/download) и убедиться, что у udpxy 1.0 нет никаких зависимых.
2) Скачать и распаковать исходники:


$ wget http://downloads.sourceforge.net/project/udpxy/udpxy/Chipmunk-1.0/udpxy.1.0-Chipmunk-18.tgz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2 Fudpxy%2Ffiles%2Fudpxy%2FChipmunk-1.0%2F&ts=1322811779&use_mirror=citylan
$ tar -xvf ../downloads/udpxy.1.0-Chipmunk-18.tgz\?r\=http\:%2F%2Fsourceforge.net%2Fprojects% 2Fudpxy%2Ffiles%2Fudpxy%2FChipmunk-1.0%2F
$ cd ./udpxy-1.0-Chipmunk-18/
3) Подправить Makefile, указав кросс-компилятор строчкой CC := /opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
4) Скомпилировать, выполнив make.
5) Забрать на роутер результат компиляции - файл ./udpxy

Опционально можно удалить из полученного бинарника отладочные символы:

$ du -h ./udpxy
112K ./udpxy
$ /opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-strip ./udpxy
$ du -h ./udpxy
96K ./udpxy

В составе прошивки:

$ which udpxy
/usr/sbin/udpxy
$ du -h /usr/sbin/udpxy
65.5K /usr/sbin/udpxy
$ cat /.version
1.9.2.7-rtn-r3497

ЗЫ. Единственная уважительная причина использования Optware - прошивка ветки -d при использовании заметного числа готовых зависимых библиотек.

necrom
02-12-2011, 14:55
Загляните (http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable/rtorrent_0.8.6-1_mipsel.ipk) в пакет rtorrent, там есть зависимая libcurl, для которой могли забыть добавить:
а) цель curl-stage в rtorrent.mk,
б) путь к интерфейсам (ключ -I/... для компилятора) и самой библиотеке (ключ -L/... для линковщика).

Сам torrent собрался, только вот не понимаю как его в пакет завернуть .ipk.
Конфиг был стандартный, оставляемый с optware

RTORRENT_SITE=http://libtorrent.rakshasa.no/downloads

RTORRENT_VERSION ?= 0.8.6
RTORRENT_IPK_VERSION ?= 1

RTORRENT_SVN=svn://rakshasa.no/libtorrent/trunk/rtorrent
#RTORRENT_SVN_REV=1037
ifdef RTORRENT_SVN_REV
RTORRENT_SOURCE=rtorrent-svn-$(RTORRENT_SVN_REV).tar.gz
else
RTORRENT_SOURCE=rtorrent-$(RTORRENT_VERSION).tar.gz
endif
RTORRENT_DIR=rtorrent-$(RTORRENT_VERSION)
RTORRENT_UNZIP=zcat
RTORRENT_MAINTAINER=NSLU2 Linux <nslu2-linux@yahoogroups.com>
RTORRENT_DESCRIPTION=rtorrent is a BitTorrent client for ncurses, using the libtorrent library.
RTORRENT_SECTION=net
RTORRENT_PRIORITY=optional
RTORRENT_NCURSES=$(strip \
$(if $(filter ds101g syno-e500, $(OPTWARE_TARGET)), ncurses, \
$(NCURSES_FOR_OPTWARE_TARGET)))
RTORRENT_DEPENDS=libtorrent, $(RTORRENT_NCURSES), libcurl, xmlrpc-c, zlib
RTORRENT_SUGGESTS=dtach, screen, adduser
RTORRENT_CONFLICTS=

#
# RTORRENT_CONFFILES should be a list of user-editable files
RTORRENT_CONFFILES=/opt/etc/rtorrent.conf


#
# RTORRENT_PATCHES should list any patches, in the the order in
# which they should be applied to the source code.
#
RTORRENT_PATCHES=$(RTORRENT_SOURCE_DIR)/uint32_t.patch

#
# If the compilation of the package requires additional
# compilation or linking flags, then list them here.
#
RTORRENT_CPPFLAGS=-O3 -I$(STAGING_INCLUDE_DIR)/$(RTORRENT_NCURSES)
RTORRENT_LDFLAGS=
RTORRENT_CONFIGURE=
ifeq ($(LIBC_STYLE), uclibc)
ifdef TARGET_GXX
RTORRENT_CONFIGURE += CXX=$(TARGET_GXX)
endif
endif
ifeq (ncurses, $(RTORRENT_NCURSES))
RTORRENT_CONFIGURE += ac_cv_search_add_wch=no
RTORRENT_CONFIGURE_OPTS = --without-ncursesw
endif
RTORRENT_CONFIGURE_OPTS += --with-xmlrpc-c

#
# RTORRENT_BUILD_DIR is the directory in which the build is done.
# RTORRENT_SOURCE_DIR is the directory which holds all the
# patches and ipkg control files.
# RTORRENT_IPK_DIR is the directory in which the ipk is built.
# RTORRENT_IPK is the name of the resulting ipk files.
#
# You should not change any of these variables.
#
RTORRENT_BUILD_DIR=$(BUILD_DIR)/rtorrent
RTORRENT_SOURCE_DIR=$(SOURCE_DIR)/rtorrent
RTORRENT_IPK_DIR=$(BUILD_DIR)/rtorrent-$(RTORRENT_VERSION)-ipk
ifdef RTORRENT_SVN_REV
RTORRENT_IPK=$(BUILD_DIR)/rtorrent_$(RTORRENT_VERSION)+r$(RTORRENT_SVN_REV)-$(RTORRENT_IPK_VERSION)_$(TARGET_ARCH).ipk
else
RTORRENT_IPK=$(BUILD_DIR)/rtorrent_$(RTORRENT_VERSION)-$(RTORRENT_IPK_VERSION)_$(TARGET_ARCH).ipk
endif
Путь к интерфейсам (ключ -I/... для компилятора) и самой библиотеке (ключ -L/... для линковщика).
Это я полагаю ключ RTORRENT_LDFLAGS=

Ещё не совсем понятно, где взять mipsel-uclibc-gcc, поискал его в toolchain нашёл только.

ls toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-

mipsel-linux-c++ mipsel-linux-uclibc-c++
mipsel-linux-cc mipsel-linux-uclibc-cc
mipsel-linux-c++filt mipsel-linux-uclibc-c++filt
mipsel-linux-cpp mipsel-linux-uclibc-cpp
mipsel-linux-g++ mipsel-linux-uclibc-g++
mipsel-linux-gcc mipsel-linux-uclibc-gcc
mipsel-linux-gcc-4.1.1 mipsel-linux-uclibc-gcc-4.1.1

Если обобщить весь алгоритм сборки:
То нужно:
1. Написать mk файл и положить в папку make.
2. Залить исходники в папку builds под тем же названием
А дальше как получить ipk не понимаю.

ryzhov_al
02-12-2011, 15:04
Ещё не совсем понятно, где взять mipsel-uclibc-gcc, поискал его в toolchain нашёл только...Потому, что я привёл в примере сборку с помощью энтузиасткого тулчейна.

В случае использования среды Optware...

...нужно:
1. Написать mk файл и положить в папку make.
... и положить патчи к исходникам в ./optware/sources/ если это необходимо.

2. Залить исходники в папку builds под тем же названиемНет. Вы же указываете в make-файле откуда выкачивать файл. Если такого файла в папке ./optware/downloads нет, то среда Optware сама его выкачает, распакует в ./optware/builds, наложит патчи из ./optware/sources и скомпилирует.

А дальше как получить ipk не понимаю.

$ make rtottent-ipk
Кстати, вы можете посмотреть значение любой переменной среды, выполнив

$ make query-VAR_NAME
Для использования среды optware достаточно изучения двух (http://www.nslu2-linux.org/wiki/FAQ/Optware-uClibcBuild) этих (http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware) документов.

ЗЫ Повторюсь, оправдано ли использование Optware?

necrom
02-12-2011, 15:54
$ make rtottent-ipk
Для использования среды optware достаточно изучения двух (http://www.nslu2-linux.org/wiki/FAQ/Optware-uClibcBuild) этих (http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware) документов.

Спасибо получилось!

Кстати, вы можете посмотреть значение любой переменной среды, выполнив

$ make query-VAR_NAME

Полезная вещь, спасибо, буду использовать.

ЗЫ Повторюсь, оправдано ли использование Optware?
Если для простых сборок, то думаю нет. Решил просто с неё начать, для ознакомления работы с toolchain. А чем лучше сборка от энтузиастов и OpenWRT Buildroot? (Полагаю, новым ядром или ещё чем?)

ryzhov_al
02-12-2011, 16:18
А чем лучше сборка от энтузиастов и OpenWRT Buildroot? (Полагаю, новым ядром или ещё чем?)

Ядром (http://www.wl500g.info/showpost.php?p=238373&postcount=4).
GCC и uClibc (http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.4.6-K26-x86_64-r3458.tar.bz2&can=2&q=).
Актуальностью (http://www.wl500g.info/showpost.php?p=239545&postcount=40) и многообразием (http://www.wl500g.info/showpost.php?p=238410&postcount=11) пакетов.

necrom
02-12-2011, 17:46
Ядром (http://www.wl500g.info/showpost.php?p=238373&postcount=4).
GCC и uClibc (http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.4.6-K26-x86_64-r3458.tar.bz2&can=2&q=).
Актуальностью (http://www.wl500g.info/showpost.php?p=239545&postcount=40) и многообразием (http://www.wl500g.info/showpost.php?p=238410&postcount=11) пакетов.

Перечитал пол темы до 4 страницы вроде ещё понимал, как то (не всё правда), но после 4 забуксовал как то. Я так понял, что вы пере собираете репозиторий, для прошивки от энтузиастов? А debwrt решили не трогать?
Для сборки в пакет от энтузиастов используете ipkg-utils (http://wl500g.googlecode.com/svn/ipkg/src/packages/ipkg-utils/)?
Полагаю ещё это (http://code.google.com/p/wl500g-repo/source/browse/trunk/INSTALL) ман к установки смешанного toolchain OpenWrt и Oleg.
Прочитал ещё эту тему (http://www.wl500g.info/showthread.php?t=25394) тоже почерпнул немного нового, спасибо. Как наберусь знаний, по сборке присоединюсь к вам ;)

ryzhov_al
02-12-2011, 18:35
Я так понял, что вы пере собираете репозиторий, для прошивки от энтузиастов? А debwrt решили не трогать?Да. Цель - сделать самый распространённый и полнокровный репозиторий сообщества OpenWRT доступным на роутерах ASUS с энтузиасткой прошивкой.

Для сборки в пакет от энтузиастов используете ipkg-utils (http://wl500g.googlecode.com/svn/ipkg/src/packages/ipkg-utils/)?Опосредованно - да. И Optware и OpenWRT Buildroot используют свой встроенный функционал для создания пакетов на основе ipkg-utils. Процесс сборки пакета после компиляции автоматизирован.

Полагаю ещё это (http://code.google.com/p/wl500g-repo/source/browse/trunk/INSTALL) ман к установки смешанного toolchain OpenWrt и Oleg.Да. Там мной описаны шаги, позволяющие собирать пакеты OpenWRT энтузиастким тулчейном. Для того, чтобы облегчить другим авторам сборку необходимого им софта.

necrom
04-12-2011, 19:55
Попытался сегодня собрать udpxy через

make udpxy
B получил кучу предупреждений, и ошибок.

make/template.mk:114: предупреждение: переопределение команд для цели `/home/necrom/optware/oleg/builds/<foo>/.configured'
make/simpl_temp.mk:59: предупреждение: старые команды для цели `/home/necrom/optware/oleg/builds/<foo>/.configured' игнорируются

Разобрался, не было конфигурационных файлов

Посидел поковырялся, даже не получилось скомпилить udpxy просто руками.
Настройки в файле сделал такие:

СС := /home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1
Флаги убрал, с ними вообще даже не стартует.

make

Making a [release] version (use 'debug' target as an alternative)

make[1]: Entering directory `/home/necrom/optware/downloads/udpxy-1.0'
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c udpxy.c -o udpxy.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c rparse.c -o rparse.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c util.c -o util.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c prbuf.c -o prbuf.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c ifaddr.c -o ifaddr.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c ctx.c -o ctx.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c mkpg.c -o mkpg.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c rtp.c -o rtp.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c uopt.c -o uopt.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c dpkt.c -o dpkt.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c netop.c -o netop.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c extrn.c -o extrn.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c main.c -o main.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -c udpxrec.c -o udpxrec.o
/home/necrom/optware/toolchain/mipsel-linux-uclibc/gcc-4.1.1-uclibc-0.9.28/bin/mipsel-linux-gcc-4.1.1 -DUDPXREC_MOD -DNDEBUG -DTRACE_MODULE -o udpxy udpxy.o rparse.o util.o prbuf.o ifaddr.o ctx.o mkpg.o rtp.o uopt.o dpkt.o netop.o extrn.o main.o udpxrec.o
udpxy.o: In function `server_loop':
udpxy.c:(.text+0x49c8): undefined reference to `pselect'
collect2: ld returned 1 exit status
make[1]: *** [udpxy] Ошибка 1
make[1]: Leaving directory `/home/necrom/optware/downloads/udpxy-1.0'
make: *** [release] Ошибка 2

ryzhov_al
05-12-2011, 06:19
$(MAKE) <bar>-stage <baz>-stageЗдесь в примере просто обозначено место для сборки зависимостей. Убирайте.

LDFLAGS="$(STAGING_LDFLAGS) $(UDPXY_LDFLAGS)" \
./configure \
--build=$(GNU_HOST_NAME) \
udpxy не использует GNU Build System, поэтому скрипта ./configure в составе исходников udpxy вы не найдёте.

udpxy.c.text+0x49c8): undefined reference to `pselect'Здравствуй, optware, Новый год!:) Вот вам первая подножка от старого тулчейна: Optware использует uClibC 0.9.28 which does not have pselect() (http://lists.uclibc.org/pipermail/uclibc/2008-January/039830.html).

Бросайте вы его!

necrom
06-12-2011, 16:43
udpxy.c.text+0x49c8): undefined reference to `pselect'Здравствуй, optware, Новый год!:) Вот вам первая подножка от старого тулчейна: Optware использует uClibC 0.9.28 which does not have pselect() (http://lists.uclibc.org/pipermail/uclibc/2008-January/039830.html).
Бросайте вы его!
Аргх, видимо придётся переезжать (.
А ещё такой вопрос, после обновление прошивки на энтузиастов, нужно ли переустанавливать все пакеты? или можно обойтись малыми потерями изменив только файлы в директории /usr/local/sbin ?

ryzhov_al
06-12-2011, 16:48
А ещё такой вопрос, после обновление прошивки на энтузиастов, нужно ли переустанавливать все пакеты? или можно обойтись малыми потерями изменив только файлы в директории /usr/local/sbin ?Обновление с какой прошивки?
Если в пределах веток -10.7/-d/-rtn, то необходимо озаботиться только сохранением и последующим восстановлением flashfs через web-интерфейс.

necrom
09-12-2011, 00:44
Обновление с какой прошивки?
Если в пределах веток -10.7/-d/-rtn, то необходимо озаботиться только сохранением и последующим восстановлением flashfs через web-интерфейс.
С 1.9.2.7-d-r2624

Не успел переехать на новую прошивку как в логе начали сыпаться проблемы ) Перестал определяться жёсткий диск размером в 1Тб. В логе падают сообщения

Jan 1 04:00:03 syslogd started: BusyBox v1.19.2
Jan 1 04:00:03 kernel: klogd started: BusyBox v1.19.2 (2011-10-22 20:06:56 MSK)
Jan 1 04:00:03 kernel: Linux version 2.6.22.19 (root@localhost) (gcc version 4.4.6 (GCC) ) #2 Sat Oct 22 20:28:56 MSK 2011
Jan 1 04:00:03 kernel: CPU revision is: 00029029
Jan 1 04:00:03 kernel: Setting the PFC to its default value
Jan 1 04:00:03 kernel: Determined physical RAM map:
Jan 1 04:00:03 kernel: memory: 02000000 @ 00000000 (usable)
Jan 1 04:00:04 dropbear[202]: Running in background
Jan 1 04:00:04 dnsmasq[209]: started, version 2.59 cachesize 512
Jan 1 04:00:04 dnsmasq[209]: compile time options: IPv6 GNU-getopt no-RTC no-DBus no-i18n DHCP no-scripts no-TFTP no-conntrack no-IDN
Jan 1 04:00:04 dnsmasq-dhcp[209]: DHCP, IP range 192.168.1.101 -- 192.168.1.254, lease time 1d
Jan 1 04:00:04 dnsmasq[209]: read /etc/hosts - 4 addresses
Jan 1 04:00:05 kernel: usbcore: registered new interface driver usbfs
Jan 1 04:00:05 kernel: usbcore: registered new interface driver hub
Jan 1 04:00:05 kernel: usbcore: registered new device driver usb
Jan 1 04:00:05 kernel: ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
Jan 1 04:00:05 kernel: ehci_hcd 0000:00:03.1: EHCI Host Controller
Jan 1 04:00:05 kernel: ehci_hcd 0000:00:03.1: new USB bus registered, assigned bus number 1
Jan 1 04:00:05 kernel: ehci_hcd 0000:00:03.1: irq 6, io mem 0x18003800
Jan 1 04:00:05 kernel: ehci_hcd 0000:00:03.1: USB 0.0 started, EHCI 1.00
Jan 1 04:00:05 kernel: usb usb1: configuration #1 chosen from 1 choice
Jan 1 04:00:05 kernel: hub 1-0:1.0: USB hub found
Jan 1 04:00:05 kernel: hub 1-0:1.0: 2 ports detected
Jan 1 04:00:05 kernel: usbcore: registered new interface driver usblp
Jan 1 04:00:06 kernel: usb 1-1: new high speed USB device using ehci_hcd and address 2
Jan 1 04:00:06 kernel: Linux video capture interface: v2.00
Jan 1 04:00:06 kernel: usb 1-1: configuration #1 chosen from 1 choice
Jan 1 04:00:06 kernel: hub 1-1:1.0: USB hub found
Jan 1 04:00:06 kernel: hub 1-1:1.0: 2 ports detected
Jan 1 04:00:06 kernel: usb 1-1.2: new high speed USB device using ehci_hcd and address 3
Jan 1 04:00:06 kernel: usb 1-1.2: configuration #1 chosen from 1 choice
Jan 1 04:00:06 kernel: usbcore: registered new interface driver uvcvideo
Jan 1 04:00:06 kernel: USB Video Class driver (v0.1.0)
Jan 1 04:00:07 kernel: SCSI subsystem initialized
Jan 1 04:00:07 kernel: Initializing USB Mass Storage driver...
Jan 1 04:00:07 kernel: scsi0 : SCSI emulation for USB Mass Storage devices
Jan 1 04:00:07 kernel: usbcore: registered new interface driver usb-storage
Jan 1 04:00:07 kernel: USB Mass Storage support registered.
Jan 1 04:00:07 kernel: NTFS driver 2.1.28 [Flags: R/O MODULE].
Jan 1 04:00:09 dnsmasq[209]: read /etc/hosts - 4 addresses
Jan 1 04:00:09 dhcp client: deconfig: lease is lost
Jan 1 04:00:09 kernel: scsi 0:0:0:0: Direct-Access WD Ext HDD 1021 2002 PQ: 0 ANSI: 4
Jan 1 04:00:09 kernel: sd 0:0:0:0: [sda] 1953519616 512-byte hardware sectors (1000202 MB)
Jan 1 04:00:09 kernel: sd 0:0:0:0: [sda] Test WP failed, assume Write Enabled
Jan 1 04:00:09 kernel: sd 0:0:0:0: [sda] Assuming drive cache: write through
Jan 1 04:00:09 kernel: sd 0:0:0:0: [sda] Test WP failed, assume Write Enabled
Jan 1 04:00:09 kernel: sd 0:0:0:0: [sda] Assuming drive cache: write through
Jan 1 04:00:09 dnsmasq[209]: read /etc/hosts - 4 addresses
Jan 1 04:00:09 dnsmasq[209]: using nameserver 10.39.224.1#53
Jan 1 04:00:09 dnsmasq[209]: using nameserver 10.39.224.2#53
Jan 1 04:00:10 udpxy[364]: udpxy 1.0-Chipmunk (build 20) standard is starting
Jan 1 04:00:10 kernel: sda:<6>vlan1: dev_set_allmulti(master, 1)
Jan 1 04:00:10 kernel: emf:Invalid interface identifier
Jan 1 04:00:10 dhcp client: bound IP : 10.39.229.219 from 10.39.229.193
Jan 1 04:00:11 dropbear[376]: Failed listening on '22': Error listening: Address already in use
Jan 1 04:00:11 dropbear[376]: Premature exit: No listening ports available.

Единственное, что помогло

poost-boot

#!/bin/sh
chmod 777 /tmp

# Handmade
/usr/sbin/pwrled off
sleep 20
/usr/sbin/pwrled on
mkdir -p /tmp/mnt/disca_3
mkdir -p /tmp/harddisk
/usr/local/sbin/pre-mount
mount -a
/usr/local/sbin/post-mount

Но ошибки продолжают валится и swap автоматом не монтируется из fstab

vectorm
09-12-2011, 07:01
Не успел переехать на новую прошивку как в логе начали сыпаться проблемы ) Перестал определяться жёсткий диск размером в 1Тб. В логе падают сообщения


Jan 1 04:00:09 kernel: scsi 0:0:0:0: Direct-Access WD Ext HDD 1021 2002 PQ: 0 ANSI: 4
Jan 1 04:00:09 kernel: sd 0:0:0:0: [sda] 1953519616 512-byte hardware sectors (1000202 MB)
Jan 1 04:00:09 kernel: sd 0:0:0:0: [sda] Test WP failed, assume Write Enabled
Jan 1 04:00:09 kernel: sd 0:0:0:0: [sda] Assuming drive cache: write through

Но ошибки продолжают валится и swap автоматом не монтируется из fstab
Вы хотите софтово решить железную проблему???
У Вас либо диск накрывается, либо его коробка. Роутер совсем ни при чем.
Погуглить ошибку не получается что-ли?

necrom
09-12-2011, 10:24
Вы хотите софтово решить железную проблему???
У Вас либо диск накрывается, либо его коробка. Роутер совсем ни при чем.
Погуглить ошибку не получается что-ли?
С диском всё нормально, да и с коробкой. На прошивке 1.9.2.7-d проблем не было, диск монтировался автоматом.
Ошибку гуглил, в большинстве случаев, проблему так и не решили, пишут что

Yes, "Assuming drive cache: write through" is not an error.

voidshah
14-12-2011, 10:44
возникла проблема при выводе кириллицы кросс-компиленной энтузиастским тулчейном ncursesw 5.9:
mytest слинковано -rpath,/opt/lib-oleg:/opt/lib
линк пошел на /opt/lib, т.к. свою ncursesw и libc.so.0 (от энтузиастов) из /opt/lib-oleg я удалил

ldd mytest
libncursesw.so.5 => /opt/lib/libncursesw.so.5 (0x2aac0000)
libgcc_s.so.1 => /opt/lib-oleg/libgcc_s.so.1 (0x2ab25000)
libc.so.0 => /opt/lib/libc.so.0 (0x2ab47000)
libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x2abfc000)
libc.so.0 => /lib/libc.so.0 (0x2ac1b000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)
результат

Русский UTF-8 текст
Тест русского языка
Вставляю в /opt/lib-oleg свою ncursesw и libc.so.0

ldd mytest
libncursesw.so.5 => /opt/lib-oleg/libncursesw.so.5 (0x2aac0000)
libgcc_s.so.1 => /opt/lib-oleg/libgcc_s.so.1 (0x2ab29000)
libc.so.0 => /opt/lib-oleg/libc.so.0 (0x2ab4b000)
libc.so.0 => /lib/libc.so.0 (0x2abc4000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)
Линк идет на /opt/lib-oleg, что закономерно
Результат:

Р▒~C▒~A▒~Aкий UTF-8 ▒~Bек▒~A▒~B
Те▒~A▒~B ▒~@▒~C▒~A▒~Aкого ▒~Oз▒~Kка
ключи для сборки ставил такие же как в optware.
код mytest:

#define _XOPEN_SOURCE_EXTENDED
#include <ncurses.h>
#include <unistd.h>
#include <signal.h>
#include <locale.h>

void sig(int n)
{
}

int main()
{
setlocale(LC_ALL, "");
signal(SIGINT, sig);

initscr();
char text[]="Русский UTF-8 текст\n";
printw("%s",text);
printw("Тест русского языка");
refresh();
pause();
endwin();

return 0;
}
собран энтузиастским тулчейном тоже.
Что с #define _XOPEN_SOURCE_EXTENDED, что без этого - результат одинаков...
Куда копать?:confused: Мой косяк при сборке ncursesw? Косяк тулчейна?
Никакие танцы с бубном не помогают...

ryzhov_al
14-12-2011, 10:51
Подтверждаю, хотя не могу точно утверждать о причине кривого вывода кириллицы в rtorrent, использующей ncurses:

*** rTorrent 0.8.9/0.12.9 - RTRouter:9357 ***
[View: main]
sr-trine2.iso
done 1304.9 MB Rate: 0.0 / 0.0 KB Uploaded: 75.2 MB

2011 Leonard Cohen - The Complete Studio Albums Collection (flac)
done 2711.4 MB Rate: 0.0 / 0.0 KB Uploaded: 20607.5 MB

* У-~Aави-~G
* [OPEN] 4.0 / 1241.9 MB Rate: 0.0 / 0.0 KB Uploaded: 7.8 MB
* Hashing: Checking hash [ 5%]

Nightwish - Imaginaerum [2011]
[OPEN] 0.0 / 1000.7 MB Rate: 0.0 / 0.0 KB Uploaded: 468.5 MB


(14:39:50) Using 'epoll' based polling.
(14:39:50) Using 'epoll' based polling.
(14:39:50) XMLRPC initialized with 897 functions.
(14:39:50) The SCGI socket is bound to a specific network device yet may still p
ose a security risk, consider using 'scgi_local'.
(14:39:50) Ignoring ~/.rtorrent.rc.
(14:39:51) Starting DHT server on port 12345.
[Throttle 1500/1500 KB] [Rate 0.4/ 0.3 KB] [Port: 12345] [U 0/310] [D 0/310]
В optware'вском ncurses всё в порядке. По xmlrpc отдача кириллических имён торрентов и имён файлов не страдает. Всё хорошо в обоих случаях.

voidshah
14-12-2011, 11:00
Да. По xmlrpc с кириллицей все в порядке (касаемо rtorrent). Собственно с rtorrent эта проблема ncursesw и всплыла.

lly
14-12-2011, 12:06
У нас uClibc собрана без UCLIBC_HAS_LOCALE

voidshah
14-12-2011, 12:28
У нас uClibc собрана без UCLIBC_HAS_LOCALE
Т.е. с эти и связана некорректная работа ncurcesw? Она не распознает LANG=ru_RU.UTF-8, LC_ALL=ru_RU.UTF-8 и соответственно rtorrent тоже кракозябры выдает. Так? А собрать ее с UCLIBC_HAS_LOCALE? Какие были причины собирать без UCLIBC_HAS_LOCALE?

lly
14-12-2011, 12:34
Какие были причины собирать без UCLIBC_HAS_LOCALE?
Они очевидны - размер и то, что встроенным приложениям перекодировка нафиг не упёрлась.

voidshah
14-12-2011, 12:39
Они очевидны - размер и то, что встроенным приложениям перекодировка нафиг не упёрлась.
На много размер увеличивается? Правильно ли я понимаю, что для включения UCLIBC_HAS_LOCALE надо в /uClibc/config/0.9.32/common поставить UCLIBC_HAS_LOCALE=y, потом пересобрать тулчейн и прошивку. И будет работать?

lly
14-12-2011, 12:43
На много размер увеличивается?
А посмотреть в комментарий "make menuconfig" или напрямую в Config.in из uClibc слабо?
Обещают ~300Kb

Правильно ли я понимаю, что для включения UCLIBC_HAS_LOCALE надо в /uClibc/config/0.9.32/common поставить UCLIBC_HAS_LOCALE=y
да

, потом пересобрать тулчейн и прошивку. И будет работать?
Прошивке по барабану. ncursesw должно, но лично не проверял.

voidshah
14-12-2011, 12:59
А посмотреть в комментарий "make menuconfig" или напрямую в Config.in из uClibc слабо?
Ну не настолько я еще знаю, где, чего смотреть...
Пересобрать попробую - о результате отпишусь.
UPD. с UCLIBC_HAS_LOCALE заработало!:)

UPD 2. Не удается отвязать от прошивки... Как это можно сделать, чтобы прошивку с с UCLIBC_HAS_LOCALE не собирать?

ldd mytest
libncursesw.so.5 => /opt/lib-oleg/libncursesw.so.5 (0x2aac0000)
libgcc_s.so.1 => /opt/lib-oleg/libgcc_s.so.1 (0x2ab29000)
libc.so.0 => /opt/lib-oleg/libc.so.0 (0x2ab4b000)
libc.so.0 => /lib/libc.so.0 (0x2abfc000)
ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)
Копирование файлов в /opt/lib-oleg с /lib ничего не дает...

ryzhov_al
15-12-2011, 06:51
Копирование файлов в /opt/lib-oleg с /lib ничего не дает...И не даст, потому что библиотеки из /lib будут искать зависимых только в /lib, куда бы ты их не копировал. Для того, чтобы они нашли друг друга в /opt/lib-oleg необходимо:


или пересобрать прошивочные библиотеки с ключом линковщика -Wl,-rpath,/opt/lib-oleg,
или сделать грязный хак без пересборки, объявив переменную среды export LD_LIBRARY_PATH="/opt/lib-oleg".

voidshah
16-12-2011, 08:21
или пересобрать прошивочные библиотеки с ключом линковщика -Wl,-rpath,/opt/lib-oleg,
или сделать грязный хак без пересборки, объявив переменную среды export LD_LIBRARY_PATH="/opt/lib-oleg".

Никак не могу найти, куда прописать ключ линковщика -Wl,-rpath,/opt/lib-oleg:( (сам скрипт сборки тулчейна для меня пока очень сложен:(), а "грязным" хаком, заниматься не хочется...
Копать надо ведь тут - toolchain/build_dir/toolchain-mipsel_gcc4.4.6/uClibc-0.9.32/ ? Но где именно вписать -Wl,-rpath,/opt/lib-oleg ? Подскажите плз

UPD. Удалось собрать либы тулчейна с -Wl,-rpath,/opt/lib-oleg, кроме libgcc_s.so. Пытаюсь решить этот (http://www.wl500g.info/showpost.php?p=242136&postcount=141) вопрос... Вот только libgcc_s.so и осталась...:confused:

vitus153
06-05-2012, 10:42
Доброе время суток!
Столкнулся со следующей проблемой. Мне необходимо собрать PHP под архитектуру Mipsel с определенными ключами. Поставил Ubuntu 11.04, toolchain (как описано здесь (http://www.hub.ru/wiki/Кросс-компиляция) с небольшими дополнениями с этого форума).

Для проверски сделал make mc-ipk. Сборка прошла, пакет сформировался (т.е. предположительно все работает).

Приступил к сборе php. И возникла следующая ошибка:


./configure: 11818: 5: Bad file descriptor
./configure: 11818: :: checking for __dn_skipname in -lbind: not found
./configure: 11818: 6: Bad file descriptor
./configure: 11818: checking for __dn_skipname in -lbind... : not found
./configure: 11818: ac_fn_c_try_link: not found
./configure: 11818: 5: Bad file descriptor
./configure: 11818: :: result: no: not found
./configure: 11818: 6: Bad file descriptor
./configure: 11818: no: not found
./configure: 11823: 5: Bad file descriptor
./configure: 11823: :: checking for ANSI C header files: not found
./configure: 11823: 6: Bad file descriptor
./configure: 11823: checking for ANSI C header files... : not found
./configure: 11922: ac_fn_c_try_compile: not found
./configure: 11924: 5: Bad file descriptor
./configure: 11924: :: result: no: not found
./configure: 11924: 6: Bad file descriptor
./configure: 11924: no: not found
./configure: 11971: ac_cv_header_dirent_dirent.h: not found
./configure: 11971: 5: Bad file descriptor
./configure: 11971: :: checking for dirent.h that defines DIR: not found
./configure: 11971: 6: Bad file descriptor
./configure: 11971: checking for dirent.h that defines DIR... : not found
eval: 1: Bad substitution
make: *** [/root/optware/oleg/builds/php/.configured] Ошибка 2

И всё! Гуглил и задавал вопросы яндексу - ничего не помогло! Перерыл php.mk и configurate - все без толку! Помогите, вторую ночь не сплю!

6epreu
26-05-2012, 11:56
Всем добрый день.

Пытаюсь собрать toolchhain для WL500 v2
Испробовал пакет crosstool и достаточно быстро от него отказался, так как день шаманства не дал никаких результатов.

Сейчас пробую собрать toolchain из crosstool-ng. Вот тут собственно проблема.
Делаю по инструкции http://forum.samdroid.net/wiki/showwiki/How+to+build+cross+toolchains+for+ARM+crosstool-NG
естественно подставляю настройки под mips архитектуру.
В итоге на этапе сборки компилятора имею следующее


[INFO ] ================================================== ===============
[INFO ] Installing final compiler
[EXTRA] Configuring final compiler
[EXTRA] Building final compiler
[ERROR] checking whether build environment is sane... configure: error: cannot compute suffix of object files: cannot compile
[ERROR] checking whether build environment is sane... make[3]: *** [configure-target-libiberty] Error 1
[ERROR] checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile
[ERROR] make[3]: *** [configure-target-libgfortran] Error 1
[ERROR] checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile
[ERROR] make[3]: *** [configure-target-libstdc++-v3] Error 1
[ERROR] make[2]: *** [all] Error 2
[ERROR] Build failed in step 'Installing final compiler'
[ERROR] Error happened in '/usr/local/lib/ct-ng-1.9.3/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
[ERROR] called from '/usr/local/lib/ct-ng-1.9.3/scripts/build/cc/gcc.sh' at line # 470 in function 'do_cc'
[ERROR] called from '/usr/local/lib/ct-ng-1.9.3/scripts/crosstool-NG.sh' at line # 597 in function 'main'
[ERROR] Look at '/opt/ctng/build.log' for more info on this error.
[ERROR] (elapsed: 21:59.45)
[21:59] / make[1]: *** [build] Error 2
make: *** [build.4] Error 2



Может кто сталкивался? А может просто кто нибудь тулчейном поделиться?

MercuryV
26-05-2012, 12:11
Может кто сталкивался? А может просто кто нибудь тулчейном поделиться?
Нет, не сталкивался.
Актуальный тулчейн можно взять тут (https://code.google.com/p/wl500g/downloads/list) и тут (https://code.google.com/p/wl500g-repo/downloads/list)

6epreu
26-05-2012, 12:51
я пока не очень знаком со сборкой кросс-компилятора, поэтому буду задавать глупые вопросы.

1) Почему на странице googlecode написано

This is a current hndtools-mipsel-uclibc-4.5.3-K26 x32 toolchain. If you can't wait your own toolchain building, use it this way:

Before runing "$ make" you may unpack toolchain at /opt/brcm directory and do "$ touch .toolchain_compiled" in a ./rtn/toolchain directory.

2) Я как понимаю вы указали мне компиляторы для последней версии прошивки?
У меня сейчас стоит версия WL500gpv2-1.9.2.7-10.trx и там стоит версия ядра Linux WL-BCAEC5C35447 2.4.20 #18 Sun Mar 30 13:13:29 MSD 2008 mips unknown

Если я правильно понял, мне нужно прошиться на самую последнюю версию, которая лежит здесь https://code.google.com/p/wl500g/downloads/detail?name=WL500gpv2-1.9.2.7-rtn-r4051.trx&can=2&q=

3) Из какого пакета собран этот тулчейн?

6epreu
26-05-2012, 14:21
Прошился самой последней прошивкой + распечатал компилятор и откомпилировал helloworld.
В итоге при запуске бинарника на роутере имею следующее


[admin@WL-BCAEC5C35447 soft]$ ./helloworld
./helloworld: '/lib/' is not an ELF file
./helloworld: '/usr/lib/' is not an ELF file
./helloworld: can't load library ''


Any ideas?

MercuryV
26-05-2012, 19:48
6epreu, вы правильно поняли, что указанный тулчейн подходит для -rtn прошивок.
Тулчейн собирается отсюда (https://code.google.com/p/wl500g/source/browse/#svn%2Ftoolchain)
Чтобы избежать множества вопросов, рекомендую ознакомиться в качестве годного примера с инструкцией (https://code.google.com/p/wl500g-repo/source/browse/trunk/INSTALL) по сборке нового репозитория Entware (http://wl500g.info/showthread.php?28036-%CF%E5%F0%E5%F5%EE%E4-%ED%E0-%ED%EE%E2%FB%E9-%F0%E5%EF%EE%E7%E8%F2%EE%F0%E8%E9-Entware-%F1-Optware)
Собирать или нет пакеты репозитория по указанной инструкции - дело произвольное, а вот посмотреть в Makefile откуда и как компилируется нужное ядро и тулчейн - можно.

P.S. что такое "распечатал компилятор" мне неведомо, возникают ассоциации только с печатью исходников gcc на трескучем матричном принтере.

ryzhov_al
26-05-2012, 20:19
Может кто сталкивался? А может просто кто нибудь тулчейном поделиться?Скажите, какая перед вами стоит задача?


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

если нужно скомпилировать бинарник, который будет использовать исключительно прошивочные библиотеки (/lib, /usr/lib) энтузиасткой прошивки, то вам нужен тулчейн (http://code.google.com/p/wl500g/downloads/list), которым была собрана энтузиасткая прошивка прошивка,
если ваша программа будет использовать кучу зависимостей, то лучше использовать тулчейн Entware (http://code.google.com/p/wl500g-repo/downloads/list) вместе с зависимыми библиотеками, которые с его помощью собраны (/opt/lib). В этом случае программа не будет зависеть от энтузиасткой прошивки.

6epreu
26-05-2012, 20:39
я скачал тулчейн по ссылку этой ссылку http://code.google.com/p/wl500g/downloads/detail?name=hndtools-mipsel-uclibc-4.5.3-K26-r4029.tar.bz2&can=2&q=
Распаковал его(вот тут я как раз и имел ввиду "распечатал", извиняюсь за сленг) и забиндил в /opt



mount --bind /tolchain/ /opt/brcm/


Обновил роутер до последней версии прошивки http://code.google.com/p/wl500g/downloads/detail?name=WL500gpv2-1.9.2.7-rtn-r4051.trx&can=2&q= вот этой.

Написал helloworld используя IDE CodeBlocks. Там (в CodeBlocks )без проблем добавил новый тулчейн, указав где лежит компилятор и линковщик. Компиляция прошла без проблем.
Залил на роутер и запустил. Получил:


[admin@WL-BCAEC5C35447 soft]$ ./helloworld
./helloworld: '/lib/' is not an ELF file
./helloworld: '/usr/lib/' is not an ELF file
./helloworld: can't load library ''


Задача у меня стоит такая. Я сам программист встроенного програмного обеспечения, у меня достаточно много полезных утилиток есть, которые я хотел бы заюзать на своем роутере. Хочу поставить toolchain и нормально компилировать.
Нативную компиляцию пока не рассматриваю - считаю, что уж очень.... долго будет.

пока что гуглю, почему может вылезать такая ошибка, но пока безуспешно.

И да... всем спасибо за отзывчивость. :)

ryzhov_al
26-05-2012, 20:44
Распаковал его(вот тут я как раз и имел ввиду "распечатал", извиняюсь за сленг) и забиндил в /opt



mount --bind /tolchain/ /opt/brcm/
А почему не просто создали (http://code.google.com/p/wl500g/wiki/CompilingCustomFirmware) символическую ссылку?


И да... всем спасибо за отзывчивость. :)Б-г в помощь (http://www.hub.ru/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D 0%B8%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0 %BC%D0%BC_%D0%B4%D0%BB%D1%8F_%D0%BC%D0%B0%D1%80%D1 %88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%82%D0%B E%D1%80%D0%B0).

6epreu
03-06-2012, 14:27
С GNU Build Tools я не работал. Это как я понимаю набор из autoconf, automake и libtool.
Все никак не могу допереть, почему не запускаются программы скомпилированные через IDE CodeBlocks
Вот (http://clip2net.com/s/1ZIAk) кстати настройки моего тулчейна

я этот баш скрипт, который дан по ссылке (http://www.hub.ru/wiki/%D0%9A%D1%80%D0%BE%D1%81%D1%81-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D 0%B8%D1%8F) его кому подпихивать? Я имеюю ввиду он является настроечным для autoconf, automake или что то другого???

ryzhov_al
03-06-2012, 15:02
я этот баш скрипт, который дан по ссылке (http://www.hub.ru/wiki/%D0%9A%D1%80%D0%BE%D1%81%D1%81-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D 0%B8%D1%8F) его кому подпихивать? Я имеюю ввиду он является настроечным для autoconf, automake или что то другого???Скрипт просто выставляет переменные среды, которые «подхватит» скрипт ./configure. После того, как ./configure из состава GNU build system отработает без ошибок, исходники будут сконфигурированы для дальнейшей кросс-компиляции.

ЗЫ. Шутка на википедии: На статью по GNU build system ведёт ссылка http://en.wikipedia.org/wiki/Autohell.

skuwakin
05-06-2012, 11:09
Доброго времени суток. несколько тупых вопросов по сборке программ на роутере.

1. после сборки и инсталл библиотек папки откуда они ставились можно чикать?

2. если по дурости сначала поставил младшую версию библитеки, а потом поставил постарше - это ни на что не повлияет?

3. можно ли (и если да,то как) удалить библ, поставленные через configure make make install

4. как они нумеруются (или какая старше, gnutils-2.4 или gnutils 2.12) просто при сборки на роутере ncdc ему надо то одну, то другую...

заранее спасибо за ответ.

don-pedro
05-06-2012, 14:19
при сборки на роутере ncdc ему надо то одну, то другую...
Не проще взять в entware готовый пакет?

ryzhov_al
05-06-2012, 14:46
Вопрос не в том, чтобы использовать, а в том, чтобы узнать как сделать самому.

Не проще взять в entware готовый пакет?Всё равно, что спросить И.Ньютона: «Не проще ли было просто съесть упавшее на голову яблоко?».

skuwakin
05-06-2012, 15:19
на таком не плохом железе (относительно конечно), сам бог велел собирать все что надо из исходиков. и тот же ziproxy распрекрасно собрался очень не хило работает.

Про ентваре... Я после покупки и прочтения бесценного материала от PetersV, попробовап перейти на него... Но "моя" уникальная прога zebedee на нем не пошла (ранее собранный екзашник) и мне пришлось вернуться к моей первональной хотелки - перенести все за раз с wl-500w на rt-n66u...

Но вот ncdc упорно не собирается... я попробую еще раз вытащить екзешник из пакета в entware, ведь теперь-то я вроде все либы собрал.. может и заработаеть.

MercuryV
05-06-2012, 15:47
собирать все что надо из исходиков. и тот же ziproxy распрекрасно собрался очень не хило работает.
То, что вы писали ранее в другой ветке про успешную работу ziproxy, относится к бинарнику, что я высылал или самодельному?

skuwakin
05-06-2012, 15:56
То, что вы писали ранее в другой ветке про успешную работу ziproxy, относится к бинарнику, что я высылал или самодельному?

к самодельному. Ваш модулек заругался на отсутствие какой-то библиотеки, название уже и не помню...

ryzhov_al
06-06-2012, 07:53
на таком не плохом железе (относительно конечно), сам бог велел собирать все что надо из исходиков. и тот же ziproxy распрекрасно собрался очень не хило работает.Забегая вперёд. Вчера с MercuryV провели тест-драйв ziproxy. Сравнили работу на Netgear WNR3500L и Asus RT-N66u. Общий вывод: жизнеспособно.


Про ентваре... Но "моя" уникальная прога zebedee на нем не пошла (ранее собранный екзашник) и мне пришлось вернуться к моей первональной хотелки - перенести все за раз с wl-500w на rt-n66u...Порадовать (http://code.google.com/p/wl500g-repo/source/detail?r=623)? Обязательно отпишитесь по результатам тестирования.

skuwakin
06-06-2012, 09:31
Забегая вперёд. Вчера с MercuryV провели тест-драйв ziproxy. Сравнили работу на Netgear WNR3500L и Asus RT-N66u. Общий вывод: жизнеспособно.

Порадовать (http://code.google.com/p/wl500g-repo/source/detail?r=623)? Обязательно отпишитесь по результатам тестирования.

даже не знаю что и сказать... ест-но БАААЛЬШОЕ спасибо, но с "попробовать" не уверен, по крайней мере в ближайшее время наверное не получится. Ведь у меня же весь мой софт с wl-500w заработал, и теперь возвращать все в начальную точку, если придется восстанавливать /op, то попробую... Но, ест-но теперь лично для меня не будет больше сдерживающих факторов при переходе на ваш репозитарий и это ОЧЕНЬ РАДУЕТ!

а на программу zebedee всем любителям туннелей в труднопроходимые места советую обратить самое пристальное внимание.

-----------------------

по предыдущим вопоросам. если есть ссылочка про работу с библиотеками на наших роутерах, поделитесь плиз.

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

старая версия xupnpd, которая у меня стояла, запускается без проблем , можно было заходить в вэб-интерфейс , но как только пытался зайти в пункт плейлист получал отлуп - блаузер ругался, потом поймал это сообщение ./xupnpd-mipsel-ddwrt: can't resolve symbol 'isalnum'

в связзи с этим еще вопрос, а как вы собираете из исходникоа xupnpd? Или если есть ссылочка, где про это прочитать, поделитесь плиз....

ryzhov_al
06-06-2012, 10:08
из-за того что модули xupnpd и ncdc (а наверное и все остальные) у вас собраны с динамическим линкованием, то мой нахальный экспиримент по вызову екзешников из ваших пакетов не удался....Условия использования Entware:


kernel 2.6 based прошивка,
отсутствие по соседству библиотек Optware.

Продолжать диалог про новый софт без выполнения этих пунктов не имеет никакого смысла.

в связзи с этим еще вопрос, а как вы собираете из исходникоа xupnpd?Вот так (http://wl500g-repo.googlecode.com/svn/feeds/rtndev/xupnpd/). Я ж вроде ничего не скрываю.

skuwakin
09-06-2012, 14:00
Условия использования Entware:

kernel 2.6 based прошивка,
отсутствие по соседству библиотек Optware.

Продолжать диалог про новый софт без выполнения этих пунктов не имеет никакого смысла.
Вот так (http://wl500g-repo.googlecode.com/svn/feeds/rtndev/xupnpd/). Я ж вроде ничего не скрываю.

Cпасибо за ответ. А можно чуть поподробнее... Возьмем, к примеру, xupnpd. Автор выложил исходники http://tsdemuxer.googlecode.com/svn/trunk/xupnpd/ и насколько я понимаю, они готовы для получения работоспособного екзешника. Что нужно поставить на роутер, чтобы можно было из таких ресурсов в сети собирать екзешники? SVN клиента? Или нужен еще какой-то костыль?
В вашей ссылке есть Makefile, но как его запускать (кому подавать на вход), непонятно... Заранее спасибо за ответ.

AndreyUA
09-06-2012, 14:13
Cпасибо за ответ. А можно чуть поподробнее... Возьмем, к примеру, xupnpd. Автор выложил исходники http://tsdemuxer.googlecode.com/svn/trunk/xupnpd/ и насколько я понимаю, они готовы для получения работоспособного екзешника. Что нужно поставить на роутер, чтобы можно было из таких ресурсов в сети собирать екзешники? SVN клиента? Или нужен еще какой-то костыль?
В вашей ссылке есть Makefile, но как его запускать (кому подавать на вход), непонятно... Заранее спасибо за ответ.Нужен костыль, как минимум, gcc. Makefile для кросскомпиляции в среде OpenWRT. Собрать на роутре для Entware ничего не получится в связи с отсутствием того самого костыля. Откройте для себя кросскомпиляцию.

skuwakin
09-06-2012, 14:22
Нужен костыль, как минимум, gcc. Makefile для кросскомпиляции в среде OpenWRT.
Все необходимое для сборки на роутерее (gcc и пр) стоит (кое что собирал). На ентваре пока не перешел - нет времени для перехода, но морально готовлюсь... Можно ли где прочитать про эту тему? (сборка бинарников из svn)

AndreyUA
09-06-2012, 14:28
Все необходимое для сборки на роутерее (gcc и пр) стоит (кое что собирал). На ентваре пока не перешел - нет времени для перехода, но морально готовлюсь... Можно ли где прочитать про эту тему? (сборка бинарников из svn)
Забираете исходники по svn svn co http://..... и собираете их на роутере. см. https://code.google.com/p/tsdemuxer/source/checkout

skuwakin
09-06-2012, 14:39
Забираете исходники по svn svn co http://..... и собираете их на роутере. см. https://code.google.com/p/tsdemuxer/source/checkout

спасибо БАААЛЬШОЕ! Бум пробовать! Если что, не сердитесь, вдруг еще немного потревожу... :)

skuwakin
09-06-2012, 15:57
создал папку xupnpd в /tmp/mnt/sda3/ftp_pub и набрал

admin@RT-N66U:/tmp/mnt/sda3/ftp_pub/xupnpd# svn checkout http://tsdemuxer.googlecode.com/s
vn/trunk/ tsdemuxer-read-only
svn: Can't read directory 'tsdemuxer-read-only': Operation now in progress
admin@RT-N66U:/tmp/mnt/sda3/ftp_pub/xupnpd#

что я не сделал или сделал не так?

AndreyUA
09-06-2012, 17:24
создал папку xupnpd в /tmp/mnt/sda3/ftp_pub и набрал

admin@RT-N66U:/tmp/mnt/sda3/ftp_pub/xupnpd# svn checkout http://tsdemuxer.googlecode.com/s
vn/trunk/ tsdemuxer-read-only
svn: Can't read directory 'tsdemuxer-read-only': Operation now in progress
admin@RT-N66U:/tmp/mnt/sda3/ftp_pub/xupnpd#

что я не сделал или сделал не так?
svn в optware не работает. Скачайте отдельно и закиньте на роутер. Не факт что на роутере соберется и вы сможете удовлетворить все зависимости. Вы это делаете из спортивного интереса?

skuwakin
09-06-2012, 17:49
svn в optware не работает. Скачайте отдельно и закиньте на роутер. Не факт что на роутере соберется и вы сможете удовлетворить все зависимости. Вы это делаете из спортивного интереса?

да боже упаси... просто я к xupnpd привык, она у мня даавно на старичке 500w прекрасно работала, а тут такой облом... не захотела она на новом зверьке работать.... пеерепробовал все версии, аавтор говорит, что он этот глюк поправил... вот и хотел попробовать ее нативно собрать. а про svn понял, хотя как-то странно...команда в системе есть, но пользоваться ей не надо... придется скачивать svn для винды... бред... имно.

MercuryV
09-06-2012, 19:30
вот и хотел попробовать ее нативно собрать. а про svn понял, хотя как-то странно...команда в системе есть, но пользоваться ей не надо... придется скачивать svn для винды... бред... имно.
Вы уж меня простите, но всё это похоже на приступ мазохизма.
Попробуйте кросскомпиляцию Entware (https://code.google.com/p/wl500g-repo/source/browse/trunk/INSTALL), это разрешит многие проблемы.

skuwakin
09-06-2012, 19:51
Вы уж меня простите, но всё это похоже на приступ мазохизма.
Попробуйте кросскомпиляцию Entware (https://code.google.com/p/wl500g-repo/source/browse/trunk/INSTALL), это разрешит многие проблемы.

спс, никто и не говорит, что выбранный путь хорош, но если бы все работало как надо, то скачать при помощи svn 1.5мега и запустить макефиле по всякому было бы побыстрее, чем ставить среду для кросскомпил и потом еще долго в нее вникать. Но чую - все идеть к тому... на entware я пока переходить не готов.

upd... обломс, насколько я понял, сборка в xupnpd сделана под кросскомпилляцию... придется вникать...

MercuryV
09-06-2012, 20:02
если бы все работало как надо
подозреваю, что такое надо только вам

ставить среду для кросскомпил и потом еще долго в нее вникать.
действительно, гораздо проще есть мозги другим участникам форума своими проблемами.

на entware я пока переходить не готов
поймите, вы сначала просили собрать пакет под Entware, вам пошли навстречу, однако попусту, теперь вы пишете в теме про переход от нативной компиляции, но переходить никуда не намерены. Пожалуйста, постигайте дзен нативной компиляции самостоятельно.

skuwakin
09-06-2012, 20:19
за пакет, который я просил, я искренне поблагодарил, и ваши труды не пропадут! Тем более софтинка та действительно ценная, многим может сгодится. просто БЫСТРО перейти на ентваре у меня пока не получается. вот и пытаюсь пока заставить рабоать то, что работало.

h1Nt
15-06-2012, 07:30
... И о каком из трёх способов кросс-компиляции идёт речь? ...

Александр, как на счёт howto нативной компиляции с подключённым репозиторием entware?
В упор не вижу в репе buildroot.

ryzhov_al
15-06-2012, 07:45
Александр, как на счёт howto нативной компиляции с подключённым репозиторием entware?
В упор не вижу в репе buildroot.
Переходом на репозиторий OpenWRT мы также решили проблему разброда среди разношёрстных средств компиляции:

убогой нативной больше нет, так как на роутер возможно было портировать только старенького ивалида GCC 4.1.1,
протухшей среды компиляции optware тоже нет.
Современный тулчейн энтузиастов получил великолепную обвязку в лице среды OpenWRT Buildroot, делающей доступными практически любые достижения сообщества OpenWRT.

Зачем же так настойчиво пытаться вернуться в старые времена? Можно просто остаться на Optware, если она дорога как память.

Даже если вашими молитвами GCC на роутер вернётся, ему (новому) не хватит памяти для работы, а вам неоткуда будет взять интерфейсы библиотек (/opt/include/*.h), потому как они не больше не входят ни в один пакет.


Еще бы кто выложил бы рабочую инструкцию по кросс-компиляции на большом брате........Я как-то пытался по данным в форуме howto скомпилить необходимый мне пакет...Причем почему-то также утвержалось что вся инструкция рабочая, а у меня вылазят какого-то хера вылазят ошибки при компиляции необходимого окружения...Сначала все думал что ручонки у меня кривоваты, написал в форум, поначалу тишина......затем через пару недель выяснилось, что теже ошибки вылазят у других следующих той же инструкции из хауту..
Какой именно инструкции HOW-TO? И о каком из трёх способов кросс-компиляции идёт речь?
О среде OpenWRT Buildroot? How-To (http://downloads.openwrt.org/docs/buildroot-documentation.html).
О среде Optware? How-To (http://www.nslu2-linux.org/wiki/Optware/AddAPackageToOptware).
Или о кросс-компиляции энтузиастким тулчейном? How-To (http://www.hub.ru/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D 0%B8%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0 %BC%D0%BC_%D0%B4%D0%BB%D1%8F_%D0%BC%D0%B0%D1%80%D1 %88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%82%D0%B E%D1%80%D0%B0).
Догадываюсь, что указанные HOW-TO вы встретили впервые. Не хотите разбираться - за вас это никто не сделает.

lly
15-06-2012, 08:07
Даже если вашими молитвами GCC на роутер вернётся, ему (новому) не хватит памяти для работы
Semi-Offtopic: Боюсь молитвы не помогут, надо включаться в работу команды разработчиков gcc и закрывать PR'ы по увеличенному потреблению памяти.

Без C++ и O2,O3 оптимизации собрать рабочий native gcc 4.5, 4.6 вполне реально, только зачем он такой красивый нужен?

h1Nt
15-06-2012, 08:12
ryzhov_al, ясно!
ALL, все слышали? Нативной компиляции с подключённым entware-репозиторием не будет!
После обеда попробую в очередной раз попытаться разобраться с тулчейном. Предложите ветку для обсуждения кросс-компиляции.

AndreyUA
15-06-2012, 11:50
Может попросить модераторов все вопросы, касающиеся компиляции/кросскомпиляции EntWare и запросов компиляции пакетов в отдельную ветку выделить? Здесь много нужной инфы, которая потонет в лавине бесполезных постов о переходе от optware к entware?

nevian
25-02-2013, 14:43
Добрый день,

Есть у меня желание собирать несколько пакетов допустим раз в неделю или по-требованию.
Прочитав первые сообщения и сцылки из них, я честно говоря не особо понял как же мне это осуществить, особенно непрозрачны моменты типа скачать прошивку от энтузиастов, тулчейн, и конфигурация оной - в отрыве от всего остального всё хорошо, а вот вместе..
Зачем и чем её патчить? Как к этому прикрутить OpenWRT Buildroot который сам по себе тулчейн, тем более что его можно использовать на Mac и x64, а используемая мной Падавановская прошивка собирается (только?) под x86 линух?
Какая структура директорий? Что за патчи для совместимости с нашими рутерами - это то что с сайта через svn trunk отдаётся?
В конце концов каким из тулчейнов это собирать?

Я вообще довольно понятливый и опыт компиляции всякого разного имеется, но тут уж как-то скудно с информацией, да и год уж почти минул с обновления то :)


см. мини-инструкцию (https://code.google.com/p/wl500g-repo/wiki/Compiling) для Entware

P.S. у меня в планах обнародование скрипта для "быстрого" разворачивания OpenWRT Buildroot + тулчейн энтузиастов, заточенных под Entware.
Как раз для случая, когда хочется быстро собрать один пакет. Напоминаю, что полная сборка (https://code.google.com/p/wl500g-repo/source/browse/trunk/INSTALL) тулчейна и репозитория занимает от 5+ часов.

eazarkin
19-04-2013, 11:06
Добрый день
Изучаю кросскомпиляцию.
Компилирую HelloWorld


#include <iostream>

using namespace std;

int main()
{
cout << "Hello World!" << endl;
return 0;
}




роутер ASUS RTN16 с прошивкой 1.9.2.7-rtn-r4923.
Тулчейн отсюда http://code.google.com/p/wl500g-repo/downloads/detail?name=entware-toolchain-r4667-amd64.tgz&can=2&q=
Команда компиляции:
#/opt/entware-toolchain/bin/mipsel-uclibc-g++ -o hello ./src/main.cpp
запускаю hello на роутере и получаю ./hello: can't load library 'libstdc++.so.6' , подскажите что я делаю не так?

libstdc++.so.6 точно на роутере есть.

ldconfig -p | grep libstdc++.so.6
libstdc++.so.6 (libc0) => /opt/lib/libstdc++.so.6




Отвечаю сам себе. Компилировать надо командой
/opt/entware-toolchain/bin/mipsel-uclibc-g++ -Wl,-rpath,'/opt/lib' -o hello ./src/main.cpp

gonzzza1
10-12-2013, 08:13
Я также пытался компилировать на рутере. Для этого требуется утилита ipkg. Я перешел на репозиторий Entware и она на рутере отсутствует. opkg list |grep ipkg ничего не выдает.

Где мне взять ipkg или с Entware все делается по другому?

DemonGloom
10-12-2013, 15:40
Я также пытался компилировать на рутере. Для этого требуется утилита ipkg. Я перешел на репозиторий Entware и она на рутере отсутствует. opkg list |grep ipkg ничего не выдает.

Где мне взять ipkg или с Entware все делается по другому?

В entware нет нативной сборки. И вряд ли появится. Увы.

gonzzza1
10-12-2013, 18:47
а для рутера с Entware собирать систему для компиляции как обычно?
>ipkg install optware-devel
и так далее?

lly
11-12-2013, 06:19
gonzzza1
Перечитайте еще раз, что вам написал DemonGloom. А также убедительная просьба почитать форум, этот вопрос обсуждался много раз.

P.S. Optware несовместимо с Entware

Toher
15-12-2013, 09:12
Сдаюсь...
Сначала попробовал по схеме на hub.ru
(http://www.hub.ru/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D 0%B8%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0 %BC%D0%BC_%D0%B4%D0%BB%D1%8F_%D0%BC%D0%B0%D1%80%D1 %88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%82%D0%B E%D1%80%D0%B0#.D0.9A.D1.80.D0.BE.D1.81.D1.81-.D0.BA.D0.BE.D0.BC.D0.BF.D0.B8.D0.BB.D1.8F.D1.86.D 0.B8.D1.8F_.D0.B8.D0.BD.D1.81.D1.82.D1.80.D1.83.D0 .BC.D0.B5.D0.BD.D1.82.D0.B0.D1.80.D0.B8.D0.B5.D0.B C_.D1.8D.D0.BD.D1.82.D1.83.D0.B7.D0.B8.D0.B0.D1.81 .D1.82.D0.BE.D0.B2)
матерится на отсутствие libtool (в системе стоят, в пакетах для роутера не нашел.)

Пытаюсь разобраться по INSTALL (http://code.google.com/p/wl500g-repo/source/browse/trunk/INSTALL)
Но имею только 8Гб на диске.
Если я правильно понимаю, сам тулчейн не должен занимать много места, а все "At least 20Gb of disk space" уходят на сборку существующих пакетов репозитория.
Возможно ли избежать сборки всего ненужного и скачиватьсобирать только зависимые пакеты?
И каким методом все же правильно собирать отсутствующие в репозитарии пррограммы?

MercuryV
15-12-2013, 10:19
Если я правильно понимаю, сам тулчейн не должен занимать много места, а все "At least 20Gb of disk space" уходят на сборку существующих пакетов репозитория.
Возможно ли избежать сборки всего ненужного и скачиватьсобирать только зависимые пакеты?
Конечно возможно.

1) в инструкции из файла INSTALL (http://code.google.com/p/wl500g-repo/source/browse/trunk/INSTALL) вместо последней команды ($ make) нужно выполнить

$ make -C toolchain/mipsel-hardfloat
$ make -C buildroot/mipsel-hardfloat
$ make -C packages
$ make -C "../openwrt_trunk" tools/compile
$ make -C "../openwrt_trunk" tools/install
соберется всё, кроме собственно пакетов репозитория

2) если нужно собрать пакет из OpenWRT, который еще не был нами добавлен в Entware

2.1 находите каталог пакета в ~/Entware/openwrt_trunk/feeds/packages - там основные пакеты (или в ~/Entware/openwrt_trunk/feeds/routing или в ~/Entware/openwrt_trunk/feeds/telephony или в ~/Entware/openwrt_trunk/package - в общем там, где его разместили опервртшники)

2.2 правите Makefile (а также патчи или конфиги, если нужно). Правка в самом простом случае заключается в изменении путей (добавление префикса /opt).

2.3 выбираете нужный пакет в menuconfig

$ cd ~/Entware/openwrt_trunk/
$ make menuconfig
далее нужно найти интересующий пакет, отметить его для установки (m) и выйти с сохранением конфига

2.4 компилируете пакет

$ cd ~/Entware/openwrt_trunk/
$ make package/PACKAGENAME/compile V=s
сначала соберутся все зависимости пакета (если это не делалось ранее), затем сам пакет
2.4.1 если сыпятся ошибки, то пункт 2.2 затем 2.4 :)

2.5 если пакет собрался, забираете его из ~/Entware/openwrt_trunk/bin/entware/packages

3) если нужно добавить новый пакет, отсутствующий в проекте OpenWRT
рекомендую сначала загрузить наш фид (в качестве образца, также можно будет туда добавлять Makefile для своих пакетов)

$ cd ~/Entware
$ svn co http://wl500g-repo.googlecode.com/svn/feeds/ ./feeds
изменить для фида rtndev путь на локальный в файле ~/Entware/openwrt_trunk/feeds.conf
для этого закомментировать строку src-svn rtndev ...
и раскомментировать #src-link rtndev ... изменив путь на свой (/home/USERNAME/Entware/feeds/rtndev)

3.1 Cоздаете каталог для нового пакета в ~/Entware/feeds/rtndev и пишете Makefile и патчи (если нужно)

3.2 Обновляете пакеты из фида rtndev

$ cd ~/Entware/openwrt_trunk
$ scripts/feeds/update rtndev
$ scripts/feeds install -a

3.3 см. пункт 2.3 и далее

4. Если хотите, чтобы новые пакеты появились в Entware, то присылаете, что наделали ryzhov_al или мне.

Также настоятельно рекомендуется к изучению wiki (http://wiki.openwrt.org/about/toolchain)

P.S. просьба к модераторам перенести сообщение сюда (http://wl500g.info/showthread.php?25394) или в другую уместную тему, чтобы не затерялось.

Toher
15-12-2013, 14:30
Итак, вроде по порядку, создали папку Ентваре, зашли в нее, утянули SVN-ом транк, зашли в папку rtn.
Пока, вроде несложно, но был WARNING: gnome-keyring:: couldn't connect to: /tmp/keyring-Gk9Joe/pkcs11: Нет такого файла или каталога
В итоге сообщение:
Получена редакция 1492
А дальше, как то необычно:


$ cd rtn/
/rtn$ make toolchain
make: Цель `toolchain' не требует выполнения команд.
/rtn$ make buildroot
make: Цель `buildroot' не требует выполнения команд.

Или так и должно быть?

MercuryV
15-12-2013, 14:52
Toher, просто make уже запускали ранее? возможно тулчейн уже собран?
пробуйте с "чистого листа" (удалите ~/Entware и /opt/entware-toolchain если есть)

Toher
15-12-2013, 15:49
загадил я ветку своими сообщениями
Попробовал rm -rf Entware и sudo rm -rf /opt/*
Все то же самое.
Цель `toolchain' не требует выполнения команд.

Попробовал танцы с бубном:
cd Entware/rtn/buildroot/mipsel-hardfloat/
make
cd Entware/rtn/toolchain/mipsel-hardfloat
make

30 мин. спустя раздел прибавил в весе на 3Гб, проесс продолжается... Надеюсь на лучшее, но предполагаю окончание по нехватке места...
1:30 Качаем uClibc ... использовано 3.7 Гб
2:15 Процесс идет. Риторический вопрос: а если бы я собирал все пакеты на своем калькуляторе (Atom N550 1.5GHz), то на неделю бы затянулось. Хотя..а почему грузится только одно проц.ядро из 4?
3:00 с начала сборки... что-то собралось, завтра буду смотреть..

MercuryV
15-12-2013, 19:23
Попробовал танцы с бубном:
cd Entware/rtn/buildroot/mipsel-hardfloat/
make
cd Entware/rtn/toolchain/mipsel-hardfloat
make
Это не танцы с бубном, это я оплошал с инструкцией. Использовал старый текст для зарубежных камрадов и запамятовал, что сборка теперь иначе идет. Готовимся потихоньку к поддержке других архитектур.
Так что это не танцы, а верные команды.
Или, если в изначальной стилистике, будет так:

$ make -C toolchain/mipsel-hardfloat
$ make -C buildroot/mipsel-hardfloat
Изначальную инструкцию поправил.


почему грузится только одно проц.ядро из 4?
По умолчанию сборка идет однопоточная.
Явно указать, что нужно собирать в X потоков, можно так: make -jX ...
Правда это может стать причиной ошибок. Я в несколько потоков делаю полную пересборку репозитория.

P.S. если проблемы с дисковым пространством, то после выполнения пункта №1 инструкции, можно удалить содержимое каталога ~/Entware/downloads
Для сборки пакетов эти файлы не нужны. Это освободит сразу 570+ мегабайт.
В дальнейшем при компилировании будут пухнуть каталоги
~/Entware/downloads - сюда будут скачиваться архивы с исходниками
~/Entware/openwrt_trunk/build_dir/target-mipsel-linux-gnu - здесь развернуты исходники и происходит собственно сборка. Самое значимое потребление диска.
Например, сборка пакетов {bash,dnscrypt-proxy,htop,iftop,mc,nano,screen,wget,xinetd} с зависимостями - требует уже 619 мегабайт
~/Entware/openwrt_trunk/bin/entware/packages - здесь собственно готовые пакеты (можно пренебречь)
Эти каталоги можно очищать при суровой необходимости. Сборку это не поломает. Но замедлит, так как любой "стертый" пакет, попав в зависимости, пройдет полный цикл: загрузка исходников, разворачивание исходников, применение патчей, компилирование, сборка пакета.
Разумеется, такие манипуляции имеют смысл только если речь идет о сборке одного или нескольких новых пакетов.

sergldom
25-05-2014, 22:11
Здравствуйте.
Подскажите пожалуйста какие нужно установить пакеты для сборки своих программ в Entware?

Так как для Optware это такие пакеты:
buildroot optware-devel make

ryzhov_al
26-05-2014, 05:40
Подскажите пожалуйста какие нужно установить пакеты для сборки своих программ в Entware?Для Entware (как и в OpenWRT) нет нативных инструментов, только кросс-компиляция.

sergldom
30-05-2014, 21:33
Для Entware (как и в OpenWRT) нет нативных инструментов, только кросс-компиляция.


Ну как это нет, я на роутере dir320 лично собирал dongle в optware, какие пакеты я установил я перечислил ранее.
Это же маленькая прожка, 10 мин компиляции и все работает.