Как компания D-Link предоставляет исходные коды прошивок

    Приветствую хабрчане!

    У меня на работе есть несколько стареньких маршрутизаторов D-Link DI-524UP H/W Ver.: A1, выпускавшихся в 2005-2006 годах и доставшихся мне по наследству от прошлого админа. Понятно, что эти устройства отслужили свое, устарели как морально, так и физически и давно лежат на полке, но меня подкупило то, что у этой модели есть USB порт, и в основу прошивки положена операционная система Linux.

    К сожалению, разработчики стоковой прошивки довольно сильно ограничили возможности для работы с USB портом: DI-524UP не работает с USB модемами, флешками и внешними накопителями HDD. Альтернативные, более функциональные и современные прошивки, такие как OpenWRT или DD-WRT существуют для устройств на таком же процессоре как и у DI-524UP — Realtek RTL8650B, но не поддерживают чип, отвечающий за работу Wi-Fi RTL8185L. Перспектива отказаться от беспроводного интернета меня не устраивает, а разбираться с добавлением поддержки RTL8185L и полной компиляцией DD-WRT или OpenWRT под мое железо показалась достаточно сложной задачей.

    Я подумал, что бы было неплохо попробовать немного переработать стоковую прошивку — добавить функциональности, скомпилировать и установить отдельные пакеты с программным обеспечением, на сколько хватит памяти в устройстве, пересобрать ядро и включить необходимую поддержку железа для USB порта.

    В конце 2013 года в некоторых моделях маршрутизаторов D-link обнаружена уязвимость безопасности — программная закладка, позволяющая злоумышленникам получить контроль над устройством. Подробности обсуждались уже ранее на хабре. Естественным образом, в более ранней версии v.1.05 прошивки от 15.11.2007 и ее исходных кодах от 25.03.2008 и более ранних эта закладка присутствует.

    После поднятого шума в конце 2013 года, компания D-Link выпустила обновления прошивки для DI-524UP Ax версия v1.08b1 и v1.08b2 в которых закрыла данную уязвимость. Исходные коды этих прошивок производитель не выложил в открытый доступ.

    Т.к. в основу прошивки устройства входит ядро Linux и свободное программное обеспечение, то по условиям лицензии GPL, разработчик должен по требованию других лиц предоставлять свои исходные коды. Я запросил исходные коды прошивки v1.08 на форуме производителя. Через некоторое время появились ссылки на исходные коды прошивки v1.08b2.

    Скачав и распаковав архивы, я решил пофайлово сравнить исходные коды версий v1.05 и v.1.08. Полученный результат несколько меня озадачил. Найденные отличия приведены ниже под спойлером:

    Отличия содержимого архивов исходных кодов прошивок версий v1.05 и v1.08b2
    diff -r ./1.05/GPL_Di524up/ ./1.08/GPL_Di524up/
    Только в ./1.08/GPL_Di524up/: D-Link
    Только в ./1.08/GPL_Di524up/: GPL
    Только в ./1.08/GPL_Di524up/: Offer
    Только в ./1.08/GPL_Di524up/user/goahead-2.1.4: original
    diff -r ./1.05/GPL_Di524up/vendors/Realtek/Di524up/Product.mk ./1.08/GPL_Di524up/vendors/Realtek/Di524up/Product.mk
    1,2c1,2
    < VERSIONPKG = v1.01
    < ALPHA_VERSION = v4.0.0b10
    ---
    > VERSIONPKG = v1.08
    > ALPHA_VERSION = v5.0.1b02
    Только в ./1.08/GPL_Di524up/: Written

    mips-toolchain:/opt/_compare# ls -la ./1.08/GPL_Di524up/D-Link ./1.08/GPL_Di524up/GPL ./1.08/GPL_Di524up/Offer ./1.08/GPL_Di524up/user/goahead-2.1.4/original ./1.08/GPL_Di524up/Written
    -rw-r--r-- 1 root root 0 2014-08-07 12:11 ./1.08/GPL_Di524up/D-Link
    -rw-r--r-- 1 root root 0 2014-08-07 12:11 ./1.08/GPL_Di524up/GPL
    -rw-r--r-- 1 root root 0 2014-08-07 12:11 ./1.08/GPL_Di524up/Offer
    -rw-r--r-- 1 root root 0 2014-08-07 12:11 ./1.08/GPL_Di524up/user/goahead-2.1.4/original
    -rw-r--r-- 1 root root 0 2014-08-07 12:11 ./1.08/GPL_Di524up/Written

    Таким образом, товарищи разработчики «схитрили» и просто переписали в исходных кодах прошивки номер версии с v1.05 (?1.01) на v.1.08b2 и пытаются выдать их за последнюю версию. Об этих «манипуляциях» я задал вопрос в техническую поддержку компании D-link.

    UPD (27.12.2014) С сайта убраны «исходные коды версии v1.05», подал запрос на восстановление в общем доступе исходных кодов именно этой версии — v1.05.

    UPD2 (19.01.2014) Похоже под v1.05 была выложена v1.01, поэтому её убрали с сайта, кроме того, если посмотреть под спойлером выше:
    < VERSIONPKG = v1.01
    < ALPHA_VERSION = v4.0.0b10
    в коде версии не соответствуют заявленным.

    Продолжение следует...

    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 43
    • +12
      Теги доставляют
      • 0
        "- Исходники прошивки тебе последней? Да на, держи!" ;)
        • +3
          Так я могу себе +100 500 релизов замутить :-) Вот если бы честно признались, что исходники профукали, а не время тянули и «шляпу» подсовывали…
        • +8
          У них весь функционал внутри бинарника web-сервера (goahead), соответственно и различия тоже только там. Он не GPL, поэтому предоставлять вам его исходники они не обязаны (хотя иногда они случайно попадают в архивы).
          • 0
            На исходники goahead я не претендую. При сборке образа прошивки эти не GPL куски попадают в виде бинарников. Так вот возникает вопрос — где патченный и откомпилированный D-Link'ом goahead бинарник с закрытой уязвимостью (сравнение файлов не показывает отличий)?
            • +3
              Бинарника goahead может и не быть — не обязаны. Судя по всему — его там и нет.
              Они вообще не обязаны вам выдавать исходники, из которых можно собрать прошивку; только исходники, из которых можно собрать компоненты прошивки, распространяемые по GPL.
              То есть в принципе — они могут вам дать отдельно исходники ядра, отдельно библиотек, отдельно всяких разных используемых GPL-утилит.
              • +2
                есть исходники goahead

                Листинг goahead-2.1.4
                mips-toolchain:/opt/_compare# ls -la 1.08/GPL_Di524up/user/goahead-2.1.4/
                итого 976
                drwxr-xr-x 12 root root 4096 2014-08-07 12:11.
                drwxr-xr-x 32 root root 4096 2014-08-07 12:11…
                -rwxr--r-- 1 root root 7102 2014-08-07 12:11 asp.c
                -rwxr--r-- 1 root root 25243 2014-08-07 12:11 balloc.c
                -rwxr--r-- 1 root root 4415 2014-08-07 12:11 base64.c
                drwxr-xr-x 2 root root 4096 2014-08-07 12:11 CE
                -rwxr--r-- 1 root root 10437 2014-08-07 12:11 cgi.c
                -rwxr--r-- 1 root root 10831 2014-08-07 12:11 default.c
                -rwxr--r-- 1 root root 132760 2014-08-07 12:11 DeviceManagementFramework.pdf
                drwxr-xr-x 2 root root 4096 2014-08-07 12:11 ECOS
                -rwxr--r-- 1 root root 1422 2014-08-07 12:11 ej.h
                -rwxr--r-- 1 root root 7277 2014-08-07 12:11 ejIntrn.h
                -rwxr--r-- 1 root root 14608 2014-08-07 12:11 ejlex.c
                -rwxr--r-- 1 root root 36542 2014-08-07 12:11 ejparse.c
                -rwxr--r-- 1 root root 22834 2014-08-07 12:11 emfdb.c
                -rwxr--r-- 1 root root 2818 2014-08-07 12:11 emfdb.h
                -rwxr--r-- 1 root root 4055 2014-08-07 12:11 form.c
                -rwxr--r-- 1 root root 10268 2014-08-07 12:11 handler.c
                -rwxr--r-- 1 root root 4278 2014-08-07 12:11 h.c
                -rwxr--r-- 1 root root 13605 2014-08-07 12:11 license.txt
                drwxr-xr-x 2 root root 4096 2014-09-16 09:41 LINUX
                -rwxr--r-- 1 root root 0 2014-08-07 12:11 log
                drwxr-xr-x 2 root root 4096 2014-08-07 12:11 LYNX
                drwxr-xr-x 2 root root 4096 2014-08-07 12:11 MACOSX
                -rwxr--r-- 1 root root 439 2014-08-07 12:11 Makefile
                -rwxr--r-- 1 root root 10545 2014-08-07 12:11 md5c.c
                -rwxr--r-- 1 root root 1565 2014-08-07 12:11 md5.h
                -rwxr--r-- 1 root root 4090 2014-08-07 12:11 mime.c
                -rwxr--r-- 1 root root 16791 2014-08-07 12:11 misc.c
                drwxr-xr-x 2 root root 4096 2014-08-07 12:11 NW
                -rw-r--r-- 1 root root 0 2014-08-07 12:11 original
                -rwxr--r-- 1 root root 502 2006-03-17 11:38 original Makefile
                -rwxr--r-- 1 root root 145612 2014-08-07 12:11 output.c
                -rwxr--r-- 1 root root 3032 2014-08-07 12:11 page.c
                drwxr-xr-x 2 root root 4096 2014-08-07 12:11 QNX4
                -rwxr--r-- 1 root root 146 2014-08-07 12:11 readme.txt
                -rwxr--r-- 1 root root 14560 2014-08-07 12:11 release.htm
                -rwxr--r-- 1 root root 13846 2014-08-07 12:11 ringq.c
                -rwxr--r-- 1 root root 4161 2014-08-07 12:11 rom.c
                -rwxr--r-- 1 root root 6432 2014-08-07 12:11 security.c
                -rwxr--r-- 1 root root 17856 2014-08-07 12:11 sock.c
                -rwxr--r-- 1 root root 22768 2014-08-07 12:11 sockGen.c
                -rwxr--r-- 1 root root 10892 2014-08-07 12:11 sym.c
                -rwxr--r-- 1 root root 6046 2014-08-07 12:11 uemf.c
                -rwxr--r-- 1 root root 31218 2014-08-07 12:11 uemf.h
                -rwxr--r-- 1 root root 31002 2014-08-07 12:11 um.c
                -rwxr--r-- 1 root root 4616 2014-08-07 12:11 um.h
                -rwxr--r-- 1 root root 16617 2014-08-07 12:11 umui.c
                -rwxr--r-- 1 root root 4652 2014-08-07 12:11 url.c
                -rwxr--r-- 1 root root 24265 2014-08-07 12:11 value.c
                drwxr-xr-x 2 root root 4096 2014-08-07 12:11 VXWORKS
                -rwxr--r-- 1 root root 4540 2014-08-07 12:11 webcomp.c
                -rwxr--r-- 1 root root 347 2014-08-07 12:11 webrom.c
                -rwxr--r-- 1 root root 72378 2014-08-07 12:11 webs.c
                -rwxr--r-- 1 root root 5222 2014-08-07 12:11 websda.c
                -rwxr--r-- 1 root root 1101 2014-08-07 12:11 websda.h
                -rwxr--r-- 1 root root 10208 2014-08-07 12:11 webs.h
                -rwxr--r-- 1 root root 14288 2014-08-07 12:11 websSSL.c
                -rwxr--r-- 1 root root 1710 2014-08-07 12:11 websSSL.h
                -rwxr--r-- 1 root root 4557 2014-08-07 12:11 websuemf.c
                drwxr-xr-x 2 root root 4096 2014-08-07 12:11 WIN
                -rwxr--r-- 1 root root 8616 2014-08-07 12:11 wsIntrn.h
                drwxr-xr-x 2 root root 4096 2014-08-07 12:11 www

                • 0
                  О.
                  grep-ните по ним, есть ли там dlink-специфичные ф-ции. У них бывают исходники одни, а бинарник совсем другой.
                  • 0
                    Ещё кстати видел когда-то половину исходников.
                    • 0
                      Поясните пожалуйста, какие вхождения искать?
                      • 0
                        Попробуйте фрагменты URL.
                        Если есть информация по уязвимости — попробуйте поискать уязвимый код.
                        • 0
                          Да, похоже все есть.

                          less /opt/_compare/1.08/GPL_Di524up/user/goahead-2.1.4/www/upnp.asp

                          Скрытый текст
                          UPnP

                          UPnP Configuration

                          UPnP Service
                          <input type=checkbox name=enable value=1 <% asp_upnp(); %> >Enable








                          • 0
                            Кстати, вполне может лежать старая версия goahead. Формально — всё соблюдено.
                            • 0
                              У них это нигде не оговорено. Вот тут есть реальный судебный прецедент. Бинарники должны соответствовать исходному коду.
                              • 0
                                Правильно, исходники GPL-компонентов должны соответствовать бинарникам. Конкретно по ссылке — у них в плеере изменения в ядры были.
                                Это, увы, не тот случай.
                                • +1
                                  Кстати там не только устранение уязвимости было. Взято из Release Note v1.08b2

                                  Note:
                                  1. This FW update is for solving the reported issue from www.devttys0.com
                                  Problems Resolved:
                                  1. Fixed the potential security issue.
                                  2. Fixed the minor PPPoE dial up issue.

                                  По пункту 2 ничего не нашел. Тоже в их бинарниках?
                        • 0
                          А если грепнуть именно alpha_auth_check или xmlset_roodkcableoj28840ybtide?
                          • +2
                            Да, есть! В не вычищенных логах сборки в опциях.

                            Лог сборки
                            /opt/_compare/1.08/GPL_Di524up/user/xsupplicant-1.2.2/config.log:ac_cv_env_CFLAGS_value='-Os -mips1 -msoft-float -fPIC -Dlinux -D__linux__ -Dunix -DEMBED -I/opt/20051017/RealTek865x_062/include -nostdinc -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062 -idirafter /opt/toolchain_mips_nofpu/usr/bin/../lib/gcc-lib/mips-linux-uclibc/3.3.3//include -I/opt/20051017/RealTek865x_062/linux-2.4.x/include -DPRODUCT_NAME="\«DI-724UP+A\»" -DUSB_LED_GPIO_A5 -DDI524UP=1 -DUSER_DEFINE_DAYLIGHT_SAVING=1 -DDONT_TOUCH_TTL -DALOG_NOTICE=224 -DALOG_DROP=216 -DALOG_ATTACK=208 -DALOG_DEBUG=200 -DALOG_SYSACT=192 -DXMLSETC_SEP_CHAR=0x07 -DCONFIG_WIRELESS_CARD_REALTEK=1 -DCONFIG_ALPHA_SMRTNTKY=1 -DUSB_DEVICE=1 -DUSE_PRINTER=1 -DCONFIG_WAN_BIGPOND=1 -I/opt/20051017/RealTek865x_062/user/goahead-2.1.4/LINUX -I/opt/20051017/RealTek865x_062/user/alpha_websrv -I/opt/20051017/RealTek865x_062/user/alpha_websrv/RealTek -I/opt/20051017/RealTek865x_062/user/alpha_websrv/alpha_configapi -DALPHA=1 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_INT64T=1 -DWIRELESS=1 -DPRODUCT_SIGNATURE=0x60420010 -DBACKDOOR_SIGNATURE=0x6042FFFF -DXMLSET_BACKDOOR_USER_AGENT="\«xmlset_roodkcableoj28840ybtide\»" -I.'
                            /opt/_compare/1.08/GPL_Di524up/user/xsupplicant-1.2.2/config.log:CFLAGS=' -Os -mips1 -msoft-float -fPIC -Dlinux -D__linux__ -Dunix -DEMBED -I/opt/20051017/RealTek865x_062/include -nostdinc -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062 -idirafter /opt/toolchain_mips_nofpu/usr/bin/../lib/gcc-lib/mips-linux-uclibc/3.3.3//include -I/opt/20051017/RealTek865x_062/linux-2.4.x/include -DPRODUCT_NAME="\«DI-724UP+A\»" -DUSB_LED_GPIO_A5 -DDI524UP=1 -DUSER_DEFINE_DAYLIGHT_SAVING=1 -DDONT_TOUCH_TTL -DALOG_NOTICE=224 -DALOG_DROP=216 -DALOG_ATTACK=208 -DALOG_DEBUG=200 -DALOG_SYSACT=192 -DXMLSETC_SEP_CHAR=0x07 -DCONFIG_WIRELESS_CARD_REALTEK=1 -DCONFIG_ALPHA_SMRTNTKY=1 -DUSB_DEVICE=1 -DUSE_PRINTER=1 -DCONFIG_WAN_BIGPOND=1 -I/opt/20051017/RealTek865x_062/user/goahead-2.1.4/LINUX -I/opt/20051017/RealTek865x_062/user/alpha_websrv -I/opt/20051017/RealTek865x_062/user/alpha_websrv/RealTek -I/opt/20051017/RealTek865x_062/user/alpha_websrv/alpha_configapi -DALPHA=1 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_INT64T=1 -DWIRELESS=1 -DPRODUCT_SIGNATURE=0x60420010 -DBACKDOOR_SIGNATURE=0x6042FFFF -DXMLSET_BACKDOOR_USER_AGENT="\«xmlset_roodkcableoj28840ybtide\»" -I. -Wall '
                            /opt/_compare/1.08/GPL_Di524up/user/xsupplicant-1.2.2/drivers/Makefile:CFLAGS = -Os -mips1 -msoft-float -fPIC -Dlinux -D__linux__ -Dunix -DEMBED -I/opt/20051017/RealTek865x_062/include -nostdinc -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062/lib/uClibc/include -I/opt/20051017/RealTek865x_062/lib/libcrypt -I/opt/20051017/RealTek865x_062 -idirafter /opt/toolchain_mips_nofpu/usr/bin/../lib/gcc-lib/mips-linux-uclibc/3.3.3//include -I/opt/20051017/RealTek865x_062/linux-2.4.x/include -DPRODUCT_NAME="\«DI-724UP+A\»" -DUSB_LED_GPIO_A5 -DDI524UP=1 -DUSER_DEFINE_DAYLIGHT_SAVING=1 -DDONT_TOUCH_TTL -DALOG_NOTICE=224 -DALOG_DROP=216 -DALOG_ATTACK=208 -DALOG_DEBUG=200 -DALOG_SYSACT=192 -DXMLSETC_SEP_CHAR=0x07 -DCONFIG_WIRELESS_CARD_REALTEK=1 -DCONFIG_ALPHA_SMRTNTKY=1 -DUSB_DEVICE=1 -DUSE_PRINTER=1 -DCONFIG_WAN_BIGPOND=1 -I/opt/20051017/RealTek865x_062/user/goahead-2.1.4/LINUX -I/opt/20051017/RealTek865x_062/user/alpha_websrv -I/opt/20051017/RealTek865x_062/user/alpha_websrv/RealTek -I/opt/20051017/RealTek865x_062/user/alpha_websrv/alpha_configapi -DALPHA=1 -DHAVE__PROGNAME=1 -DHAVE_FCNTL_H=1 -DHAVE_GRP_H=1 -DHAVE_MEMORY_H=1 -DHAVE_PATHS_H=1 -DHAVE_POLL_H=1 -DHAVE_SYS_POLL_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_DIRENT_H=1 -DHAVE_LIBCRYPT=1 -DHAVE_STRERROR=1 -DHAVE_WAITPID=1 -DHAVE_VSNPRINTF=1 -DHAVE_SETSID=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GAI_STRERROR=1 -DHAVE_ATOLL=1 -DHAVE_UNISTD_H=1 -DHAVE_GETPAGESIZE=1 -DHAVE_MMAP=1 -DHAVE_SELECT=1 -DHAVE_POLL=1 -DHAVE_INT64T=1 -DWIRELESS=1 -DPRODUCT_SIGNATURE=0x60420010 -DBACKDOOR_SIGNATURE=0x6042FFFF -DXMLSET_BACKDOOR_USER_AGENT="\«xmlset_roodkcableoj28840ybtide\»" -I. -Wall

                            Вот это меня окончательно убеждает в том, что это не исходники версии 1.08b2 и имеет место подлог.
                            • +7
                              -DBACKDOOR_SIGNATURE=0x6042FFFF -DXMLSET_BACKDOOR_USER_AGENT="\«xmlset_roodkcableoj28840ybtide\»"
                              Красота, прямым текстом…
              • 0
                Если бы для des-3526 сделали открытую прошивку — вот это было бы интересно, но это фантастика :)

                Дело даже не в том, что можно добавить функционал — у меня например лежит несколько таких устройств — они при включении загружают прошивку до 100% и висят.

                Ну ясное дело, отправлял их в сервис — не ремонтопригодны, правда, пожизненная гарантия, может быть заменили бы… ну в общем разговор не о том.

                Можно было бы сделать «отладочную» прошивку и смотреть в логах, на каком этапе происходит сбой запуска свитча.
                • 0
                  Разбирали сам аппарат? Внутри что-то наподобие UART интерфейса присутствует?
                  • 0
                    Консоль торчит прямо наружу, отдельного UART нет. Это же свитч.
                  • 0
                    кондеры проверили? заменили?
                    • 0
                      каэшн, и на блоке питания и на плате :)
                  • 0
                    не могу понять автора — в чем принципиальная сложность пересборки ядра альтернативной прошивки против стоковой?
                    • +4
                      Вы собирали? Можете поделиться опытом??
                      • +1
                        Да, было такое дело в далеком прошлом (сейчас, в основном, домашним железом занимаюсь по-знакомым в виде «распаковал-включил-сделал настройки из web-ui — пошли на кухню на обмывку», а железок старше 3х лет практически и в глаза не вижу)

                        Насчет патчей — тут надо смотреть детальнее, почему не собирается как надо… скорее всего просто патчи под очень древнее ядро были заточены (учитывая их дату), а Вы собираете с более новыми.

                        На самом деле мой вопрос был более риторический — неужели компиляция (если есть из чего) стоковой прошивки устройства проще чем компиляция альтернативной? Я не могу сравнивать, т.к. ни для одной фирменной железки не сталкивался с открытым firmware. Но имел дело с написанием модулей для opensource решений с нуля (от разработки железа)

                        Кстати, на Хабре есть цикл статей от уважаемого Ariman под названием Миникомпьютер из роутера с OpenWRT, где детально описывается путь от железа до написания драйвера ядра. Немного не по теме, но может будет интересно.

                        P.S. это задача just for fun или для серьезного применения в рабочем процессе компании? от меня — за рвение к новым знаниям конечно же плюс, но если это для рабочего процесса, то некрофилизм к железу конечно огорчает…
                        • 0
                          Спасибо за ссылки на посты, почитаю.
                          Ядро там версии 2.4, патчи для него. А вот это патчи для 2.6, их тоже пробовал — ошибки при компиляции. Пришлось искать на какую ревизию OpenWRT их накладывать, ибо авторы этого не указывают.
                          Компиляция стоковой прошивки проще в том смысле, что там кухню для всего этого собирать не надо — есть в комплекте, к тому же какие никакие конфиги ядра и софта прилагаются, не надо их с нуля делать.
                          По поводу вопроса для чего я это делаю — есть небольшой проект по устройству видео наблюдения на загородном доме, с помощью этого железа хочу реализовать.
                      • 0
                        Есть набор патчей от энтузиастов, добавляющих поддержку железа в OpenWRT, в ветку их не добавили и оно не компилируется так как надо.
                      • +4
                        Пользуясь случаем, хочу передать привет компании Sony, которая использует в своих фотоаппаратах серии NEX Linux, но не утруждает себя публикацией исходников используемых GPL-компонентов. Выложенное ядро не содержит в себе каких-либо конфигурационных файлов и файлов описания платформы (драйвера устройств могут быть и не GPL, если я все правильно понимаю). Если с необходимостью их наличия еще можно поспорить, то вот использование компилятора sony-gcc и библиотеки libsonyc говорит о том, что соответствующие исходники тоже должны быть представлены. Поддержка перенаправляет запрос в соответствующий отдел, и на этом все заканчивается.
                        • 0
                          Вот кстати интересно, каким образом это все в «правовое русло» вливается? Были же выигранные судебные дела, штрафы, исходники открывали в конечном итоге… Чье внимание на эти проблемы можно обращать?
                          • +1
                            Есть сайт gpl-violations.org, но он как-то не слишком активен.
                            • 0
                              GPL v.2, под которой распространяется Linux, не запрещает подобную TiVo`изацию… И более того, Linux`овское исключение разрешает несвободные модули в ядре. А GPL в целом, в свою очередь, ЕМНИП, разрешает линкование с несвободными системными библиотеками…
                            • 0
                              Драйвера, если это модули ядра, обязаны быть под GPL.
                              Поэтому, кстати, у nvidia, например, драйвер делится на модуль ядра (который по сути «переходник») и закрытый блоб.
                            • 0
                              Альтернативные, более функциональные и современные прошивки, такие как OpenWRT или DD-WRT существуют для устройств на таком же процессоре как и у DI-524UP — Realtek RTL8650B

                              Подскажите, где это дело можно достать. Имеется роутер dlink DIR120 на том-же чипе, но без wifi. Прошивки от DI524UP подходят.
                              • 0
                                Вот здесь он вроде присутствует в списке поддерживаемых…
                              • –1
                                У DIR-120 очень много всяких offload-ов в железе. На альтернативных прошивках в плане производительности всё очень грустно.
                              • +1
                                Вполне себе обычная практика. Allwinner в современных SoC SKD вообще не волнуется, если верить выводам комьюнити для A31 Software-> GPL Violations Ждем такие же SDK для A80 и запасаемся попкорном.
                                • +1
                                  sdk под a80 вышел пару недель назад, там все еще хуже.
                                  http://linux-sunxi.org/A80#GPL_violations
                                  • 0
                                    Спасибо, почитал) Похоже, что pcduino8 и похожие платы будут с blob прошивками на старых linux ядрах и скорее всего без аппаратного ускорения декодирования видео, OpenGL и т.п.
                                    • 0
                                      к слову, pcduino8 это optimusboard с другим цветом pcb/silkscreen, там, кажется, никаких отличий нет.
                                • –1
                                  Ну, такой способ апить версии софта очень давно уже известен.

                                  /*Windows '98 source code.*/

                                  /*
                                  TOP SECRET Microsoft© Code
                                  Project: Chicago(tm)
                                  Projected release-date: Summer 1998
                                  */

                                  #include «win31.h»
                                  #include «win95.h»
                                  #include «evenmore.h»
                                  #include «oldstuff.h»
                                  #include «billrulz.h»
                                  #define INSTALL_HARD

                                  char make_prog_look_big 1600000;

                                  void main()
                                  {
                                  while(!CRASHED)
                                  {
                                  display_copyright_message();
                                  display_bill_rules_message();
                                  do_nothing_loop();

                                  if (first_time_installation)
                                  {
                                  make_50_megabyte_swapfile();
                                  do_nothing_loop();
                                  totally_screw_up_HPFS_file_system();
                                  search_and_destroy_the_rest_of_OS/2();
                                  hang_system();
                                  }

                                  write_something(anything);
                                  display_copyright_message();
                                  do_nothing_loop();
                                  do_some_stuff();
                                  if (still_not_crashed)
                                  {
                                  display_copyright_message();
                                  do_nothing_loop();
                                  basically_run_windows_3.1();
                                  do_nothing_loop();
                                  do_nothing_loop();
                                  }
                                  }

                                  if (detect_cache())
                                  disable_cache();

                                  if (fast_cpu())
                                  {
                                  set_wait_states(lots);
                                  set_mouse(speed, very_slow);
                                  set_mouse(action, jumpy);
                                  set_mouse(reaction, sometimes);
                                  }

                                  /* printf(«Welcome to Windows 3.11»); */
                                  /* printf(«Welcome to Windows 95»); */
                                  printf(«Welcome to Windows 98»);

                                  if (system_ok())
                                  crash(to_dos_prompt);
                                  else
                                  system_memory = open(«a:\swp0001.swp», O_CREATE);

                                  while(something)
                                  {
                                  sleep(5);
                                  get_user_input();
                                  sleep(5);
                                  act_on_user_input();
                                  sleep(5);
                                  }
                                  create_general_protection_fault();

                                  }

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