1

Тема: Собираем приложения для Keenetic самостоятельно (для программистов).

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

PS Старая тема (рекомендую посмотреть последние страницы) тут - http://forum.zyxmon.org/topic56-zapuska … netic.html.

2

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Краткая инструкция по самостоятельной сборке приложений есть в wiki
http://code.google.com/p/zyxel-keenetic … ux_compile
http://code.google.com/p/zyxel-keenetic … /linux_add

3

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Как я понял из http://code.google.com/p/zyxel-keenetic … ux_compile
пункт Сборка пакетов из репозитария обязательно выполнить один раз make menuconfig и make V=99 чтобы собрать тучлейн, а затем при сборке нужного пакета уже необязательно будет его компилировать, достаточно будет просто набрать make package/yyy/compile V=99 или не так?

4

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

curast, После make V=99 соберутся тулчейн и все пакеты из репы (>400). Можно сразу выполнить make package/yyy/compile V=99. Тогда соберутся тулчейн, пакеты, от которых зависит yyy и сам yyy. Пакет yyy должен быть выбран через make menuconfig.
Если Вы планируете собирать свои пакеты, то лучше один раз подождать окончания полной сборки.

А в чем Вы видите различие между сборкой и компиляцией?  Компиляция часть сборки.

5

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Zyxmon :

А в чем Вы видите различие между сборкой и компиляцией?  Компиляция часть сборки.

Это чтобы не было тавтологии :-) Я понимаю что компиляция часть сборки.

Т.е.

Zyxmon :

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

все-таки надо один раз сделать make V=99 и дождаться окончания чтобы потом спокойно собирать свои пакеты, по крайней мере до выхода новой прошивки от Zyxel?

6

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

curast :

по крайней мере до выхода новой прошивки от Zyxel?

До выхода новых исходников от zyxel. А их похоже не будет больше. Разработка прошивок v1 завершена.

Если уж очень хочется сэкономить время сборки, то можно отключить сборку части пакетов через make menuconfig. Из больших - php (минут 30 или больше на сборку), samba (собирается ради smbclient).

7

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Собрал acpupsd (программа для управления бесперебойниками) с помощью представленого здесь тулчейна. Завел его на рутере, программа запустилась но через компорт бесперебойника не хочет общаться. Теперь хочу подключиться к USB на УПС.
Но для этого надо собрать hid.ko и usbhid.com. Скачал исходники с OpenWRT и засунул их в папку keenetic/package/kernel запускаю make package/kernel/compile не собирается нифига. Сначала вываливалась ошибка что не хватает gre.ko, залез в папку и нашел модуль с именем gre.ko сделал на него симлинк, компиляция прошла дальше но теперь вываливается на evdev.ko. Такого модуля нет скомпиленого, только исходник. Убрать gre и evdev в menuconfig не могу там можно выбрать или модуль или вкомпилить. Подскажите пожалуйста как можно компилить модули. Что я делаю не так?

8

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

moldov, и в самом ядре (исходниках) могут быть не все дрова. И в package/kernel/modules не все файлы. Ориентируйтесь на mk файлы из ветки backfire - https://dev.openwrt.org/browser/branche … el/modules
В транке уже полностью перешли на ядра 3.x, а у нас 2.6.
Смотрите еще на следующее - некоторые дрова уже в ядре, их не нужно собирать модулями.

9

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Есть пара вопросов, спрошу здесь.
1) Если есть бинарник, можно-ли(как) определить, он собран с оптимизацией r2 или r1?
2) Если на современной прошивке (r2) запустить бинарник без r2, он будет работать?(или принципиально не запустится?)
И наоборот - допустим, на старой прошивке можно пустить бинарник r2 ?

10

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

1. Не знаю, думаю дизассемблирование поможет.
2. Да и обратно да (на кинетике), но не всегда. Проблема в другом, в изменеии uClibC при переходе на r2 в прошивках.

Подумайте, что будет с программами в windows, если заменить системную библиотеку. Именно по этому некоторые приложения запускаются только под определенной версией винды.

11

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Ясно - "жёсткой критичности" нет. Это уже неплохо...  smile

12

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Dr.Acid, версия mediatomb r1 под r2 не запускается. Какие приложения могут не запускаться или глючить я писал в соответствующей теме.

13

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Подскажите пожайлуста по сборке пакетов для kernel модулей для Crypto.
Их нужно собирать из тулчейна Zyxel или гугловского svn.

В настройках меню включил соответсвующие модули. Как я понимаю из скриптов в конченом итоге будет вызываться  crypto.mk

В результате выдается сообщение об остутствии скомпилированных модулей. Например crypto_algapi.ko

make[1]: Entering directory `/home/denis/keneetic/trunk'
make[2]: Entering directory `/home/denis/keneetic/trunk/package/kernel'
WARNING: skipping kernel -- package not selected
mkdir -p /home/denis/keneetic/trunk/build_dir/linux-keenetic/packages
touch /home/denis/keneetic/trunk/build_dir/linux-keenetic/packages/.prepared_c5963a4d390535e44be6af9b82f346d1
rm -f /home/denis/keneetic/trunk/build_dir/linux-keenetic/packages/.configured_*
touch /home/denis/keneetic/trunk/build_dir/linux-keenetic/packages/.configured_
touch /home/denis/keneetic/trunk/build_dir/linux-keenetic/packages/.built
mkdir -p /home/denis/keneetic/trunk/bin/keenetic/packages /home/denis/keneetic/trunk/build_dir/linux-keenetic/packages/ipkg-keenetic/kmod-crypto-core/CONTROL /home/denis/keneetic/trunk/staging_dir/target-mipsel_r2_uClibc-0.9.30.3/pkginfo
mkdir -p /home/denis/keneetic/trunk/build_dir/linux-keenetic/packages/ipkg-keenetic/kmod-crypto-core/lib/modules/2.6.23-rt
cp -fpR -L /home/denis/keneetic/trunk/build_dir/linux-keenetic/linux-2.6.23-rt/crypto/crypto_algapi.ko /home/denis/keneetic/trunk/build_dir/linux-keenetic/linux-2.6.23-rt/crypto/blkcipher.ko /home/denis/keneetic/trunk/build_dir/linux-keenetic/linux-2.6.23-rt/crypto/cbc.ko /home/denis/keneetic/trunk/build_dir/linux-keenetic/linux-2.6.23-rt/crypto/deflate.ko /home/denis/keneetic/trunk/build_dir/linux-keenetic/linux-2.6.23-rt/crypto/ecb.ko /home/denis/keneetic/trunk/build_dir/linux-keenetic/linux-2.6.23-rt/crypto/crypto_hash.ko /home/denis/keneetic/trunk/build_dir/linux-keenetic/linux-2.6.23-rt/crypto/cryptomgr.ko /home/denis/keneetic/trunk/build_dir/linux-keenetic/packages/ipkg-keenetic/kmod-crypto-core/lib/modules/2.6.23-rt
make[2]: Leaving directory `/home/denis/keneetic/trunk/package/kernel'
make[1]: Leaving directory `/home/denis/keneetic/trunk' 

Он действительно не скомпилировался. В каком скрипте указывается что он должен компилироваться.
В исходниках ядры соответствующие модули имеются.

Может где можно примеры посмотреть, что и как нужно править

14

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Файл crypto.mk может не соответсвовать исходникам zyxel (если там ВСЕ нужные есть). Как уже писал, файл crypto.mk лучше брать из ветки backfire.
Другие модули (те, что выбраны в конфигурации по умолчанию) собираются? cifs, tun, nfs

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

15

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Zyxmon :

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

Мда... У меня в свое время опыта было 0, однако я начал тренировки(-изучение Линукс) с кросскомпилляции ядра и сборки модулей(сначала под АРМ, потом под кинетик Лайт). Тяжело это всё...

16

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Zyxmon :

Файл crypto.mk может не соответсвовать исходникам zyxel (если там ВСЕ нужные есть). Как уже писал, файл crypto.mk лучше брать из ветки backfire.
Другие модули (те, что выбраны в конфигурации по умолчанию) собираются? cifs, tun, nfs

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

У меня полностью все собралось. В програмировании разбираюсь, ядра и модули раньше собирал.
Makefile понимаю в общих чертах. Но скрипты ведь специфические и нужно первоночально понимать как они работают.

Разбираться одинаково, что с програмными пакетами, что с модулями ядра. Мне например непонятно,каким образом отрабатывабся связи для crypto.mk

Я так понимаю указание в директиве FILES объектного файла это неявное правило для его компиляции из исходного файла или нет ?

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


P.s. Все таки для модулей зависимостей должно быть меньше и они по крайней мере должны собираться из исходников. Будут ли работать это другой вопрос.

17

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

DenKor29 :

Я так понимаю указание в директиве FILES объектного файла это неявное правило для его компиляции из исходного файла или нет ?

Нет. Из include/kernel.mk

define Package/kmod-$(1)/install
mkdir -p $$(1)/lib/modules/$(LINUX_VERSION)
$(CP) -L $$(FILES) $$(1)/lib/modules/$(LINUX_VERSION)/
$(call ModuleAutoLoad,$(1),$$(1),$(AUTOLOAD))
$(call KernelPackage/$(1)/install,$$(1))

Это просто список файлов, входящих в пакет.
Вы запустите просто "make V=99". Возможно Вы запускаете "make package/kernel/compile".

18

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Запустил make menuconfig, выбрал storage
сделал
make package/opkg/clean V=99
make package/opkg/compile V=99
Смотрю получившиеся opkg (2 штуки) - в них остался путь /media/DISK_A1/....
В чём может быть дело? Как собрать opkg под /storage ?

19

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Dr.Acid, я ЕМНИП писал, как сделать. В папке configs есть спец config файл для сборки в storage. Нужно его скопировать в корень под именем .config (cp -f configs/keenetic-strorage.config .config).

20

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Ладно, с этим разобрались(боюсь спросить, почему это не делается автоматом через menuconfig, как в других тулчейнах)
Теперь, пытаюсь собрать busybox-storage, делаю
make package/busybox/clean
make menuconfig
make package/busybox/compile V=99
Получаю(в конце):

  CC      miscutils/ttysize.o
  CC      miscutils/ubi_tools.o
miscutils/ubi_tools.c: In function 'ubi_tools_main':
miscutils/ubi_tools.c:133: error: 'UBI_DEV_NUM_AUTO' undeclared (first use in this function)
miscutils/ubi_tools.c:133: error: (Each undeclared identifier is reported only once
miscutils/ubi_tools.c:133: error: for each function it appears in.)
miscutils/ubi_tools.c:153: error: storage size of 'req' isn't known
miscutils/ubi_tools.c:161: error: 'UBI_IOCATT' undeclared (first use in this function)
miscutils/ubi_tools.c:153: warning: unused variable 'req'
miscutils/ubi_tools.c:167: error: 'UBI_IOCDET' undeclared (first use in this function)
make[4]: *** [miscutils/ubi_tools.o] Error 1
make[3]: *** [miscutils] Error 2
make[3]: Leaving directory `/home/acid/zyxmon_toolchain/build_dir/target-mipsel_r2_uClibc-0.9.30.3/busybox-storage/busybox-1.19.4'
make[2]: *** [/home/acid/zyxmon_toolchain/build_dir/target-mipsel_r2_uClibc-0.9.30.3/busybox-storage/busybox-1.19.4/.built] Error 2
make[2]: Leaving directory `/home/acid/zyxmon_toolchain/package/busybox'
make[1]: *** [package/busybox/compile] Error 2
make[1]: Leaving directory `/home/acid/zyxmon_toolchain'
make: *** [package/busybox/compile] Ошибка 2
acid@acid-virtual-machine:~/zyxmon_toolchain$

Типа, не собирается ubi_tools ...

21

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Dr.Acid :

боюсь спросить, почему это не делается автоматом через menuconfig, как в других тулчейнах

А как по Вашему config файл получен, через make menuconfig. Заготовка конфига для упрощения настройки.

Dr.Acid :

Типа, не собирается ubi_tools ...

Посмотрю, давно не проверял сборку для storage. Может съехало чего при обновлении тулчейна. Вот dropbear для storage собирается - проверял. Если сами раньше найдете - напишите, что съехало.

22

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

dropbear уже собрал, ща буду тестить. smile  Кстати, а почему нет opkg, до кучи? wink
(Раскрою карты - я, на самом деле, собираю не под /storage, а под /tmp - сделал профиль по аналогии wink  Так что storage у меня для проверки идёт. Вот, хочу попробовать и opkg "прикрутить"...)
Насчёт того, что съехало - что смог, уже определил(ubi_tools.o и далее по тексту) Типа 'UBI_DEV_NUM_AUTO' не объявлена(может где-то что-то убирали, а оно вон, хочет...) Вообще что-то, связанное с UBI

23

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Dr.Acid :

я, на самом деле, собираю не под /storage, а под /tmp - сделал профиль по аналогии

Еще и патчи нужно сделать по аналогии. Они для usb и storage разные.

24

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Zyxmon :

Еще и патчи нужно сделать по аналогии. Они для usb и storage разные.

Уже сделал(а они отличаются только путями, или ещё чем? yikes ). Теперь заморочки с генерацией ключей - не хотят. Вы вроде отключали эту функцию?
По крайней мере, ключи запуска у dropbearkey изменились.
Ладно, может попробую вернуться к конфигурации usbшного dropbear, только с новыми путями.

Отредактировано Dr.Acid (2012-12-11 21:09:11)

25

Re: Собираем приложения для Keenetic самостоятельно (для программистов).

Dr.Acid :

Уже сделал(а они отличаются только путями, или ещё чем? yikes ). Теперь заморочки с генерацией ключей - не хотят. Вы вроде отключали эту функцию?

Да, да вроде отключал для storage варианта, место экономил.