Пользователь
0,0
рейтинг
16 сентября 2014 в 14:39

Разработка → Как компания 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
в коде версии не соответствуют заявленным.

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

Евгений Михеев @thunder367
карма
15,5
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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
      Вот здесь он вроде присутствует в списке поддерживаемых…
      • 0
        Я не нашёл DI-524UP
    • –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();

    }

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