Записки обо всём.
Установка OpenWrt из Trunk
Итак Trunk — это тестовая ветка, в которую практически ежедневно выкладываются самые свежие сборки прошивки (на момент написания статьи — это Barrier Breaker), однако их стабильность и работоспособность не гарантируется.
Сохранение репозиторияПрежде, чем преступить к установке, остановимся подробнее на одной очень важной особенности ветки trunk, которую необходимо иметь ввиду! А заключается она в том, что вместе со сборкой прошивки, которая обновляется едва ли не ежедневно, обновляется и репозиторий пакетов программного обеспечения для неё. Поэтому, установив сборку из trunk, мы рискуем буквально на следующий день остаться без совместимого с ней репозитория. Чтобы этого не произошло, НЕОБХОДИМО ВМЕСТЕ СО СБОРКОЙ САМОЙ ПРОШИВКИ СКАЧИВАТЬ И РЕПОЗИТОРИЙ ПАКЕТОВ К НЕЙ! Репозиторий можно разместить либо на локальном носителе роутера, либо, если есть такая возможность — на удалённом вэб-сервере. Я для этого использовал вэб-сервер, запущенный на другом роутере, тоже под управлением OpenWrt.Чтобы упростить процесс скачивания, я написал небольшой скриптик: nano openwrt-trunk-download
Сохраняем скрипт, делаем его исполняемым и переносим в подходящее место:
Если всё сделали правильно, то теперь мы можем скачать самую свежую сборку из trunk вместе с репозиторием одной командой:
Дожидаемся, пока процесс скачивания завершится и убеждаемся, что всё на своих местах:
ls -l /usr/local/openwrt-repository/snapshots/2013-10-15/ar71xx/
Теперь можем скачивать и прошивать OpenWrt уже со своего собственного хранилища:
в котором указываем путь к нашему репозиторию:
НастройкаДля возможности установки всех необходимых пакетов нам потребуется перенести корень (или /overlay) на внешний usb накопитель.Для этого устанавливаем необходимые пакеты:
Копируем систему (overlay) на флешку:
И настраиваем файлfstab. В версии Barrier Breaker используется новая утилита block, позволяющая создать файл fstab автоматически:
block detect > /etc/config/fstab
Затем открываем файл fstab:
и редактируем его в соответствии со своими потребностями:
Тут мы видим, что вместо опции device используется опция uuid для идентификации нашаго монтируемого раздела на внешнем накопителе. Чтобы узнать значение uuid нашего раздела, используем команду:
Тут /dev/sda1 — единственный раздел, который я создал на флешке. Раздел подкачки (swap) в данном случае я не использую.После перезагрузки проверяем, всё ли правильно примонтировалось:
Устранение проблемПо идее описанных выше действий должно быть достаточно для готовности системы к дальнейшему использованию. Однако, как уже говорилось выше, работоспособность ветки trunk не гарантирована и могут возникнуть некоторые проблемы.Так, например, у меня на момент написания статьи, в ревизии r38261, выявилось следующее:Во-первых, с ошибками устанавливаются модули ядра и не запускаются автоматически. Приходится вручную их запускать командой modprobe. Причём некоторые модули после этого автоматически загружаются после перезагрузки (kmod-usb-storage), а некоторые не хотят (kmod-video-uvc). Приходится прописывать их запуск в файле /etc/rc.local .А во-вторых, раздел на флешке никак не хотел монтироваться в /overlay, то есть не получалось перенести систему на флешку (extroot). Причем, если указать точку монтирования например /mnt/sda1 — то всё нормально монтировалось. Погуглив эту тему, я выяснил, что далеко не один с такой проблемой и что в некоторых ревизиях эта проблема периодически всплывает. На форуме OpenWrt было найдено решение этой проблемы: при запуске системы нужно выполнить:
Читайте также: Intel xeon d 1531
Файл сохраняем, делаем его исполняемым:
chmod +x /etc/init.d/extroot
И активируем его выполнение при запуске системы:
После перезагрузки получаем систему с полноценным рабочим extroot.
I switched from default firmware to OpenWrt for my: TP-Link TL-WR1043N/ND v1 and have the problem that I am not able to install any new packages.
What I did:
- Flash OpenWrt
- Installed Luci (no problem there)
And than when I try to install anything else I get:
The important thing seems to be : * xsystem: wget: vfork: Out of memory. And yep I did try reboot and ‘update’ several times.
But under Luci -> Software I can see:
And here is my DF output:
Please does anyone have any idea what could cause the issue? I know the solution could be using an external USB but I want to aviod this at all costs + I cannot imagine that this router would have space just for luci 🙂
В этой статье я попытаюсь рассказать, как прошить на роутер OpenWrt и установить туда cjdns. По правде говоря, изучение тонкостей этого дела отняло у меня много времени и нервов. В основном потому, что многое в OpenWrt недодокументировано, и приходилось многое искать по форумам и додумывать. Думаю, это как раз тот случай, когда лучшей документацией являются исходники. Так что эту статью я попытаюсь написать такой, какую я хотел бы прочитать в самом начале этого пути.
Среду для сборки OpenWRT можно скачать в 4-х вариантах.
- OpenWrt Image Builder — то же самое, но грузит уже откомпиленые пакеты и собирает из них образ.
- OpenWrt SDK — то же самое, но набор програм для кросскомпиляции уже собран и собирать образы оно уже не может. Предназначено для сборки отдельных пакетов.
- OpenWrt based Toolchain — уже откомпиленый набор програм для кросскомпиляции, выдраный из Openwrt Buildroot.
Последние три могут быть собраны из OpenWrt Buildroot.
Как уже было сказано выше, в SquashFS сжатие лучше, так что у нас есть больше шансов уместить все, что нужно, собрав прошивку самостоятельно, чем скачав готовый образ и доставив нужный пакет. Для тех, кто собирается ставить готовую минимальную прошивку, вот сборки от разработчиков. Они рассортированы по архитектурам (колонка target в списке поддерживаемого оборудования) и по типу памяти (nand и все остальные), названия файлов включают в себя название роутера. Прошивки, содержащие в названии «sysupgrade» предназначены для перепрошивки средствами уже установленной OpenWrt. Содержащие «factory» можно скормить вебформе заводской прошивки. Не перепутайте.
Приступим к сборке.
Внимание! Сборка не должна проводится от суперпользователя или в fakeroot.
Для начала загрузим buildroot. Здесь есть список веток и команд для их загрузки. Мы же будем собирать Attitude Adjustment stable:
Репозиториев с beta, beta2, rc1 и rc2, видимо, нету, а жаль, потому что пакет, собраный для stable на beta не стал, только ругнулся, что git commit id ядра не тот, который нужен (хотя верси совпадали).
Далее, следуя инструкции, добавляем в список мест, откуда будут грузится исходники «репозиторий» с cjdns.
Добавляем в файл feeds.conf строку
Далее, грузим исходники всех пакетов:
и настраиваем все, что нужно. 
Выбираем «Target System» (ту, которая указана в списке поддерживаемых устройств возле названия вашего роутера), Subtarget (если в роутере постоянная память не NAND, смело выбираем Generic), «Target Profile» (ищем название роутера, под который будем собирать). В «Target Images» обычно ничего менять не надо. Выбираем пробелом.
На данном этапе все нужные драйверы уже отмечены (благодаря «Target Profile»). Далее ходим по остальным веткам и выбираем нужные нам пекеты (Именно нам. По идее, и так работать будет). Поиска здесь не предусмотрено, так что искать будем так:
Благо, большинство пакетов рассортировано по разделам. Хотя они могут находится и в ./package и тогда вы их таким образом не найдете. В выводе видим ./feeds/packages/utils/nano, что значит, что nano нам нужно искать в разделе «Utilities». Для полной уверенности можно почитать makefile пакта. Для nano это ./feeds/packages/utils/nano/Makefile. В нем мы видим такой фрагмент:
Читайте также: Android ошибка при получении данных с сервера
«CATEGORY» — название раздела, «SUBMENU» — название подраздела. Кстати, такая запись может быть не одна. Дело в том, что из одного набора исходников может собиратся несколько разных пакетов.
UPD: Хабрапользователь klirichek подсказал, что поиск здесь таки есть. Чтобы войти в него, нужно в menuconfig нажать «/».
Получаем списочек объектов, название которых включает в себя введенный запрос, с полным описанием и расположением в меню.Итак, пакеты, которые нам могут понадобится.
- nano — чтобы не пришлось править конфиги с помощью vi или cat/echo
- htop — просмотрщик процесов
- iftop — програмка для отслеживания сетевой активности (кто, с кем, на какой порт, с какой скоростью)
- tcpdump — ну куда ж без него?
- kmod-usb-storage — модуль ядра для подключения внешних носителей памяти по usb
- kmod-usb-storage-extras — модуль ядра для подключения некоторых экзотических внешних носителей памяти по usb (например, кардридера)
- block-mount — набор скриптов для автоматического монтирования по /etc/fstab. Для автомонтирования файловых систем по конфигам в формате uci (об этом позже) хватит и mount из busybox, но swap автоматически без них не монтируется.
- swap-utils — необходим для монтирования swap
- Всевозможные драйверы файловых систем. Найти можно в «Kernel modules»->«Filesystems»
- shadow-groopadd, shadow-groupdel, shadow-groupmod, shadow-groups, shadow-passwd, shadow-su, shadow-useradd, shadow-userdel, shadow-usermod — набор утилит для управления пользователями и группами. Обычно можно обойтись и без них.
- ip,iw,iptables,ip6tables — для ручной настройки сети
- bind-dig — dns-клиент
Следует отметить, что все может и не поместится. В таком случае образ для роутера собран не будет, но пакеты соберутся. Пакет можно отметить и так, чтобы он собрался, но в образ не включался. Для этого нужно нажать клавишу m.
А теперь расскажу об одном баге, который мешает установке cjdns. В зависимостях cjdns есть пакет с чудным названием nacl. Он используется при сборке других пакетов, но при этом бинарный пакет из него не собирается. В то же время, он появляется и в зависимостях бинарного пакета cjdns. В результате, чтобы установить уже собранный пакет с cjdns, нужно перед этим установить не существующий в собранном виде пакет nacl.
Теперь, как его обойти. Открываем ./openwrt/feeds/cjdns/cjdns/Makefile в текстовом редакторе, находим этот фрагмент:
и убераем из «DEPENDS» «+nacl». Должно получится так:
Еще один нюанс. Чтобы после прошивки поднялась сеть, в прошивке должны быть конфиги настройки сети. Однако, для некоторых роутеров при сборке прошивки соответствующий конфиг не генерируется. В результате, роутер вроде-бы работает, но сеть не поднялась и мы получаем прекрасно работающий кирпич. Я, когда в первый раз собирал прошивку под свой tl-mr3220, столкнулся с этим и потом довольно долго искал нужный кабель и паял так называемый serial hack adapter, чтобы достучатся до железки. Теперь о формате конфигов. В OpenWrt используется самопальный собственный формат конфигов UCI, общий для всего. Насколько я понял, они потом преобразуются в нормальные. Он, как мне кажется, достаточно хорошо документирован, так что останавливатся на нем не буду. Скажу только, что хранятся они в папке /etc/config/. Чтобы добавить какие-то свои файлы, в том числе и конфиги, в прошивку, в папке с Buildroot нужно создать папку files и положить в нее нужные файлы. Например, тот же конфиг сети я положил в файл ./files/etc/config/network . Вот и сам конфиг для tl-mr3220 v1.2:
Его я извлек из прошивки, взятой с сайта OpenWrt и немножко подправил. Что значат поля _orig_ifname и _orig_bridge не спрашивайте, сам не знаю. Отмечу, что этот конфиг предусматривает, что роутер торчит в одну и ту же сеть всеми своими портами, а не, например, каким-то одним в интернет.
Теперь вернемся к cjdns. Чтобы пакет таки собрался, нужно его отметить в menuconfig: «Network»->»Routing and Redirection»->»cjdns».
Итак, настал торжественный момент:
После сборки файлы должны оказатся в ./bin, рассортированые по target-ам (пока он у нас один). К примеру, у меня собраные образы лежат в ./bin/ar71xx, а пакеты в ./bin/ar71xx/packages/. Теперь открываем архив ./bin/ar71xx/openwrt-ar71xx-generic-rootfs.tar.gz (или аналогичный для вашего target) и проверяем, действительно ли там есть конфиг сети.
Теперь можно прошивать. Как уже говорилось выше, openwrt-ar71xx-generic-tl-mr3220-v1-squashfs-factory.bin можно скормить вебморде заводской прошивки. Еще раз повторю уже стандартное предупреждение, встречаемое чуть ли не везде, где пишут о процесе прошивки: ни в коем случае не прошивайте по wi-fi!
Заходим по ssh, проверяем, сколько оперативной памяти свободно:
Проверяем целостность образа. На роутере считаем хеш файла образа:
и сверяем с хешем файла на компьютере.
Скрещиваем пальцы и прошиваем:
Если все прошло хорошо, роутер должен перезапустится. Заходим по ssh и с помощью passwd устанавливаем пароль root.
Существуют так же и другие способы прошивки, которые вариируются в зависимости от модели роутера. На части роутеров возможна прошивка с помощью загрузчика, есть и более хардкорные методы, предпологающие работу с паяльником.
Пакетный менеджер.
В OpenWrt в качестве пакетного менеджера используется opkg. Опции:
- update — Загрузить список пакетов в репозитории. Загружается он в /tmp/opkg-lists/snapshots, а в /tmp примонтирована tmpfs. Так что, после прерзагрузки для каких-либо действий с пакетами прийдется опять грузить список пакетов.
- upgrade — Начнем с того, что эта опция вам, скорей всего, не понадобится. Пакеты в репозиториях разработчиков меняются только в trunc. Если прописать другой репозиторий от другой версии, возможны казусы. Крайне не рекомендуется обновлять таким образом модули ядра (названия их пакетов начинаются на kmod-). Действия «обновить все под ряд» opkg не умеет вообще.
- install принимает название пакета, имя файла или url для скачивания:
- configure — Не совсем понятно, что делает. По видимому, еще раз выполняет конфигурационные скрипты пакета.
- remove — Удалить пакет.
- list — список пакетов.
- list-installed — список установленніх пакетов.
Читайте также: Cms для доски объявлений
Чтобы добавить репозиторий, находящийся в папке, нужно дописать
Отмечу, что подписывание пакетов, как в apt-get, не предусмотрено, как и забирание их по https. Насчет https, конечно, можно извернутся, но все упирается в неправильно подписаный сертификат на downloads.openwrt.org. Хотя, он не самоподписный, а значит, что, извернувшись вдвойне, может что-то получится.
Монтируем дополнителную память с флешки (если нужно).
Если не получилось, опять же, ставим нужные пакеты. Далее
Чтобы изменения вступили в силу, делаем
Монтируем swap.
Для этого нужно, чтобы в конфиге было нечто вроде этого:
Здесь все аналогично. По поводу выбора размера swap. Для linux на десктопах часто советуют делать swap немного больше, чем размер оперативной памяти, чтобы при переходе в «спящий режим» (или как там оно называется?) все, что есть в оперативной памяти, поместилось в swap. Согласитесь, для роутера «спящий режим» — это бред. Так что для них действует другое правило — выделяйте побольше. 512 MiB, думаю, хватит всегда и всем! Просмотреть обьем оперативной памяти и swap можно с помощью команды free. И не забываем про uci commit.
Cтавим cjdns (если он не поместился в squashfs).
Копируем пакет с помощью scp в /tmp на роутере и устанавливаем с помощью opkg. Далее создаем конфиг cjdns. На некоторых роутерах это может длится долго. Далее добавляем в конфиг ноды, раскомментирываем раздел ETHInterface и прописываем интерфейс br-lan вместо eth0.
Настраиваем wi-fi в режиме ad-hoc.
Открываем /etc/config/wireless и добамляем секцию вроде этой:
Опция «device» должна содержать название «устройства», обозначеного в секции «wifi-device». У меня она выглядит так:
Тут есть один нюанс. Не все роутеры умеют поднимать несколько беспроводных сетей с одного физического устройства. Так что если после uci commit wireless ; /etc/init.d/wireless restart одна из сетей не поднялась, то прийдется обойтись одной. Чтобы отключить одну из сетей, достаточно установить опцию disabled в 1. Теперь проверяем, не попала ли новосозданная сеть в bridge с нашей локальной сетью. Сначала определяем, какому интерфейсу какая сеть соответствует:
Если наш ad-hoc таки слинковался с локальной сетью, идем править /etc/config/network. Ищем секцию interface с опцией «type» установленой в «bridge» вроде этой:
Для этого случая нужно убрать из «_orig_ifname» «radio0.network1», а из «ifname» — «wlan0»
Теперь прописываем нужный интерфейс в конфиге cjdns. Секция ETHInterface, кстати, может выглядеть и так:
На десктопе такое работает, но на роутере, почему-то, с таким конфигом cjdroute падает. Так что, если у вас тоже это не работает, то прописываем что-то одно.
Создаем скрипт автозапуска.
Скрипты запуска должны лежать в папке /etc/init.d/ . Создаем файл /etc/init.d/cjdns :
Подробнее о стартовых скриптах в OpenWrt можно почитать здесь: wiki.openwrt.org/doc/techref/initscripts
Фух, вроде, все. Удачной прошивки, и да не прийдется вам после нее работать паяльником!
UPD: Разработчики cjdns в последнем коммите в сборочные скрипты потерли все файлы и в README.md оставили сообщение, что отныне надо пользоваться сборочными скриптами от сиэтловцев.
UPD2: Сиэтлский вариант пакета у меня не заработал.
- Они решили сделать конфиг в формате uci. Это, конечно, хорошо, но ихний конвертер конфигов json-uci, написанный на LUA, не находит всех нужных библиотек, при том, что они-то как раз имелись, но немного в другом месте. Их копирование и создание линков не помогло — теперь ругается на ошибки в библиотеках.
- Запустить cjdroute вручную тоже не удалось. Как потом оказалось, он собирался из ветки crashey.
- В ихнем init-скрипте вовсю используются фичи, которые пока есть только в trunc.
- Все это вместе занимает много памяти. Впрочем, уменьшение занимаемого объема памяти есть в их todo.
А дальше все так же, как было описано выше.
| Экран входа в OpenWrt 18.06.1 | |
| Разработчик | OpenWrt Project | 
|---|---|
| Семейство ОС | Unix-подобный | 
| Рабочее состояние | Текущий | 
| Исходная модель | Открытый источник | 
| Первый выпуск | Январь 2004 г . ( 2004-01 ) | 
| Последний релиз | 19.07.7 / 18 февраля 2021 ( 2021-02-18 ) | 
| Репозиторий |  | 
| Доступно в | 26 языков | 
| Метод обновления | opkg | 
| Менеджер пакетов | opkg | 
| Платформы | 23 платформы, использующие следующие наборы инструкций : AVR32 , ARM , CRIS , m68k , MIPS , PowerPC , SPARC , SuperH , Ubicom 32, x86 , x86-64 | 
| Тип ядра | Монолитный ( Linux ) | 
| Userland | BusyBox , GNU | 
| Пользовательский интерфейс по умолчанию | CLI , веб-интерфейсы | 
| Лицензия | Бесплатное программное обеспечение ( GPL и другие лицензии) | 
| Официальный веб-сайт | lede-project .org </wbr> | 
Linux Embedded Development Environment ( Lede проект) был вилка проекта OpenWRT и разделяет многие из тех же целей. Он был создан в мае 2016 года группой основных участников OpenWrt из-за разногласий по внутренним процессам OpenWrt. Номинально раскол был урегулирован год спустя, в мае 2017 года, в ожидании одобрения разработчиков LEDE. Повторное объединение сохраняет брендинг OpenWrt, но использует многие процессы и правила LEDE. Голосование за предложение о повторном объединении было проведено разработчиками LEDE в июне 2017 года и официально объявлено в январе 2018 года. Процесс объединения был завершен до выпуска OpenWRT 18.06.
| Версия | Дата выпуска | Номер ревизии | Заметки | 
|---|---|---|---|
| 17.01.0 | 22 февраля 2017 г. | r3205 | Первый стабильный выпуск | 
| 17.01.1 | 19 Апрель 2017 г. | r3316 | Ядро 4.4.61, исправления ошибок и улучшения | 
| 17.01.2 | 12 июн 2017 | секретные разделы r3435 | Ядро 4.4.71, исправления безопасности | 
| 17.01.3 | 3 октября 2017 г. | r3534 | Ядро 4.4.89, исправления безопасности | 
| 17.01.4 | 18 октября 2017 г. | r3560 | Ядро 4.4.92, исправления безопасности ( KRACK , насколько это возможно исправлениями на стороне сервера) | 
| 17.01.5 | 18 июля 2018 г. | r3919 | Ядро 4.4.140, исправления безопасности | 
| 17.01.6 | 3 сентября 2018 г. | r3979 | Ядро 4.4.153, исправления безопасности | 
Функции
OpenWrt имеет корневую файловую систему с возможностью записи, что позволяет пользователям изменять любой файл и легко устанавливать дополнительное программное обеспечение. Это отличается от других прошивок, основанных на файловых системах только для чтения, которые не позволяют изменять установленное программное обеспечение без перекомпоновки и прошивки полного образа прошивки. Это достигается путем наложения файловой системы SquashFS, сжатой только для чтения, на файловую систему JFFS2 с возможностью записи с помощью overlayfs . Дополнительное программное обеспечение можно установить с помощью диспетчера пакетов
opkg
, а репозиторий пакетов содержит около 6000 пакетов.
OpenWrt можно настроить через интерфейс командной строки или веб-интерфейс под названием LuCI. OpenWrt предоставляет набор скриптов, называемых UCI (унифицированный интерфейс конфигурации), для унификации и упрощения настройки через интерфейс командной строки. Также доступны дополнительные веб-интерфейсы, такие как Gargoyle .
OpenWrt предоставляет регулярные исправления ошибок и обновления безопасности даже для устройств, которые больше не поддерживаются их производителями.
OpenWrt предоставляет исчерпывающие возможности для настройки общих сетевых функций, таких как IPv4 , IPv6 , DNS , DHCP , маршрутизация , брандмауэр , NAT , переадресация портов и WPA .
Другие функции включают:
- Расширяемая конфигурация всех драйверов оборудования, например встроенных сетевых коммутаторов и их возможностей VLAN , WNIC , модемов DSL , FX , доступных аппаратных кнопок и т. Д.
- Ячеистая сеть через BATMAN , OLSR и IEEE 802.11s — возможности драйверов WNIC и других специальных протоколов ячеистой маршрутизации, реализованных в Linux.
-  Беспроводная функциональность, например, заставить устройство работать как   беспроводной ретранслятор   ,   точка беспроводного доступа   ,   беспроводной мост   ,
перехватывающий портал или их комбинация, например, с ChilliSpot , WiFiDog Captive Portal и т. Д. 
- Безопасность беспроводной сети: внедрение пакетов , например, Airpwn , lorcon , ea.
- Динамически настраиваемые протоколы переадресации портов UPnP и NAT-PMP через upnpd и т. Д.
- Стук порта
-  Клиент
TR-069 (CWMP) 
- IPS через Snort
-  Активное управление очередью   (AQM) через   сетевой планировщик   ядра Linux с множеством доступных   дисциплин организации очередей   .   CoDel   был
перенесен на ядро 3.3. Это инкапсулирует формирование трафика, чтобы обеспечить справедливое распределение полосы пропускания между несколькими пользователями и качество обслуживания (QoS) для одновременного использования таких приложений, как VoIP , онлайн-игры и потоковая передача мультимедиа, без негативного воздействия насыщения каналов. 
-  Балансировка нагрузки для использования с несколькими   интернет-провайдерами   с использованием
маршрутизации, зависящей от источника 
- IP-туннелирование ( GRE , OpenVPN, псевдопровод и т. Д.)
- Расширяемый мониторинг сети и статистика в реальном времени с помощью, например, RRDtool , Collectd , Nagios , Munin lite , Zabbix и т. Д.
-  Службы
динамического DNS для поддержки фиксированного доменного имени с провайдером , который не предоставляет статический IP-адрес. 
-  OpenWrt поддерживает любое оборудование с поддержкой Linux;  устройства, которые могут быть подключены (например, через   USB   ), включаютРекомендацииВнешние ссылкиВикискладе есть медиафайлы по теме OpenWrt . - Загрузки OpenWrt
- Списки рассылки OpenWrt
- Проект LuCI
- Саммит OpenWrt
- prpl Foundation (некоммерческий фонд, основанный Imagination Technologies для поддержки платформы MIPS)
- Центр кода GPL в Linksys
 
Электроника для начинающих*, DIY или Сделай Сам
- решение легко переносимо на другие платформы: я не проверял, но в теории это можно воткнуть в любой «ASUS» или «D-Link», мирно раздающий инет из своего угла (если у него есть USB) — и будет работать;
- роутер при этом можно использовать по прямому назначению;
- не требуется разборки роутера и вмешательства в его схему (а TL-MR3020, кстати, нелегко разобрать);
- не тебуется программирования (если не считать программой небольшой шелл-скрипт) и компиляции;
- все компоненты можно приобрести в компьютерном магазине (это если просто «помигать светодиодом», для реального управления придется купить пару доступных радиокомпонентов), при этом общие затраты составят менее 1500 рублей.
Ставим OpenWRT и настраиваем сетевой интерфейс
Для этого шага понадобится, собственно, роутер. Мой мне обошелся в 850р.Страница модели на openwrt.org дает исчерпывающие инструкции по перепрошивке и разрешает нам пользоваться снэпшотом транка. Сам же робко предложу взять бету Attitude Adjustment 12.09. Тем более, что на момент публикации снэпшоты недоступны на сайте openwrt, а A.A.12.09 наконец-то выложили.Установка состоит из нескольких элементарных операций:Для установки дополнительных пакетов нужен доступ к репозиторию через интернет, что требует его конфигурации как клиента локальной сети.Например:
Подключение клавиатуры и проверка управления светодиодами
Сайт H-WRT информирует нас, что для установки клавиатуры нужен лишь модуль kmod-usb-hid.Установим его:
opkg update opkg install kmod-usb-hid Самое время подключить клавиатуру и посмотреть, опозналась ли она:
root@OpenWrt:~# dmesg | tail [   66.380000] hub 1-0:1.0: connect-debounce failed, port 1 disabled [   68.780000] hub 1-0:1.0: connect-debounce failed, port 1 disabled [   71.180000] hub 1-0:1.0: connect-debounce failed, port 1 disabled root@OpenWrt:~#  Облом! это совсем не то, что я ожидал. В чем же дело?Схожий багрепорт быстро находится — разработчики объясняют такое поведение аппаратными ограничениями примененного чипсета. Похоже, находящийся «на борту» USB-хаб не жалует low-speed устройства. Хотя на этом моменте дух Дзен бесследно испарился — не будем опускать руки и попробуем решить проблему подключением клавиатуры через внешний USB-хаб:
root@OpenWrt:~# dmesg | tail [  143.120000] usb 1-1: new high-speed USB device number 2 using ehci-platform [  143.270000] hub 1-1:1.0: USB hub found [  143.270000] hub 1-1:1.0: 4 ports detected [  143.580000] usb 1-1.2: new low-speed USB device number 3 using ehci-platform [  143.730000] input: Generic USB Keyboard as /devices/platform/ehci-platform/usb1/1-1/1-1.2/1-1.2:1.0/input/input0 [  143.730000] generic-usb 0003:040B:2000.0001: input: USB HID v1.10 Keyboard [Generic USB Keyboard] on usb-ehci-platform-1.2/input0 [  143.770000] input: Generic USB Keyboard as /devices/platform/ehci-platform/usb1/1-1/1-1.2/1-1.2:1.1/input/input1 [  143.780000] generic-usb 0003:040B:2000.0002: input: USB HID v1.10 Mouse [Generic USB Keyboard] on usb-ehci-platform-1.2/input1 root@OpenWrt Гораздо лучше. Пускай из-за этого пришлось написать «почти получилось» в начале статьи и «способ сервировки» на фото, но так наша «Generic USB Keyboard» опозналась. На клавиатуру всегда создается два «устройства», но даже и не спрашивайте, почему эта конкретная клавиатура назвалась еще и мышью… Так или иначе — мы готовы к «аппаратному хеллоуворлду» — включить светодиод.
cat /dev/input/event0 > /dev/null & printf "x00x00x00x00x00x00x00x00x00x11x00x01x00x00x00x01" > /dev/input/event0 Здесь должен торжественно зажечься светодиод «Caps Lock». Те, кого просто радует этот факт — могут переходить к следующему шагу. Те, кто не может двинуться дальше, не узнав, что за бредовое заклинание приведено выше — заглядывают всумбурные пояснения:
Скрипт
Чтобы автоматизировать управление светодиодами нам нужен скрипт. Для того, чтобы на следующем шаге мигать ими по HTTP — сразу положим его в папку /www/cgi-bin:
cd /www mkdir cgi-bin cd cgi-bin wget http://etherelay.googlecode.com/files/ctlrelay chmod +x ctlrelay Вот его текст и описание:Теперь управлять светодиодами легко. Чтобы включить, скажем, светодиод «Scroll Lock», пишем:
./ctlrelay scroll_on Выключаем:
./ctlrelay scroll_off Можно еще «мигнуть» (scroll_pulse). Как говорит уже многими здесь уважаемый Anant Agarwal: «I could do this all day. This is so much fun!». Но все же, перейдем к следующему этапу и создадим…
Веб-интерфейс
Какой же веб-интерфейс без веб-сервера? Проверим его наличие:
opkg status uhttpd Если в выводе есть строка Status: install user installed (а это будет так, если вы используете Attitude Adjustment 12.09 beta) то сервер уже установлен. Иначе установим его и настроим его запуск:
opkg update opkg install uhttpd /etc/init.d/uhttpd enable /etc/init.d/uhttpd start Дальше нам нужна веб-страница:Маленький нюанс — браузер, конечно, не имеет доступа к папке /var на сервере, поэтому предоставим ему возможность прочитать файл ledstate оттуда, куда он «дотягивается», с помощью симлинка:
ln -s /var/ledstate /www/ledstate Ссылку на скачивание этой странички, немного измененной, можно найти почти в самом в конце статьи. Теперь можно мигать светодиодами клавиатуры, тыкая в чекбоксы. Но, даже не учитывая того, что мигающим светодиодом сейчас никого не удивить, придется согласиться с тем, что это абсолютно бесполезно с практической точки зрения. Поэтому примемся за железо!
Схема
Уже можно разобрать клавиатуру и вытащить из нее плату:







Косметика и демонстрация
От HTML — интерфейса за километр несет ботанщиной, байковыми рубашками с катышками и макаронами из стеклянной банки:
- Так как художественные способности у меня на нуле, а вкус где то рядом с ними — идею я стырил отсюдая почерпнул вдохновение (и немного css) здесь: http://www.seanslinsky.com/demo/ios-toggle-switches/.
- С помощью генератора градиентов mudcu.be/bg сделал нескучные обоизадник.
- Генератор «клевых тумблерков» proto.io/freebies/onoff/ создает кнопки, которые работают почти во всех браузерах — даже в Опере, если сделать их квадратными, и даже в IE, если он >=9.
- Так как на разных системах по разному работает увеличение — делаем кнопки масштаба внутри страницыdavidwalsh.name/change-text-size-onclick-with-javascript
CSS не имеет смысла приводить, потому что на 90% сгенерирован автоматически, а HTML — на 90% повтор вышеприведенного. Поэтому просто пишу как из скачать:
cd /www mkdir luci mv index.html luci wget http://etherelay.googlecode.com/files/index.html wget http://etherelay.googlecode.com/files/style.css Вторая и третья строчка «перепрятывают» файл веб-интерфейса роутера (если он установлен) в отдельную папку, теперь он доступен по адресу _адрес_роутера_/luci. А «главной» страничкой, доступной по адресу сервера, становится наша.Ну и, напоследок — говорят, что картинка стоит тысячи слов. В этом видео почти тысяча картинок. Надеюсь, оно хоть как-то уравновесит мою многословность.Update: подсказал, как добавить авторизацию на веб-сервер (например, с логином wizard и паролем lumos ):
uci set uhttpd.main.config=/etc/httpd.conf uci commit uhttpd echo "/:wizard:lumos" > $(uci get uhttpd.main.config) /etc/init.d/uhttpd restart Взято: http://habrahabr.ru/post/151982/Используемые источники:
- https://web-shpargalka.ru/http-downloads-openwrt-org-snapshots-trunk.php
- https://ru.xcv.wiki/wiki/openwrt
- http://blog.ritm18.ru/2013/08/http-c-openwrt.html

 Шнуры для передачи данных USB, USB 2.0, USB 3.0
Шнуры для передачи данных USB, USB 2.0, USB 3.0 Настройка Xiaomi Mi WiFi Router 4 и прошивка Wi-Fi роутера на русском языке
Настройка Xiaomi Mi WiFi Router 4 и прошивка Wi-Fi роутера на русском языке Маленькие секреты сетевых утилит. Интерпретируем вывод ping, traceroute и whois для отладки
Маленькие секреты сетевых утилит. Интерпретируем вывод ping, traceroute и whois для отладки






 Загрузка...
 Загрузка... 
							
							
						 Как подключить телефон Андроид к компьютеру через USB или Wi-FI?
Как подключить телефон Андроид к компьютеру через USB или Wi-FI? Использование и особенности стандарта USB 3.0
Использование и особенности стандарта USB 3.0 Как подключить смартфон на Android к домашней LAN-сети через кабель: пошаговая инструкция
Как подключить смартфон на Android к домашней LAN-сети через кабель: пошаговая инструкция Не заходит на 192.168.31.1 и miwifi.com. Не открываются настройки роутера Xiaomi
Не заходит на 192.168.31.1 и miwifi.com. Не открываются настройки роутера Xiaomi