Во-первых меня уже долгое время напрягал тот факт, что доступно уже давно ядро версии 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 и соберу себе ту прошивку, которая нужна конкретно мне.
Во-вторых вытекает сразу из первого — кривая поддержка 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
1. Устанавливаем Subversion
denis@denis-pc:~$ sudo apt-get install subversion |
2. Так же в ходе получения исходников пакетов и патчей нам понадобится пакет git
denis@denis-pc:~$ sudo apt-get install git |
3. Получаем исходники OpenWRT
Стабильная версия с версией ядра 2.6.*:
Стабильная версия с версией ядра 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
Получив исходники, переходим в каталог, где они лежат:
Получив исходники, переходим в каталог, где они лежат:
cd ~ /openwrt |
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. Если всё необходимое установлено, то мы увидим следующую картину:
Примечание: в данном конфигураторе сборки прошивки используются стандартные для linux-систем условные обозначения:
< >
— отключено<M>
— включено, компиляция модулем. (В случае OpenWRT — отдельным *.ipk — файлов, для доустановки после прошивки)<*>
— включено, пакет будет «запакован» в прошивку
Первым делом указываем тип процессора.
У DLink DIR-320 rev. A1 это Broadcom BCM5354KFBG, он же BCM95354
Итак открываем TargetSystem и там выбираем Broadcom BCM947xx/953xx.
У DLink DIR-320 rev. A1 это Broadcom BCM5354KFBG, он же BCM95354
Итак открываем TargetSystem и там выбираем Broadcom BCM947xx/953xx.
7. Компиляция пакетов для сборки прошивки.
Это пункт необязательный, но настаиваю на его выполнении.
Дело в том, что если вы пропустите сборку пакетов для компиляции прошивки OpenWRT, то она произойдет при первой компиляции самой прошивки.
Однако потом будет труднее выявить ошибку — что не хочет собираться, инструменты для компиляции или сама прошивка.
Внимание: чтобы потом не пересобирать эти инструменты — убедитесь, что в предыдущем пункте правильно выбрали тип процессора устройства.
Это пункт необязательный, но настаиваю на его выполнении.
Дело в том, что если вы пропустите сборку пакетов для компиляции прошивки OpenWRT, то она произойдет при первой компиляции самой прошивки.
Однако потом будет труднее выявить ошибку — что не хочет собираться, инструменты для компиляции или сама прошивка.
Внимание: чтобы потом не пересобирать эти инструменты — убедитесь, что в предыдущем пункте правильно выбрали тип процессора устройства.
make tools /install && make toolchain /install |
Команда выполняется достаточно долго, есть время попить чай или прибраться в комнате
Настройка пакетов и модулей ядра OpenWRT
Выполним команду:
make menuconfig |
В итоге в терминале вы увидите снова псевдографическое меню для настройки сборки OpenWRT с уже выбранным процессором.
Теперь выбираем профиль Target Profile и там выбираем Broadcom SoC, b44 Ethernet, BCM43xx WiFi (b43, default) — это позволит сэкономить пару десятков килобайт в размере нашей будущей прошивки, исключив ненужные драйвера ethernet-контролеров.
Теперь подключаем модули ядра.
Для этого открываем пункт в главном меню Kernel modules
Для этого открываем пункт в главном меню Kernel modules
Для начала надо настроить модуль поддержки WiFi нашего устройства — kmod-b43
Для этого выбираем пункт Wireless Drivers
Для этого выбираем пункт Wireless Drivers
В открывшемся меню отключаем ненужный в нашем случае модуль kmod-b43legacy и переходим к настройке модуля 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.
В итоге должна получиться примерно следующая картина:
Для этого выпоняем следующие действия:
Значение параметра 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.
В итоге должна получиться примерно следующая картина:
Теперь выбираем раздел USB support для подключения поддержки USB-устройств
Я буду подключать только внешний USB-диск, для этого я выбираю
kmod-usb-core — поддержка спецификации USB ядром
kmod-usb-brcm47xx — поддержка USB-устройств процессором маршрутизатора
kmod-usb2 — поддержка USB версии 2.0
kmod-ohci — поддержка USB-хабов
kmod-usb-storage — поддержка USB-дисков
kmod-usb-core — поддержка спецификации USB ядром
kmod-usb-brcm47xx — поддержка USB-устройств процессором маршрутизатора
kmod-usb2 — поддержка USB версии 2.0
kmod-ohci — поддержка USB-хабов
kmod-usb-storage — поддержка USB-дисков
Подключим нужные нам модули поддержки файловых систем.
В списке категорий подключаемых модулей ядра выберем раздел Filesystems
В списке категорий подключаемых модулей ядра выберем раздел Filesystems
И выберем модуль ядра kmod-fs-ext4. Этот модуль обеспечит поддержку файловых систем ext2, ext3 и ext4. Его необходимо выбрать, если планируете устанавливатьSamba-сервер или торрент-клиент Transmission, ну или любые пакеты.
Так же, если вам критична поддержка других файловых систем, то вы можете выбратьkmod-fs-ntfs для поддержки NTFS или kmod-fs-vfat для поддержки файловой системыFAT32.
Так же, если вам критична поддержка других файловых систем, то вы можете выбратьkmod-fs-ntfs для поддержки NTFS или kmod-fs-vfat для поддержки файловой системыFAT32.
Теперь настало время подключить поддержку zRam.
Напомню, этот модуль я хочу использовать для экономии оперативной памяти маршрутизатора путем монтирования в виртуальное сжатое блочное устройство раздела подкачки swap.
Для автоматизации этого процесса в OpenWRT уже есть готовый скрипт zram-swap. Включив его в состав прошивки вы автоматизируете весь этот процесс.
Для этого выбираем в главном меню конфигуратора прошивки пункт Base system
Напомню, этот модуль я хочу использовать для экономии оперативной памяти маршрутизатора путем монтирования в виртуальное сжатое блочное устройство раздела подкачки swap.
Для автоматизации этого процесса в OpenWRT уже есть готовый скрипт zram-swap. Включив его в состав прошивки вы автоматизируете весь этот процесс.
Для этого выбираем в главном меню конфигуратора прошивки пункт Base system
И в конце открывшегося списка отмечаем для установки zram-swap
Скорее всего это лишь частично решит проблему с нехваткой памяти, так что без раздела подкачки на внешнем устройстве нам не обойтись. Но для этого необходимо будет монтировать его с пониженным приоритетом, чтобы маршрутизатор старался использовать максимально swap в виртуальном устройстве zram
Для этого нам необходимо не забыть включить подключение раздела подкачки с указанием приоритета.
Там же в Base system ищем пакет busybox и выбираем его нажатием клавишей Enter:
Для этого нам необходимо не забыть включить подключение раздела подкачки с указанием приоритета.
Там же в Base system ищем пакет busybox и выбираем его нажатием клавишей Enter:
Откроется конфигурация пакета busybox, котором выберем раздел Linux System Utilities
и в нём включим поддержку swaponoff, а так же приоритет для разделов подкачкиSupport priority option -p
Для удобного монтирования разделов на подключаемых носителях нам так же понадобится пакет block-mount, который можно включить в состав нашей будущей прошивки в всё том же разделе Base system
Теперь остается подключить web-интерфейс LuCI. Сразу же скажу, что данный веб-интерфейс намного лучше продуман разработчиками, нежели веб-интерфейс DD-WRT.
Итак, возвращаемся в главное меню конфигуратора OpenWRT и выбираем пункт LuCI
Итак, возвращаемся в главное меню конфигуратора OpenWRT и выбираем пункт LuCI
Выбираем первый пункт Collections и в открывшемся меню выбираем luci
Если Вы испытываете проблемы с английским языком, или же просто хотите видеть родной язык в Web-интерфейсе, тогда выбирайте пятый пункт в настройках пакета LuCI— Translations
Там вы сможете выбрать как русский (luci-i18n-russian), так и украинский (luci-i18n-ukrainian) языки
Там вы сможете выбрать как русский (luci-i18n-russian), так и украинский (luci-i18n-ukrainian) языки
На этом конфигурацию прошивки можно закончить. Выходим из конфигуратора, соглашаемся с предложением сохранить новую конфигурацию.
Компиляция прошивки OpenWRT
Приступаем к самой сборке
make -j4 V=s |
Параметр -j4 указывает во сколько потоков выполнять сборку для ускорения процесса. Укажите на один поток больше, чем количество ядер вашего процессора. Если же у вас процессор с поддержкой Hyper-threading, то укажите равное количеству виртуальных ядер (потоков).
Готовый файл прошивки будет носить имя openwrt-brcm47xx-squashfs.trx и найдете его в папке bin в каталоге с исходниками прошивки
Процесс компиляции исходников занимает, в зависимости от вычислительных способностей вашего компьютера, от 20 минут до нескольких часов.
Готовый файл прошивки будет носить имя openwrt-brcm47xx-squashfs.trx и найдете его в папке bin в каталоге с исходниками прошивки
Процесс компиляции исходников занимает, в зависимости от вычислительных способностей вашего компьютера, от 20 минут до нескольких часов.
Устанавливаем на DIR-320 прошивку OpenWRT
В итоге в каталоге с исходниками появится папка bin/brcm47xx (если вы собирали для маршрутизатора с процессором серии brcm47xx)
В папке будет куча готовых прошивок. Для DIR-320 файл прошивки называется openwrt-brcm47xx-squashfs.trx
Если Вы ранее не пользовались альтернативными прошивками и впервые будете прошивать своё устройство, то процесс точно такой же, как установка прошивки DD-WRT на DIR-320.
Если же у Вас уже установлена прошивка DD-WRT, то можете смело обновляться через веб-интерфейс, только не забудьте указать, что необходимо сбросить настройки на заводские.
В папке будет куча готовых прошивок. Для DIR-320 файл прошивки называется openwrt-brcm47xx-squashfs.trx
Если Вы ранее не пользовались альтернативными прошивками и впервые будете прошивать своё устройство, то процесс точно такой же, как установка прошивки DD-WRT на DIR-320.
Если же у Вас уже установлена прошивка DD-WRT, то можете смело обновляться через веб-интерфейс, только не забудьте указать, что необходимо сбросить настройки на заводские.
Первый взгляд на OpenWRT
Как только все установится по адресу 192.168.1.1 будет доступен веб-интерфейсOpenWRT LuCI, который сразу же предложит установить пароль пользователю root. Указываем пароль, и перед нами во всей своей красе предстает веб-интерфейс. Вот небольшой его кусок.
Как Вы можете заметить, файл подкачки в zram сразу же подхватился и его объем равен половине памяти устройства. Ну что ж, цель достигнута.
PS
Статью я эту писал параллельно с экспериментами не менее недели. Главной проблемой был ограниченный объем энергонезависимой памяти устройства и желание запихать необходимый минимум «инструментов» в те самые 3.69 Mb, доступные для прошивки. Моя прошивка в итоге имеет объем 3.63 Mb. И это еще при оставленной поддержки ipv6, выпиливать которую не так и сложно, но рассмотрю этот момент в следующей статье.
В следующих статьях рассмотрю возможности новой для меня прошивки и протестирую, дает ли пользу использование zRam.
Оставайтесь на связи.
Оставайтесь на связи.
Комментариев нет:
Отправить комментарий