Как сделать свою сборку openwrt

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Написал Денис Юрьев в 05.10.2013 46 комментариев

DD-WRT несколько закрытый проект и тем более, увы, полуживой.
Во-первых меня уже долгое время напрягал тот факт, что доступно уже давно ядро версии 3.*, а в dd-wrt для моего устройства (Dlink DIR-320) до сих пор ядро версии 2.4.
Во-вторых вытекает сразу из первого — кривая поддержка ntfs, до сих пор ничего не ясно с поддержкой ext4 ну и еще куча всего странного и непонятного
В-третьих недавно я Вам рассказал про модуль для ядра Linux — zRam, загорелся таким вот способом несколько решить проблему с нехваткой оперативной памяти в DD-WRT и как думаете что произошло? Конечно же, для DD-WRT этого модуля в принципе не существует.

UPD 05.10.2013: с момента написания статьи изменилась немного логика первых этапов сборки прошивки. Внес необходимые изменения, исправил недочеты.
UPD 25.09.2014: статья автором была приведена в актуальное состояние на другом ресурсе: DenisYuriev: OpenWRT — Сборка из исходников
Порывшись в инете я узнал, что в OpenWRT уже есть возможность использовать zRam, собрать прошивку для Dlink DIR320 с ядром третьей версии.
Возможно просто всё это не документировано касательно DD-WRT, но изобретать велосипед у меня времени особо нет. Воспользуюсь доступной в обилии на многих языках документацией по OpenWRT и соберу себе ту прошивку, которая нужна конкретно мне.

Сборка OpenWRT

Для сборки первым делом понадобится операционная система семейства Linux. В моем случае это Ubuntu Linux 13.04 64bit.

Подготовка к установке — получение исходных кодов OpenWRT и необходимых пакетов

Итак, приступим.
1. Устанавливаем Subversion

2. Так же в ходе получения исходников пакетов и патчей нам понадобится пакет git

3. Получаем исходники OpenWRT
Стабильная версия с версией ядра 2.6.*:

Стабильная версия с версией ядра 3.*

Я выбрал последний вариант, так как там доступен модуль zRam
Получив исходники, переходим в каталог, где они лежат:

4. Теперь надо еще получить пакеты и патчи, доступные для сборки:

5. Доустанавливаем необходимые для сборки пакеты. Для этого проверяем чего еще не хватает:

Примечание: очень часто неопытные пользователи при компиляции не могут найти откуда устанавливать пакет ncurses (ncurses-dev, ncurses-devel и т.д.), который требует команда make — решение проблемы в установке пакета libncurses5-dev

6. Если всё необходимое установлено, то мы увидим следующую картину:

конфигурирование пакетов и модулей ядра OpenWRT

Первым делом указываем тип процессора.
У DLink DIR-320 rev. A1 это Broadcom BCM5354KFBG, он же BCM95354
Итак открываем TargetSystem и там выбираем Broadcom BCM947xx/953xx.

Выбор типа процессора при сборке OpenWRT

7. Компиляция пакетов для сборки прошивки.
Это пункт необязательный, но настаиваю на его выполнении.
Дело в том, что если вы пропустите сборку пакетов для компиляции прошивки OpenWRT, то она произойдет при первой компиляции самой прошивки.
Однако потом будет труднее выявить ошибку — что не хочет собираться, инструменты для компиляции или сама прошивка.
Внимание: чтобы потом не пересобирать эти инструменты — убедитесь, что в предыдущем пункте правильно выбрали тип процессора устройства.

Команда выполняется достаточно долго, есть время попить чай или прибраться в комнате

Настройка пакетов и модулей ядра OpenWRT

В итоге в терминале вы увидите снова псевдографическое меню для настройки сборки OpenWRT с уже выбранным процессором.

Теперь выбираем профиль Target Profile и там выбираем Broadcom SoC, b44 Ethernet, BCM43xx WiFi (b43, default) — это позволит сэкономить пару десятков килобайт в размере нашей будущей прошивки, исключив ненужные драйвера ethernet-контролеров.

сборка OpenWRT - выбор профиля

Теперь подключаем модули ядра.
Для этого открываем пункт в главном меню Kernel modules

Выбор модулей для OpenWRT

Для начала надо настроить модуль поддержки WiFi нашего устройства — kmod-b43
Для этого выбираем пункт Wireless Drivers

Настройка параметров драйверов wireless при сборке openwrt

В открывшемся меню отключаем ненужный в нашем случае модуль kmod-b43legacy и переходим к настройке модуля kmod-b43

настройка модуля kmod-b43

Отключим ненужный функционал модуля kmod-b43, чтобы сэкономить несколько сотен килобайт, что позволит включить в прошивку веб-интерфейс.
Для этого выпоняем следующие действия:
Значение параметра Core revisions to include выставляем равным 13
Значение параметра PHY types to include выставляем равным LP
Отключаем пункты Enable support for PIO transfer mode, Enable support for N-PHYs, Enable support for HT-PHYs.
В итоге должна получиться примерно следующая картина:

настройка kmod-b43 openwrt

Теперь выбираем раздел USB support для подключения поддержки USB-устройств

Выбор модулей ядра OpenWRT, отвечающих за поддержку USB-устройств

Я буду подключать только внешний USB-диск, для этого я выбираю
kmod-usb-core — поддержка спецификации USB ядром
kmod-usb-brcm47xx — поддержка USB-устройств процессором маршрутизатора
kmod-usb2 — поддержка USB версии 2.0
kmod-ohci — поддержка USB-хабов
kmod-usb-storage — поддержка USB-дисков

Выбираем необходимые нам модули ядра OpenWRT

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

OpenWRT подключение поддержки файловых систем

И выберем модуль ядра kmod-fs-ext4. Этот модуль обеспечит поддержку файловых систем ext2, ext3 и ext4. Его необходимо выбрать, если планируете устанавливать Samba-сервер или торрент-клиент Transmission, ну или любые пакеты.
Так же, если вам критична поддержка других файловых систем, то вы можете выбрать kmod-fs-ntfs для поддержки NTFS или kmod-fs-vfat для поддержки файловой системы FAT32.

Включение поддержки ext2, ext3, ext4 в OpenWRT

Теперь настало время подключить поддержку zRam.
Напомню, этот модуль я хочу использовать для экономии оперативной памяти маршрутизатора путем монтирования в виртуальное сжатое блочное устройство раздела подкачки swap.
Для автоматизации этого процесса в OpenWRT уже есть готовый скрипт zram-swap. Включив его в состав прошивки вы автоматизируете весь этот процесс.
Для этого выбираем в главном меню конфигуратора прошивки пункт Base system

Подключение базовых элементов прошивки OpenWRT

И в конце открывшегося списка отмечаем для установки zram-swap

Включаем в состав прошивки OpenWRT поддержку zRam и скрипт для монтирования раздела подкачки в zRam

Скорее всего это лишь частично решит проблему с нехваткой памяти, так что без раздела подкачки на внешнем устройстве нам не обойтись. Но для этого необходимо будет монтировать его с пониженным приоритетом, чтобы маршрутизатор старался использовать максимально swap в виртуальном устройстве zram
Для этого нам необходимо не забыть включить подключение раздела подкачки с указанием приоритета.
Там же в Base system ищем пакет busybox и выбираем его нажатием клавишей Enter:

OpenWRT - пакет busybox

Откроется конфигурация пакета busybox, котором выберем раздел Linux System Utilities

OpenWRT - linux system utilities

и в нём включим поддержку swaponoff, а так же приоритет для разделов подкачки Support priority option -p

OpenWRT swapon swapoff

Для удобного монтирования разделов на подключаемых носителях нам так же понадобится пакет block-mount, который можно включить в состав нашей будущей прошивки в всё том же разделе Base system

Включение пакета block-mount в состав прошивки openwrt

Теперь остается подключить web-интерфейс LuCI. Сразу же скажу, что данный веб-интерфейс намного лучше продуман разработчиками, нежели веб-интерфейс DD-WRT.
Итак, возвращаемся в главное меню конфигуратора OpenWRT и выбираем пункт LuCI

Включение web-интерфейса LuCI в прошивку OpenWRT

Включаем web-интерфейса LuCI в прошивку OpenWRT

Выбираем первый пункт Collections и в открывшемся меню выбираем luci

luci в прошивке openwrt

Если Вы испытываете проблемы с английским языком, или же просто хотите видеть родной язык в Web-интерфейсе, тогда выбирайте пятый пункт в настройках пакета LuCI — Translations
Там вы сможете выбрать как русский (luci-i18n-russian), так и украинский (luci-i18n-ukrainian) языки

выбор русской локали в веб-интерфейсе openwrt

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

Компиляция прошивки OpenWRT

Приступаем к самой сборке

Параметр -j4 указывает во сколько потоков выполнять сборку для ускорения процесса. Укажите на один поток больше, чем количество ядер вашего процессора. Если же у вас процессор с поддержкой Hyper-threading, то укажите равное количеству виртуальных ядер (потоков).
Готовый файл прошивки будет носить имя openwrt-brcm47xx-squashfs.trx и найдете его в папке bin в каталоге с исходниками прошивки
Процесс компиляции исходников занимает, в зависимости от вычислительных способностей вашего компьютера, от 20 минут до нескольких часов.

Устанавливаем на DIR-320 прошивку OpenWRT

В итоге в каталоге с исходниками появится папка bin/brcm47xx (если вы собирали для маршрутизатора с процессором серии brcm47xx)
В папке будет куча готовых прошивок. Для DIR-320 файл прошивки называется openwrt-brcm47xx-squashfs.trx
Если Вы ранее не пользовались альтернативными прошивками и впервые будете прошивать своё устройство, то процесс точно такой же, как установка прошивки DD-WRT на DIR-320.
Если же у Вас уже установлена прошивка DD-WRT, то можете смело обновляться через веб-интерфейс, только не забудьте указать, что необходимо сбросить настройки на заводские.

Первый взгляд на OpenWRT

Как только все установится по адресу 192.168.1.1 будет доступен веб-интерфейс OpenWRT LuCI, который сразу же предложит установить пароль пользователю root. Указываем пароль, и перед нами во всей своей красе предстает веб-интерфейс. Вот небольшой его кусок.

Веб-интерфейс LuCI OpenWRT

Как Вы можете заметить, файл подкачки в zram сразу же подхватился и его объем равен половине памяти устройства. Ну что ж, цель достигнута.


Недавно мне понадобилось установить мою программу написанную на C(Си) на точку доступа под управлением OpenWRT. Уже была написана статья по сборке этой программы под Windows при помощи GCC из Cygwin. Для сборки же OpenWRT и всех поставляемых программ используется система сборки Buildroot и система пакетов ipkg. После долгих исследований OpenWrt Wiki и других сайтов найти актуальную документации не удалось. В итоге после сборки информации по крупицам я всетаки собрал пакет ipkg со своей программой. Дабы не пропасть приобретенным знаниям я решил написать данную статью.

Получение исходных кодов

Я собираю OpenWrt из исходных кодов ветки trunk. Получить её можно либо при помощи git:

Либо при помощи svn:

Как получить другие ветки, в том числе с пакетами, написано тут.

Подготовка к добаленю своего пакета

Переходим в полученный каталог

и получаем так называетмые feeds(дополнительные пакеты). Получаемые feeds можно отредактировать в файле feeds.conf.default

./scripts/feeds update -a && ./scripts/feeds install -a

Потом выполняем комадну

И мы узнаем каких пакетов нехватает у нас в системе(в операционной системе)

Добавление своего пакета

Переходим в каталог package

Создаем коталог под наш пакет(у меня он называется ecu)

Копируем исходники нашей программы. Я собираю простую программу которая собирается простым Makefile'ом

mkdir ecu/ecu-src/

cp -r моя_программа/* ecu/ecu-src/

Содержимое каталога ecu-src/

Теперь на нужно интегрировать исходники с Makefile'ом в систему сбоки OpenWRT. Для этого нужно создать специальный Makefile в каталоге ecu/. Содержимое моего файла:

include $(TOPDIR)/rules.mk

PKG_NAME:=ecu
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/ecu
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Embedded clock updater
endef

define Package/ecu/description
Big comments.
.
endef

define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./ecu-src/* $(PKG_BUILD_DIR)/
endef

define Package/ecu/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ecu $(1)/bin/
endef

$(eval $(call BuildPackage,ecu))

Сборка OpenWRT с добавленным пакетом пакетом

Переходим в корневой каталог openwrt/ и открываем menuconfig

Далее выбираем все что нам нужно для дистрибутива( на эту тему есть статья) и самое главное наш новый пакет. Я добавил свою программу в секцию utils то я ищу её в ней


Выбираю, собирать отдельным пакетом:


Все, теперь выходим и запускаем сборку

или если у вас многоядерный процессор

где n - колличество ядер + 1

А вот и наш пакетик

bin/ar71xx/packages/ecu_1_ar71xx.ipk

Возможные проблемы

Если в ходе сборки появляется это

.
make[3] -C package/ecu compile
make -r world: build failed. Please re-run make with V=99 to see what's going on
make: *** [world] Ошибка 1

то перезапускаем сборку с рекомендованным ключем(очень подробный вывод)

и ждем, у меня, например была такая ошибка

.
src/main.c: In function 'main':
src/main.c:113:2: error: 'for' loop initial declarations are only allowed in C99 mode
src/main.c:113:2: note: use option -std=c99 or -std=gnu99 to compile your code
src/main.c:118:4: error: 'for' loop initial declarations are only allowed in C99 mode
.

не понравился синтаксис моего файла, я добавил рекомендуемый ключ компиляции, так:

Микрокомпьютер SKW92, производимый китайской фирмой Skylab — это, на сегодняшний день, одна из самых дешёвых на рынке железок, на которую можно установить Linux OpenWRT. Тем не менее, этот микрокомпьютер построен на базе достаточно мощного и очень популярного SOC от Mediatek — MT7688AN (на базе процессора MT7628).
К слову, ровно на этом же самом чипе сделаны многие известные роутеры: Asus (RT-N10p, RT-N11p), TP-Link (TL-WR84xN, TL-MR3x20), ZyXEL (Keenetic Extra II), Xiaomi (MiWiFi Nano, Mi Router 4A), а также рассмотренный ранее на нашем сайте микрокомпьютер Onion Omega2 (просто откройте исходники, перейдите в папку /target/linux/ramips/dts и посмотрите список файлов, чьё имя начинается с mt7628an_).

Да, все эти устройства отличаются размерами флеша и ОЗУ, на каких-то не используется часть поддерживаемых чипом интерфейсов, тем не менее, повторюсь, все они базируются на одном SOC-контроллере.

Итак, что же мы имеем конкретно в skw92a:

  • Архитектура: MIPS32
  • Частота: 580 МГц
  • RAM: 64 Мбайт
  • Flash: 8 Мбайт (подключена через SPI-master)
  • Ethernet: 1 WAN, 4 LAN (мультиплексированы с SD-картой)
  • Поддержка SD-карты: есть (мультиплексирована с LAN)
  • Поддержка USB 2.0: есть
  • Поддержка Wi-Fi: есть
  • UART: UART0, UART1 (мультиплексирован с GPIO 45,46)
  • I2C: 1 шт (мультиплексирован с GPIO 4,5)
  • SPI: нет
  • I2S: 1 шт (мультиплексирован с GPIO 0,1,2,3)
  • GPIO: до 30 шт (в зависимости от конфигурации других интерфейсов)

Начальные этапы подготовки системы к сборке OpenWRT из исходников выполняются ровно также, как это было описано в статье о сборке альтернативных прошивок для Омеги.

Первым делом, после того, как исходники скачаны с гитхаба командой

Открываем файл /target/linux/ramips/image/mt76x8.mk , находим строку define Device/skylab_skw92a и в разделе IMAGE_SIZE меняем максимальный размер образа с 16064k на 7872k. У нас размер флеша всего 8 Мб, из них первые 3 блока по 64К занимает bootloader, ещё 1 блок 64К — конфигурация и ещё один блок 64К — factory settings. На прошивку остаётся 123 блока по 64К, что как раз и составляет 7872К.

Далее там же, в раздел DEVICE_PACKAGES дописываем в конце через пробел пакеты uboot-envtools (правка параметров загрузки бутлоадера) и kmod-sdhci-mt7620 (поддержка sd-карт). Последний пакет можно не включать как обязательный именно в этом месте, но тогда для работы с SD-картами его придётся добавить в сборку на этапе конфигурирования (как включенный по-умолчанию или собираемый отдельным модулем).

После этого переходим в папку /openwrt/target/linux/ramips/dts . Здесь, в файле mt7628an_skylab_skw92a.dts прописаны включенные по-умолчанию интерфейсы (можно подглядеть какие включены в омеге и включить такие же), а в файле mt7628an.dtsi перечислен полный список интерфейсов, которые в принципе можно включить. Давайте включим sd-карту и uart1, а интерфейсы i2c, i2s, spis переключим по-умолчанию в режим gpio, для этого в конец файла mt7628an_skylab_skw92a.dts нужно добавить следующее:

Следующее, что нужно сделать — это добавить в наши исходники удобные сторонние инструменты.

Скажем, в оригинальной сборке для микрокомпьютера Omega2 присутствует удобный инструмент для управления мультиплексированными линиями — omega2-ctrl. Его исходники свободно лежат на гитхабе, но по-умолчанию в исходниках OpenWRT этого инструмента нет. Сейчас мы это исправим и добавим его, например, в секцию Utilities.

    Открываем папку с исходниками OpenWRT, переходим в папку /package/utils/ и качаем в неё исходники инструмента omega2-ctrl. Для этого просто выполняем в терминалке:

то должно стать вот так:

то должно стать вот так:


Знакомство с утилитой make лучше начинать со статьи на хабре, после чего можно переходить и к официальной доке. А вот здесь, в частности, описаны переменные, используемые неявными правилами: $(CC), $(CFLAGS), $LDFLAGS…

Второй Makefile располагается прямо в папке omega2-ctrl, создаётся по правилам, описанным вот здесь и представляет собой объектно-ориентированный шаблон, описывающий создаваемый нами пакет (в котором, в том числе, описано как его собирать и куда устанавливать после того, как всё соберётся).

Теперь если мы в корне папки с исходниками openwrt выполним make menuconfig , то в списке пакетов (в секции utils) мы увидим нашу утилитку omega2-ctrl.

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

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

Далее в появившемся конфигураторе (менюшка, нарисованная псевдографикой) нужно выставить следующие настройки:

  • Target System (Mediatek Ralink MIPS) — выбираем архитектуру ядра микроконтроллера на базе которого сделана омега
  • Subtarget (MT76x8 based boards) — выбираем семейство, в которое входит микроконтроллер модуля Omega2
  • Target Profile (Skylab SKW92A) — выбираем конкретное устройство

Сохраняем установленную конфигурацию ( ), выходим ( ) и выполняем в командной строке команду:

в результате чего будет создан конфигурационный файл с настройками по умолчанию.

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

Далее можно переходить к кастомизации, то есть к выбиру того, какие именно пакеты будут включены в прошивку. Для этого снова заходим в меню:

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

После того как все необходимые пакеты выбраны — сохраняем всё, что мы наконфигурировали ( ) и выходим ( ).

Всё, теперь можно переходить к сборке прошивки. Для этого выполняем в командной строке:

N — число ядер вашего процессора + 1

Можно, кстати, не заморачиваться и написать просто make, но так будет дольше.

После окончания процесса сборки готовую прошивку в виде бинарника можно будет найти в папке bin/targets/ramips/mt76x8.

Добавлять в сборку свои пакеты — это отлично, но сначала эти пакеты нужно отладить. А для отладки очень неудобно пересобирать все исходники openwrt целиком (это заняло бы очень много времени). Гораздо проще собирать один единственный пакет, который мы хотим отладить, заливать его на нашу железку и тестировать. Сейчас мы разберёмся как это сделать (экспериментировать продолжим с нашим пакетом omega2-ctrl).

Если мы просто перейдём в папку с исходниками пакета omega2-ctrl и выполним команду make, то у нас всё скомпилится, но при переносе скомпилированной программы в skw92 ничего работать не будет. Почему? Потому что вместо кроссплатформенной компиляции под mips-архитектуру процессора MT7628AN, программа скомпилировалась под архитектуру x86 нашего компьютера. Это легко увидеть, если просмотреть скомпилированный файл в текстовом редакторе (например, выбираем файл в Midnight Commander и жмём F3). Где-то в начале нашего файла мы увидим примерно такое:

Как видите, архитектура x86, 64 бита.

Как же так вышло? А помните, мы в Makefile написали вот такую инструкцию по сборке:

Так вот, когда этот Makefile последовательно обрабатывался в процессе компиляции всех исходников openwrt, у нас при его вызове была определена переменная окружения $(CC), содержащая путь к кроссплатформенному компилятору gcc под mips32, который, в свою очередь, собирается на этапе сборки тулчейна. А когда мы попытались выполнить make из папки с исходниками omega2-ctrl — у нас переменная окружения $(CC) оказалась неопределённой и утилита make просто не знала, что компилить нашу прогу нужно кроссплатформенным компилятором под другую платформу.

Как решить вопрос? Кроссплатформенный компилятор можно найти вот здесь: /путь_к_папке_с_исходниками_openwrt/staging_dir/toolchain_mipsel_24kc_gcc-8.4.0_musl/bin , он называется mipsel-openwrt-linux-gcc . То есть, в принципе, для сборки нашей простенькой программы достаточно перейти в папку с её исходниками и выполнить в терминале такую команду:

Теперь всё скомпилится под нужную архитектуру. Если снова открыть в текстовом редакторе скомпилированный файл, то в начале мы увидим:

Здорово, но всё ещё не совсем удобно, — слишком долго набирать команду в командной строке. Можно сделать ещё удобнее. Давайте в папке с исходниками программы (/src) omega2-ctrl создадим bash-скрипт, назовём его, скажем, make-debug.sh и наполним следующим содержанием:

Пришлось отдельно вынести переменную окружения STAGING_DIR, поскольку без неё компилятор выдавал несколько ворнингов, но это так, детали.

Всё, теперь мы можем пересобирать наш пакет, просто выполнив bash-скрипт (кстати, не забудьте поставить ему права на исполнение: chmod +x make-dubug.sh ).

Ещё раз обращу ваше внимание, что собирать и отлаживать какие-либо пакеты имеет смысл только после сборки тулчейна, так как при его сборке собирается в том числе и кроссплатформенный компилятор!

На этом на сегодня всё. Дополнительную информацию про skw92 можно найти на нашем форуме

Для создания своих пакетов *.ipk переходим в папку package:

Создаём каталоги для приложения:

Создаём файл для сборки пакета:

cd ~/openwrt/package/program1

mcedit Makefile

Файлы для компиляции на C копируем в созданную нами папку src:

Переходим в каталог openwrt и запустим конфигурацию:

Выбираем категорию Utilities, в ней мы увидим название нашей программы (program1), чтобы собрать отдельным пакетом нам нужно установить букву М напротив названия нашей программы (* — компиляция в прошивку). После выбора, сохраняем конфигурацию в выходим. Перед компилированием выполним команду:

Получаем последнюю версию OpenWrt:

Получаем дополнительные пакеты:

Применяем дефолтную конфигурацию:

Конфигурируем систему (выбираем свой тип роутера):

Запускаем сборку OpenWrt:

Готовый файл прошивки для заливки в роутер находится здесь:
/bin/brcm47xx$

Если нужно просто обновить ранее скаченый дистрибутив то обновляем до последней версии с помощью команды:

Также возможно получение исходников определнной версии:

Для сборки какого-то отдельного (определенного) пакета из состава openWrt:

Читайте также: