Denis Yuriev

Записки бездельника

Главная » Linux » OpenWRT » OpenWRT - Сборка из исходников

OpenWRT — Сборка из исходников

OpenWRT — популярная альтернативная прошивка для маршрутизаторов, NAS серверов, а так же может выступать в качестве операционной системы для небольшого домашнего сервера на x86-платформе.

Сегодня я поведаю, как собрать прошивку самому «на коленке» из исходников. Поверьте, в этом нет ничего сложного, если вы хоть мало-мальски разбираетесь в Linux-системах.

Первым делом Вам понадобится, конечно же, компьютер подключенный к сети Интернет с установленной операционной системой семейства Linux.

Данная статья ориентирована на пользователей Ubuntu Linux, хотя в прочем без каких либо доработок подойдет и для Debian Linux.

Если же у Вас что-то иное, сложностей всё равно не должно возникнуть.
Итак, в путь.

Установка необходимых пакетов

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

sudo apt-get install subversion git

А так же набор инструментов для компилятора:

sudo apt-get install g++ libncurses5-dev zlib1g-dev gawk libssl-dev unzip make

Если же чего то не хватит, то нам прямым текстом об этом скажет система чуть позже.

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

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

  • Attitude Adjustment — проверенная стабильная версия, однако на фоне неумолимого прогресса в сфере информационных технологий актуальность её угасает:
    svn co svn://svn.openwrt.org/openwrt/branches/attitude_adjustment wrt
  • Barrier Breaker — версия, обещающая стать заменой предыдущей, на сегодня находится в стадии RC (release candidate). ставшая новым stable-релизом. если случаются обновления исходного кода, то только критические исправления, не замеченные в период тестирования.
    Пока имеет множество небольшое количество о умолчанию не доступных дополнительных пакетов, но если вы не планируете запускать на маршрутизаторе Web-сервер или еще какое нестандартное извращение, то проблем у Вас не возникнет.
    Хотя отдельно затем отпишусь, как вернуть для сборки эти пакеты.

    svn co svn://svn.openwrt.org/openwrt/branches/barrier_breaker wrt
  • Chaos Calmer — следующая версия OpenWRT, находится в стадии trunk. Обещается в будущем переход на версию kernel 3.14 и подхватывание всех современных тенденций. Версия для экспериментаторов. Временами возникают проблемы, но быстро лечатся. Если руки у Вас прямы, нервы крепки, готовы и морально и физически к трудностям, которые могут возникнут совершено случайно при очередной пересборке, то смотрите лучше на эту версию.
    svn co svn://svn.openwrt.org/openwrt/trunk wrt

Если возникает ошибка svn: E000111, то читаем мини-заметку: ошибка e000111

Итак выбрали, скачали исходники самой прошивки. Теперь скачаем исходники дополнительных пакетов.

cd ~/wrt
./scripts/feeds update -a
./scripts/feeds install -a

Сборка OpenWRT

Итак, исходные коды получили. Приступаем к сборке. Увы, это не так быстро, как хотелось бы. По этому я опишу сценарий в несколько этапов, чтобы иметь время переварить информацию, сходить покушать или провести время с любимой.

Проверка и подготовка среды компиляции OpenWRT

Достаточно громкое название пункта, не смог придумать что-то иное, описывающее суть. На самом деле всё тут просто.
Вводим команду

make prereq

Ждем менее минуты. И смотрим на результат. Если видим

~/wrt$ make prereq
Collecting package info: done

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

~/wrt$ make prereq
Collecting package info: done
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'getopt'... ok.
Checking 'fileutils'... ok.
Checking 'working-gcc'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... ok.
Checking 'zlib'... ok.
Checking 'gawk'... ok.
Checking 'unzip'... failed.
Checking 'bzip2'... ok.
Checking 'perl'... ok.
Checking '/usr/bin/python2.7'... ok.
Checking 'wget'... ok.
Checking 'git'... ok.
Checking 'gnutar'... ok.
Checking 'svn'... ok.
Checking 'gnu-find'... ok.
Checking 'getopt-extended'... ok.
Checking 'non-root'... ok.

То ищем, у какого пакета статус failed, то есть про который вы забыли. Ну и доустанавливаем.

Выбор целевой платформы

Всё проверили, начнем первый заход в интерфейс настройки сборки прошивки.

make menuconfig

И через несколько мгновений попадаем в псевдографический интерфейс настройки сборки прошивки OpenWRT

Псевдографический интерфейс настройки сборки прошивки OpenWRT

Псевдографический интерфейс настройки сборки прошивки OpenWRT


Здесь нам необходимо указать тип процессора и устройство.
Для примера:

  • Dlink DIR-320 rev. A1/A2
    1. Target System — Broadcom BCM47xx/53xx (MIPS)
    2. Subtarget — Generic
    3. Target Profile — Broadcom SoC, b44 Ethernet, BCM43xx WiFi (b43, default)
  • Dlink DIR-320 rev. B1/B2 он же Dlink DIR-320NRU
    1. Target System — Ralink RT288x/RT3xxx
    2. Subtarget — RT3x5x/RT5350 based boards
    3. Target Profile — Default Profile
  • TP-Link TL-WR842ND v1/v2
    1. Target System — Atheros AR7xxx/AR9xxx
    2. Subtarget — Generic
    3. Target Profile — TP-LINK TL-WR842N/ND

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

Сборка кросскомпилятора

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

Мы собираем систему не для обычного компьютера, а для устройства с MIPS-процессором (может быть кому то и ARM достался, но сам факт остается фактом).
Посему нам необходимо сначала позаботиться об компиляторе.

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

make tools/install -j3 V=-1 && make toolchain/install -j3 V=-1

Обратите внимание, что
-j3 — во сколько потоков будет собираться. Выбирайте количество ядер процессора плюс один поток.
V=-1 — не выводить дополнительную информацию. В этом случае компилятор будет лишь выводить о текущем этапе сборки.

Процедура достаточно долгая. Позвоните девушке, позовите в кафе.
Если процессор у вас медленный, а девушки нет — пора бы найти пассию.
А если серьезно, то при средней скорости интернета и производительности компьютера — примерно час времени это займет.

Выбор компонентов OpenWRT

Итак, всё необходимое для сборки самой прошивки мы собрали, теперь перейдем к выбору составляющих.
В прочем их доустановить можно будет и уже на установленную прошику, но ведь хотелось бы иметь всё из коробки, не так ли?
Ну и в силу технических особенностей, пакеты, включенные в прошивку, занимают значительно меньше места, чем доустановленные позже.
Возвращаемся в тот самый интерфейс.

make menuconfig

Web-интерфейс LuCI

Управлять прошивкой из командной строки — дело благородное, но не всегда удобное.
Посему я всем рекомендую использовать Web-интерфейс.
Для этого выбираем следующие пункты

LuCI  --->
   1. Collections  --->
      <*> luci
   5. Translations  --->
      <*> luci-i18n-english
      <*> luci-i18n-russian

Впрочем, набор языков можете выбрать иной.

Протоколы подключений к Интернет

Зачем нам маршрутизатор, который не умеет подключаться к интернету?
Выберем необходимые протоколы:

Network  --->
   <*> ppp
      <*> ppp-mod-pppoe
      <*> ppp-mod-pppol2tp
      <*> ppp-mod-pptp

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

Подключение USB-устройств

Наиболее популярной задачей, с которой сталкиваются пользователи OpenWRT — подключение внешних накопителей.
Подключение USB-модемов и принтеров рассматривать в этой статье не будем, так как её размер увеличится до бесконечности.

Для подключения USB дисков нам первым делом понадобится пакет block-mount, который в прочем не обязателен, но поможет нам подключать диски через Web-интерфейс, а так же автоматически их монтировать после перезагрузки устройства. Иначе придется всё ручками прописывать.

Base system   --->
   <*> block-mount

А так же модули ядра, отвечающие за поддержку шины USB, а так же подключаемых через неё устройств, в частности — внешних накопителей.

Kernel modules  --->
   USB Support  --->
      <*> kmod-usb-core
      <*> kmod-usb-ohci
      <*> kmod-usb-storage
      <*> kmod-usb-usb2

Ну и конечно же модули файловых систем. Я использую только Ext2/Ext3/Ext4, чего и Вам советую NTFS и FAT32 — это хорошо там, где Windows.

Kernel modules  --->
   Filesystems  --->
      <*> kmod-fs-ext4

Модуль ядра Ext4 совместим с более старыми версиями — Ext2 и Ext3. Полностью их поддерживает, так что об совместимости особо не беспокойтесь.

Подключаем zram-swap

Если Вы планируете выжимать из Вашего устройства всё, на что оно способно, то zRam и в OpenWRT вам поможет. Если не в курсе, что этого такое и для чего необходимо — читайте в статье Linux и zRam — экономим оперативную память

Base system   --->
   <*> zram-swap

Выбираем оптимизацию — скорость или размер

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

[*] Advanced configuration options (for developers)  --->
   [*] Target Options  --->
      Target Optimizations

В этом параметре мы видим параметры компиляции исходного кода.
Например для TP-Link TL-WR842ND v1/v2 среда сборки предлагает следующие параметры

-Os -pipe -mno-branch-likely -mips32r2 -mtune=34kc

Здесь первый параметр -Os — и есть флаг оптимизации размера. Поменяем его на -O2. Таким образом размер занимаемой прошивки вырастет процентов на 5-10, как и скорость работы. В принципе не очень и вырост в производительности, но в случае с такими медленными по современным меркам процессорами — уже приятно.
Так же, если Вы точно знаете модель процессора и его спецификации, то можете поменять параметры компиляции.
Например во второй TP-Link TL-WR842ND используется уже процессор не 34kc, а уже более современный 74kc с поддержкой инструкций dsp2.
Если у Вас маршрутизатор TP-Link TL-WR842ND v2, то имеет смысл привести строку к виду

-O2 -pipe -mno-branch-likely -mips32r2 -mtune=74kc -mdspr2

Внимание! Данные параметры превратят маршрутизатор данной модели первой ревизии в кирпич, если не уверены — то ограничьте себя заменой -Os на -O2.

Редактор Nano

Если место Вы экономить не планируете, а с редактором vi, идущем по умолчанию в OpenWRT у вас созревают конфликты, ибо не самое удобное творение человечества, то есть смысл так же добавить в состав прошивки редактор Nano. Хотя он и не очень то и много места займет в Вашем устройстве.

Utilities  --->
   [*] Editors  --->
      <*> nano

Компиляция и сборка OpenWRT

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

make -j3 V=-1

Вот так вот всё просто.
Ждем минут двадцать и в каталоге

~/wrt/bin/тип процессора/

созерцаем готовые прошивки, ищем под своё устройство и прошиваем.

Сделай приятное автору - поделись статьей в социальной сети.

6 Комментариев

  1. bmf1982

    Здравствуйте!

    ранее мой tl-mr3020 был прошит OpenWrt Attitude Adjustment 12.09

    собрал прошивку для своего tl-mr3020 под Chaos 15.05. сделал все по Вашей инструкции. пытаюсь скромить ему прошивку через luci — в ответ получаю следующее «The uploaded image file does not contain a supported format. Make sure that you choose the generic image format for your platform. »

    сталкивались ли Вы с таким? и что сделать? насильно втянуть прошивку на /tmp/ роутера и оттуда ручками запустить?

    не совсем ясно, почему собранная прошивка так себя ведет, вроде делал все по инструкции.

  2. Денис, подскажите пожалуйста, как самостоятельно определять какие флаги оптимизации использовать для конкретного процессора? Гугление спецификаций особо ничего не даёт, либо я не туда смотрю.

  3. Автор, можете написать мануал по dd-wrt?

  4. Alex013

    Привет!
    Пытаюсь собрать DD из git trunk для Asus RT-N66U. Поставил Ubuntu 16.04 на 64Гб флешку USB 3.0
    При сборке возникают такие ошибки:
    make[4]: Leaving directory ‘/home/alex/openwrt/build_dir/target-mipsel_74kc+dsp2_musl-1.1.14/host/LuaSrcDiet-0.12.1’
    touch /home/alex/openwrt/build_dir/target-mipsel_74kc+dsp2_musl-1.1.14/host/LuaSrcDiet-0.12.1/.built
    install -d -m0755 /bin
    install -m0755 src/po2lmo /bin/po2lmo
    install: cannot create regular file ‘/bin/po2lmo’: Permission denied
    Makefile:45: recipe for target ‘/home/alex/openwrt/staging_dir/target-mipsel_74kc+dsp2_musl-1.1.14/host/stamp/.luci-base_installed’ failed
    make[3]: *** [/home/alex/openwrt/staging_dir/target-mipsel_74kc+dsp2_musl-1.1.14/host/stamp/.luci-base_installed] Error 1
    make[3]: Leaving directory ‘/home/alex/openwrt/feeds/luci/modules/luci-base’
    package/Makefile:196: recipe for target ‘package/feeds/luci/luci-base/host/compile’ failed
    make[2]: *** [package/feeds/luci/luci-base/host/compile] Error 2
    make[2]: Leaving directory ‘/home/alex/openwrt’
    package/Makefile:193: recipe for target ‘/home/alex/openwrt/staging_dir/target-mipsel_74kc+dsp2_musl-1.1.14/stamp/.package_compile’ failed
    make[1]: *** [/home/alex/openwrt/staging_dir/target-mipsel_74kc+dsp2_musl-1.1.14/stamp/.package_compile] Error 2
    make[1]: Leaving directory ‘/home/alex/openwrt’
    /home/alex/openwrt/include/toplevel.mk:192: ошибка выполнения рецепта для цели «world»
    make: *** [world] Ошибка 2
    Делаю НЕ из под рута.
    Не подскажете откуда проблемы с доступом и куда копать?

  5. блин уже пятый раз собираю на dir320nru b1 и не могу собрать.в сборку добавляю только luci с русским и поддержку samba ext4.собираю 15.05,мне больше и не надо.модемы всякие и принтеры ненужны.чистый стандарт только с самбой.

Оставьте комментарий

Войти с помощью: 
Denis Yuriev DMOZ Индекс цитирования

© 2017