Во-первых меня уже долгое время напрягал тот факт, что доступно уже давно ядро версии 3.*, а в
dd-wrt для моего устройства (
Dlink DIR-320) до сих пор ядро версии 2.4.
Во-вторых вытекает сразу из первого — кривая поддержка
ntfs, до сих пор ничего не ясно с поддержкой
ext4 ну и еще куча всего странного и непонятного
В-третьих недавно я Вам рассказал про модуль для ядра Linux —
zRam, загорелся таким вот способом несколько решить проблему с нехваткой оперативной памяти в DD-WRT и как думаете что произошло? Конечно же, для DD-WRT этого модуля в принципе не существует.
UPD 05.10.2013: с момента написания статьи изменилась немного логика первых этапов сборки прошивки. Внес необходимые изменения, исправил недочеты.
Порывшись в инете я узнал, что в
OpenWRT уже есть возможность использовать
zRam, собрать прошивку для
Dlink DIR320 с ядром третьей версии.
Возможно просто всё это не документировано касательно
DD-WRT, но изобретать велосипед у меня времени особо нет. Воспользуюсь доступной в обилии на многих языках документацией по
OpenWRT и соберу себе ту прошивку, которая нужна конкретно мне.
Сборка OpenWRT
Для сборки первым делом понадобится операционная система семейства Linux. В моем случае это Ubuntu Linux 13.04 64bit.
Подготовка к установке — получение исходных кодов OpenWRT и необходимых пакетов
Итак, приступим.
1. Устанавливаем Subversion
denis@denis-pc:~$ sudo apt-get install subversion
|
2. Так же в ходе получения исходников пакетов и патчей нам понадобится пакет git
denis@denis-pc:~$ sudo apt-get install git
|
3. Получаем исходники OpenWRT
Стабильная версия с версией ядра 2.6.*:
denis@denis-pc:~$ svn co svn: //svn .openwrt.org /openwrt/branches/backfire openwrt
|
Стабильная версия с версией ядра 3.*
denis@denis-pc:~$ svn co svn: //svn .openwrt.org /openwrt/branches/attitude_adjustment openwrt
|
Тестовая версия:
denis@denis-pc:~$ svn co svn: //svn .openwrt.org /openwrt/trunk/ openwrt
|
Я выбрал последний вариант, так как там доступен модуль zRam
Получив исходники, переходим в каталог, где они лежат:
4. Теперь надо еще получить пакеты и патчи, доступные для сборки:
. /scripts/feeds update -a
. /scripts/feeds install -a
|
5. Доустанавливаем необходимые для сборки пакеты. Для этого проверяем чего еще не хватает:
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++' ... failed.
Checking 'ncurses' ... failed.
Checking 'zlib' ... failed.
Checking 'gawk' ... failed.
Checking 'unzip' ... ok.
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.
|
В моем случае:
sudo apt-get install g++ libncurses5-dev zlib1g-dev gawk
|
Примечание: очень часто неопытные пользователи при компиляции не могут найти откуда устанавливать пакет ncurses (ncurses-dev, ncurses-devel и т.д.), который требует команда make — решение проблемы в установке пакета libncurses5-dev
6. Если всё необходимое установлено, то мы увидим следующую картину:
Псевдографическое меню конфигурирование пакетов и модулей ядра прошивки OpenWRT
Примечание: в данном конфигураторе сборки прошивки используются стандартные для linux-систем условные обозначения:
< >
— отключено
<M>
— включено, компиляция модулем. (В случае OpenWRT — отдельным *.ipk — файлов, для доустановки после прошивки)
<*>
— включено, пакет будет «запакован» в прошивку
Первым делом указываем тип процессора.
У DLink DIR-320 rev. A1 это Broadcom BCM5354KFBG, он же BCM95354
Итак открываем TargetSystem и там выбираем Broadcom BCM947xx/953xx.
Выбираем тип процессора при сборке OpenWRT — Broadcom BCM947xx/953xx
7. Компиляция пакетов для сборки прошивки.
Это пункт необязательный, но настаиваю на его выполнении.
Дело в том, что если вы пропустите сборку пакетов для компиляции прошивки OpenWRT, то она произойдет при первой компиляции самой прошивки.
Однако потом будет труднее выявить ошибку — что не хочет собираться, инструменты для компиляции или сама прошивка.
Внимание: чтобы потом не пересобирать эти инструменты — убедитесь, что в предыдущем пункте правильно выбрали тип процессора устройства.
make tools /install && make toolchain /install
|
Команда выполняется достаточно долго, есть время попить чай или прибраться в комнате
Настройка пакетов и модулей ядра OpenWRT
Выполним команду:
В итоге в терминале вы увидите снова псевдографическое меню для настройки сборки OpenWRT с уже выбранным процессором.
Теперь выбираем профиль Target Profile и там выбираем Broadcom SoC, b44 Ethernet, BCM43xx WiFi (b43, default) — это позволит сэкономить пару десятков килобайт в размере нашей будущей прошивки, исключив ненужные драйвера ethernet-контролеров.
Выбираем профиль для нашего устройства DLink DIR-320 rev. A1/A2 —
Broadcom SoC, b44 Ethernet, BCM43xx WiFi (b43, default)
Теперь подключаем модули ядра.
Для этого открываем пункт в главном меню Kernel modules
Выбираем пункт Kernel Modules в главном меню конфигурации сборки прошивки OpenWRT
Для начала надо настроить модуль поддержки WiFi нашего устройства — kmod-b43
Для этого выбираем пункт Wireless Drivers
Выбор пункта Wireless Drivers
В открывшемся меню отключаем ненужный в нашем случае модуль kmod-b43legacy и переходим к настройке модуля kmod-b43
Отключаем модуль kmod-b43legancy и переходим к настройке модуля 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 для маршрутизатора DLink DIR-320 rev. A1/A2
Теперь выбираем раздел USB support для подключения поддержки USB-устройств
Выбираем раздел USB support для выбора модулей ядра OpenWRT, отвечающих за поддержку USB-устройств
Я буду подключать только внешний USB-диск, для этого я выбираю
kmod-usb-core — поддержка спецификации USB ядром
kmod-usb-brcm47xx — поддержка USB-устройств процессором маршрутизатора
kmod-usb2 — поддержка USB версии 2.0
kmod-ohci — поддержка USB-хабов
kmod-usb-storage — поддержка USB-дисков
Выбираем необходимые нам модули ядра OpenWRT для поддержки USB-носителей
Подключим нужные нам модули поддержки файловых систем.
В списке категорий подключаемых модулей ядра выберем раздел Filesystems
Подключение поддержки файловых систем в OpenWRT
И выберем модуль ядра kmod-fs-ext4. Этот модуль обеспечит поддержку файловых систем ext2, ext3 и ext4. Его необходимо выбрать, если планируете устанавливатьSamba-сервер или торрент-клиент Transmission, ну или любые пакеты.
Так же, если вам критична поддержка других файловых систем, то вы можете выбратьkmod-fs-ntfs для поддержки NTFS или kmod-fs-vfat для поддержки файловой системыFAT32.
Включение модуля ядра kmod-fs-ext4 для поддержки файловых систем ext2, ext3 и ext4 вOpenWRT
Теперь настало время подключить поддержку zRam.
Напомню, этот модуль я хочу использовать для экономии оперативной памяти маршрутизатора путем монтирования в виртуальное сжатое блочное устройство раздела подкачки swap.
Для автоматизации этого процесса в OpenWRT уже есть готовый скрипт zram-swap. Включив его в состав прошивки вы автоматизируете весь этот процесс.
Для этого выбираем в главном меню конфигуратора прошивки пункт Base system
Выбираем пункт Base system в главном меню конфигурации сборки прошивки OpenWRT
И в конце открывшегося списка отмечаем для установки zram-swap
Выбираем компонент zram-swap
Скорее всего это лишь частично решит проблему с нехваткой памяти, так что без раздела подкачки на внешнем устройстве нам не обойтись. Но для этого необходимо будет монтировать его с пониженным приоритетом, чтобы маршрутизатор старался использовать максимально swap в виртуальном устройстве zram
Для этого нам необходимо не забыть включить подключение раздела подкачки с указанием приоритета.
Там же в Base system ищем пакет busybox и выбираем его нажатием клавишей Enter:
Выбор пакета Busybox
Откроется конфигурация пакета busybox, котором выберем раздел Linux System Utilities
Выбираем категорию Linux System Utilities
и в нём включим поддержку swaponoff, а так же приоритет для разделов подкачкиSupport priority option -p
Включаем поддержку команд swapon и swapoff и приоритет разделов подкачки
Для удобного монтирования разделов на подключаемых носителях нам так же понадобится пакет block-mount, который можно включить в состав нашей будущей прошивки в всё том же разделе Base system
Включаем пакет block-mount в состав прошивки OpenWRT
Теперь остается подключить web-интерфейс LuCI. Сразу же скажу, что данный веб-интерфейс намного лучше продуман разработчиками, нежели веб-интерфейс DD-WRT.
Итак, возвращаемся в главное меню конфигуратора OpenWRT и выбираем пункт LuCI
Включаем web-интерфейса LuCI в прошивку OpenWRT
Выбираем первый пункт Collections и в открывшемся меню выбираем luci
Включаем основную часть web-интерфейса
LuCI в состав прошивки
OpenWRT
Если Вы испытываете проблемы с английским языком, или же просто хотите видеть родной язык в Web-интерфейсе, тогда выбирайте пятый пункт в настройках пакета LuCI— Translations
Там вы сможете выбрать как русский (luci-i18n-russian), так и украинский (luci-i18n-ukrainian) языки
Добавление
русской локализации для веб-интерфейса
LuCI
На этом конфигурацию прошивки можно закончить. Выходим из конфигуратора, соглашаемся с предложением сохранить новую конфигурацию.
Компиляция прошивки 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. Указываем пароль, и перед нами во всей своей красе предстает веб-интерфейс. Вот небольшой его кусок.
Главная страница web-интерфейса LuCI прошивки OpenWRT
Как Вы можете заметить, файл подкачки в zram сразу же подхватился и его объем равен половине памяти устройства. Ну что ж, цель достигнута.
PS
Статью я эту писал параллельно с экспериментами не менее недели. Главной проблемой был ограниченный объем энергонезависимой памяти устройства и желание запихать необходимый минимум «инструментов» в те самые 3.69 Mb, доступные для прошивки. Моя прошивка в итоге имеет объем 3.63 Mb. И это еще при оставленной поддержки
ipv6, выпиливать которую не так и сложно, но рассмотрю этот момент в
следующей статье.
В следующих статьях рассмотрю возможности новой для меня прошивки и протестирую, дает ли пользу использование zRam.
Оставайтесь на связи.