Как прошить роутер на openwrt через tftp под linux
Последняя версия: OpenWrt 21.02.0
В данной теме необходимо размещать изображения и логи под спойлером
OpenWrt — встраиваемая операционная система, основанная на ядре Linux, и предназначенная, в первую очередь, для домашних маршрутизаторов. Основные компоненты включают в себя ядро Linux, util-linux, uClibc или musl и BusyBox. Исходный код открытый. Распространяется под лицензией GNU GPL
Проект LEDE разработан на основе линукса, встраиваемый мета-дистрибутив базирующийся на OpenWRT, ориентирован на широкий спектр беспроводных маршрутизаторов SOHO и не-сетевых устройств. “Linux Embedded Development Environment” (Встраиваемая среда разработки линукс).
LEDE отвернулся от материнского проекта в мае 2016 года, с целью продолжить разрабатывать лучшее программное обеспечение в открытой модели управления и поощрение новых разработчиков внести свой вклад и усилия в области развития.
- Данная тема предназначена для обсуждения настроек, процесса установки на ваш маршрутизатор и всего что связано с прошивкой OpenWrt/LEDE.
- В данной теме не обсуждают компиляцию из исходных кодов и пересборку, для этого есть тема Сборка OpenWrt/LEDE из исходных кодов
Настройка TFTP-сервера tftpd-hpa
Установим пакет tftpd-hpa:
содержащий настройки сервера. Приведём его к следующему виду:
TFTP_USERNAME="tftp"TFTP_DIRECTORY="/var/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--ipv4 --secure --create --umask 027 --permissive"
В настройках указаны дополнительные опции:
create разрешает серверу создавать новые файлы,
ipv4 предписывает ему ожидать подключений только на адресах IPv4,
umask предписывает сбрасывать бит записи для группы и все биты доступа для остальных пользователей,
permissive предписывает не проводить никаких проверок прав доступа к файлу сверх производимых операционной системой.
Создадим каталог для tftp-сервера, дадим серверу доступ к каталогу:
sudo mkdir /var/tftp
sudo chown tftp:tftp /var/tftp
Можно также поменять домашний каталог пользователя tftp в файле /etc/passwd на /var/tftp.
Теперь просто прописываем нужные нам ip адреса через gnome network manager и все.
Осталось перезапустить демона, чтобы он начал работу с новым каталогом:
Где найти прошивку для TP-Link TL-WR941N/ND v3.1
На данный момент
Мощность датчика на максимум. Перебрал все каналы. На телефон выдает почему то максимум 65.0 Mbit/s хотя он поддерживает 72 Mbit/s. Родная прошивка выдает ему всегда скорость 130. У DD-WRT тоже с этим проблемы!
Тем устройствам которым положено в режиме N на 40hz работать на всю катушку - присваивается ограниченная скорость. Пока что не могу понять в чем дело.
Убедитесь что в /etc/config/igmpproxy
config phyint
option network wan
option zone wan
option direction upstream
list altnet 192.168.0.0/16
list altnet 172.16.0.0/12
list altnet 10.0.0.0/8
config phyint
option network lan
option zone lan
option direction downstream
А в /etc/config/firewall
config rule
option name 'Allow-IPTV-IGMPPROXY'
option src 'wan'
option proto 'udp'
option dest_ip '224.0.0.0/4'
option target 'ACCEPT'
option family 'ipv4'
option dest 'lan'
config rule
option name 'Allow-IGMP'
option src 'wan'
option proto 'igmp'
option family 'ipv4'
option target 'ACCEPT'
Еще проблема может быть из-из появившейся поддержки IGMP snooping.
/etc/config/network
В разных темах замечал что люди интересовались как выключать wifi в OpenWrt в заданное время, собственно вот небольшая инструкция.
Есть два варианта.
Вариант 1 - через cron.
Для этого нужно перейти в Cистема -> Запланированные задания
И вписать нужную команду в это окно
Вариант 2 - через веб интерфейс.
Это вот такая штука
Но ее нужно установить. Интернет должен быть настроен, чтобы роутеру было откуда качать и устанавливать :)
Понадобятся пакеты: wifischedule, luci-app-wifischedule и luci-i18n-wifischedule-ru
Для установки из веб интерфейса идем в Cистема -> Программное обеспечение
Или через консоль, подключаемся по ssh и даем команды opkg update (обновляем список пакетов) и ставим opkg install luci-app-wifischedule (все остальные пакеты должны сами подтянуться, если не подтянутся, доустановите вручную opkg install wifischedule и opkg install luci luci-i18n-wifischedule-ru)
Вот и все :) Теперь можно переходить в Сервисы -> Wi-Fi планировщик и настраивать расписание работы WIFI
1) Подготовить USB-флешку. На флешке два раздела. Первый на 1 ГБ с файловой системой ext4. Второй — на всё оставшееся пространство тоже с файловой системой ext4.
2) Воткнуть флешку в роутер. Обновить список пакетов и установить необходимые:
opkg install kmod-usb-storage block-mount kmod-fs-ext4
4) Нажать Edit возле sda1, включить Enable this mount, в качестве Mount point выбрать /overlay. Точно так же включить автомонтирование sda2 в качестве /data
В /data можно закачивать торренты и т. п. Это просто раздел под ваши нужды. У меня туда статистика использования трафика собирается, например.
5) Скопировать содержимое /overlay на флешку. В терминале:
mount /dev/sda1 /tmp/extoverlay
tar -C /overlay -cvf - . | tar -C /tmp/extoverlay -xf -
umount /tmp/extoverlay
6) Перезагрузить роутер (если всё получилось, то на странице Software должно прибавиться количество свободного места)
Для любителей микрооптимизации: во-первых, читать это
Если желание оптимизировать ещё не пропало, можно заменить ext4 на F2FS (соответственно вместо kmod-fs-ext4 ставить kmod-fs-f2fs)
Если к использованию F2FS вы не готовы, а желание сэкономить ресурс флешки сильнее страха приключений на пятую точку, то:
— в п.1 после создания на флешке разделов выполнить в терминале:
sudo tune2fs -o journal_data_writeback /dev/sdb1
sudo tune2fs -O ^has_journal /dev/sdb1
sudo e2fsck -f /dev/sdb1
sudo umount /dev/sdb2
sudo tune2fs -o journal_data_writeback /dev/sdb2
sudo tune2fs -O ^has_journal /dev/sdb2
sudo e2fsck -f /dev/sdb2
— в п.4 на вкладке Advanced Settings для обоих разделов вписать в строчку Mount options:
Лично мне такие манипуляции с тюнингом грошовой флешки делать лень.
Настройка обхода блокировок в России и Украине Обход блокировок в России, направляем трафик до заблокированных сайтов через VPN
Предварительные требования:
— прошита OpenWrt 18.06
— установлен веб-интерфейс LuCi
— роутер имеет доступ в Интернет
Впрочем, будет работать и openvpn-openssl. Если вы используете что-то более ранее, чем OpenWrt 18.06, то жизненно необходимо установить openvpn-openssl вместо openvpn-mbedtls.
Отредактировать этот файл, дописав куда-нибудь в его середину строку:
config openvpn antizapret
option enabled 1
option config /etc/openvpn/antizapret-tcp.ovpn
(опять же, способ редактирования конфига оставлен на усмотрение читателя: одному удобно через vi, другому через тот же WinSCP). antizapret-tcp.ovpn — это файл, который вы на прошлом шаге копировали. Если его название изменилось, то, соответственно, исправьте его и тут в конфиге.
то необходимо открыть antizapret-tcp.ovpn текстовым редактором и добавить строкуизменить с 1 на 0
Плюсы:
— через VPN идёт лишь трафик до заблокированных доменов, остальной трафик идёт "напрямую" (нет потери скорости, у вас не меняется IP)
— следствие из предыдущего: трафик небольшой и поддержание бесплатного сервиса не бьёт по карману владельца
Предварительные требования:
— прошита OpenWrt 18.06
— установлен веб-интерфейс LuCi
— роутер имеет доступ в Интернет
Впрочем, будет работать и openvpn-openssl. Если вы используете что-то более ранее, чем OpenWrt 18.06, то жизненно необходимо установить openvpn-openssl вместо openvpn-mbedtls.
3) Заменить содержимое /etc/config/openvpn на:
config openvpn zaborona
option enabled 1
option config /etc/openvpn/zaborona-help.ovpn
(опять же, способ редактирования конфига оставлен на усмотрение читателя: одному удобно через vi, другому через тот же WinSCP). zaborona-help.ovpn — это файл, который вы на прошлом шаге копировали. Если его название изменилось, то, соответственно, исправьте его и тут в конфиге.
то необходимо открыть antizapret-tcp.ovpn текстовым редактором и добавить строкуПлюсы:
— через VPN идёт лишь трафик до заблокированных доменов, остальной трафик идёт "напрямую" (нет потери скорости, у вас не меняется IP)
— следствие из предыдущего: трафик небольшой и поддержание бесплатного сервиса не бьёт по карману владельца
Не забудьте перезапустить dnsmasq:
1) задать пароль администратора (через LuCI)
3) с помощью WinSCP подключиться со следующими параметрами:
Host name: 192.168.1.1
Login: root
Password: пароль_который_вы_установили_на_шаге_1
1) задать пароль администратора (через LuCI)
3) с помощью SFTP-плагина для TC/DC (этот плагин, вопреки своему названию, умеет работать и по SCP) подключиться со следующими параметрами:
Connect to: 192.168.1.1
User name: root
Password: пароль_который_вы_установили_на_шаге_1
Если вы создаёте или редактируете файл в Windows, а затем копируете его на роутер, то перед копированием убедитесь, что переносы строк в файле UNIX-овские, а не Windows-овские! Для этого достаточно открыть файл в Notepad++ и в статусной строке внизу справа найти "Unix (LF)". Если там "Windows (CR LF)", то щёлкните правой кнопкой по надписи, выберите "Unix (LF)" и сохраните файл. Всё это нужно повторять после каждого редактирования, поэтому сначала редактируете как душе угодно, а затем уже проверяете переносы и заливаете на роутер.
Openwrt - даже не прошивка, а операционная система linux для роутеров. Причин, для того, что бы ваш роутер был под управлением Openwrt много. Ведь перед вами хоть и урезанная, но система linux, с возможностью установки пакетов (приложений). Помните, перепрошивка роутера в openwrt лишает вас гарантии. Все действия, которые вы выполняете со своим роутером - вы делаете на свой страх и риск.
В первом повествовании не будем вдаваться во многие тонкости. Рассмотрим, как прошить роутер и настроить сеть через веб-интерфейс на примере TP-Link TL-WR740N v.5.
Установка и настройка Openwrt
Шаг 1. Подготовка и прошивка
И так, первый шаг: заходим в админку роутера, смотрим модель и версию:
Переходим на страницу нашего устройства, смотрим версию устройства и качаем ту прошивку, в которой присутствует слово factory. Прошивка Sysupgrade нужна для обновления уже установленной системы:
Скачали, в веб интерфейсе нашего устройства нажмите выберите файл. Выбираем то, что скачали, затем нажмите Обновить:
Шаг 2. Первоначальная настройка
Рекомендую сразу установить пароль и выбрать интерфейс "lan" для подключения по SSH:
Шаг 4. Настройка PPPOE
Теперь настроим подключение к интернету. Если ваш провайдер раздаёт интернет по DHCP, то этот шаг мы пропустим. По умолчанию WAN настроен на DHCP client. Если же pppoe, то идем далее:
Переходим в Network -> Interfaces -> Add new interface. Задаём имя интерфейса, протокол (PPPoE). Cover the following interface выбираем тот, который с wan. Вообще, в моём случае в роутере есть свич - eth0.1 и отдельно адаптер ethernet - eth1. В некоторых случаях нет адаптера, есть только свич eth0 и он разделен вланами - eth0.1 будет wan, а eth0.2 свич.
Нажав Submit мы попадаем далее, здесь нужно указать логин/пароль от PPPoE:
Не применяя настроек, переходим в Firewall Settings и выбираем зону WAN. Сохраняем, применяем.
Если все сделано правильно, то, перейдя в Network -> Interfaces видим, что наш pppoe подключился. Проверяем интернет, должен работать.
Шаг 5. Настройка WiFi
По умолчанию в Openwrt выключен WiFi, что бы включить, переходим в Network -> Wireless -> Edit:
Тут можно выбрать канал, на котором будет работать наша Wi-Fi сеть, либо оставить auto, тогда канал будет сам выбираться, в зависимости от загруженности.
- Режим работы (mode) - выбираем Access Point (точка доступа), о других режимах, мы поговорим в следующих статьях.
- ESSID - имя сети Wi-Fi.
Далее перейдите на вкладку Wireless Security:
Не рекомендуется ставить пароль просто из 8 цифр, такой пароль очень уязвим!После всех настроек нажимаем Enable.
На этом пока всё. В дальнейших статьях мы рассмотрим конфигурационные файлы, логи, доступ через SSH, переназначение одного из LAN портов на WAN и так далее.
Нет похожих записей
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.
есть tplink mr-3220v2, прошил trunk'овским, но там нет ни sftp, ни usb пакетов, ни luci, так вот, он как кирпич щас, как мне перепрошить его?
Кирпич в смысле не включается? Failsafe работает?
включаеца, про tftp не знал, попробую им.
есть tplink mr-3220v2, прошил trunk'овским, но там нет ни sftp, ни usb пакетов, ни luci
?
у тебя или кирпич или ты не осилил opkg update; opkg install
кстати, отсутствие luci по умолчанию в транке - задокументированное поведение.
Так это не кирпич.
USB должно работать из коробки. Под USB ты что представляешь? Сам USB или флешка с файловой системой?
Много в 4МБ не влезет. Собери прошивку с поддержкой ext4 через ImageBuilder и сделай корень системы на USB флешке.
всё ещё хуже чем я думал - я не могу залезть на него, ни ssh, ни telnet.
интернета нету же, он не осилит даже update сделать.
там видно 4 дырки недалеко от свича
ищи уарт и смотри лог, как он грузится
там и консоль будет
4Mb? очень мало для ext4. лучше юзать для rootfs sqhashfs, а после монтирования fuse.
до попыток прошивать через UART попробуй failsafe, как выше написали. он загрузится в минимальной конфигурации и ты сможешь загрузить нормальную прошивку.
ext4 имелось в виду для корня на usb флешке.
Luci точно нет? Столкнулся недавно с похожей проблемой - спасло то, что luci все-таки был. Если не можешь зайти по telnet/ssh, это ненормально.
через SCP в failsafe'е прошил, потом зачем то давай opkg remove ненужного делать и в итоге он щас не грузица, а в failsafe'е уже незя заного проивку закинутьпо SCP, вот теперь то что делать.
через Serial порт прошил, вскрыл роутер и у него там разьём есть, COM порт и все дела, пришлось десктоп искать для этого, но с горем пополам прошил я его.
Как-то раз, еще до скачков курса доллара, мне понадобился очень дешевый SOHO-роутер. Требования — 5 портов, NAT и Wi-Fi, не помешал бы и USB. Выбор пал на Upvel UR-313N4G, который в те времена стоил в Citilink’е смешные 860 рублей. Роутер был куплен и выполнял свои обязанности вполне сносно, стабильно зависая раз в неделю. Кроме того, не работал проброс портов, ну и что, он не больно сильно был нужен. К тому же в Web-интерфейсе был доступ к командной строке, так что в критичных случаях можно было просто написать iptables -A PREROUTING -j DNAT и наслаждаться работающими портами до следующего зависания. Впрочем, большего я от коробочки за такую смешную цену я не ждал. Потом кое-что в моей жизни поменялось и роутер лег на дальнюю полку, а его заменил TP-Link TR-ML3420. Надо сказать, TR-ML3420 отлично работает под OpenWRT и никаких проблем с ним не возникает, а вот роутеры Upvel официально не поддерживаются OpenWRT чуть менее, чем полностью (из всего модельного ряда — только два роутера).
Когда стало ясно, что Upvel UR-313N4G мне уже не жалко, я решил попробовать поставить на него OpenWRT. Основная задача — заставить работать 3G-модем Megafon M21-4, он же Huawei E3531. Надо сказать, что опыт прошивки роутеров на OpenWRT у меня был, как через Web-интерфейс, так и через UART, но он сводился к “выберите файл для прошивки и молитесь” или “наберите эти три команды в консоли и молитесь”. На этот раз мне хотелось разобраться, почему вводятся именно такие команды, ну и вообще получить общее представление об архитектуре MIPS, с которой я до этого не работал.
Тут, конечно, нужно отметить, что читать этот материал отцам, разрабатывающим Gigabit Ethernet карты на FPGA и пишущим видеодрайверы для Mali-400, будет, наверное, смешно — они все это и так давно знают.
Для начала спросим у Гугла о том, что мы будем шить и куда. В архитектуре x86 для загрузки ОС используется специальным образом подготовленный носитель — жесткий диск, SSD или флеш-память, размеченная по стандарту MBR или GPT, с основной загрузочной записью и специально отмеченным загрузочным разделом. Внутренняя структура диска скрыта от ОС его прошивкой, а BIOS предоставляет минимальный фунционал даже тогда, когда ОС не установлена. В роутере с архитектурой MIPS все устроено по-другому. Данные хранятся на MTD-устройстве, которое представляет собой микросхему EEPROM без контроллера, так что когда мы пишем на эту схему, нам нужно стараться не писать в одни и те же сектора слишком часто. Кроме того, у MTD фиксированный и довольно большой размер блоков, которыми допустимо производить стирание (в моем случае — 64Кб). Таблицы разделов на MTD-устройстве нет, но, когда загружено ядро Linux, то оно симулирует наличие таблицы разделов. Настройки этой симуляции задаются либо при сборке ядра, либо с помощью параметра mtdparts при загрузке. В начале MTD расположен загрузчик, который при неудачном стечении обстоятельств можно стереть, и тогда поможет только прошивка EEPROM на программаторе. Загрузчик распаковывает в память прошитый в MTD образ и передает управление ядру Linux.
Теперь настало время экспериментов. Для начала вскроем роутер и посмотрим маркировку основного чипа — Ralink 5350F. Легкое гугление показывает, что этот чип поддерживается OpenWRT, и довольно неплохо, — есть целый каталог ramips с прошивками под серию 5350. Еще на плате видна микросхема RAM на 32Мб и чип EEPROM на 8Мб. Поиск по сайту 4pda показывает, что на чипсете Ralink 5350F построен Upvel UR-322N4G, Hame MPR-A1 и Zyxel Keenetic 4G II. Ну что ж, качаем OpenWRT для Hame MPR-A1 и попробуем прошиться через Web-интерфейс роутера.
Прошивка не шьется, видимо, не проходит проверка каких-то сигнатур. Выяснять с отладчиком наперевес, каких именно, нет желания. Ну и ладно, не больно надо было.
Есть несколько способов прошить роутер без использования Web-интерфейса. Можно, например, воспользоваться режимом восстановления, в который загрузчик переходит при запуске роутера. если нажата кнопка Reset. Забегая вперед, скажу, что в Upvel UR-313N4G этого режима нет, не повезло, что ж поделаешь.
Можно также подключиться к роутеру через telnet, который доступен в оригинальной прошивке, “расчистить” память роутера, убив ненужные процессы, загрузить в память новую прошивку через tftp и прошить ее командой mtd_write. Способ этот плох тем, что у нас, по сути, есть только одна попытка — если прошивка окажется несовместимой с роутером и не сможет загрузиться, то на выходе мы получим “полукирпич”, который можно восстановить, но только через UART. К тому же в этом случае придется поломать голову над тем, в какой раздел MTD следует записывать прошивку. Сразу скажу — в разметке MTD, которая применяется в оригинальной прошивке, раздела Firmware нет.
Прошивка через UART
Из всего этого следует, что для экспериментов нам нужно подключиться к роутеру через UART, тогда у нас будет доступ к консоли с момента старта роутера. На всякий случай закажем из Китая за 160 рублей программатор. Если мы не убьем загрузчик, программатор нам не понадобится, но, как говориться, “случаи бывают разные”. На плате, если держать ее светодиодами к себе, в верхней правой части заметны 4 нераспаянных отверстия в ряд, подозрительно похожие на UART. Внимательно смотрим на плату — первое слева отверстие сделано в широком слое фольги, кажется, это схемная земля, дорожки от следующих двух отверстий через резисторы уходят куда-то вглубь платы — это Rx и Tx, правда, пока не понятно. в каком порядке. Крайне правое отверстие так же располагается на слое фольги, но поменьше, это, скорее всего, +3,3 В. Берем в руки тестер и измеряем напряжение. На Tx должно быть +3,3 В, на Rx — 0 В. Получаем (слева направо) — 0В; 3,3В, 0В, 3,3В. Значить, второй слева — Tx, а третий — Rx. Крайний справа контакт — 3,3В, мы распаивать не будем — сожгем переходник.
Берем китайский клон шнура Nokia CA-42, разрезаем его, находим в Гугле распиновку и припаиваем (слева направо) — оранжевый, красный, синий.
Ставим Putty (у меня Linux на рабочей станции, с Windows проблем тоже возникнуть не должно) и подбираем скорость порта: выставляем стандартные для COM-порта значения, включаем роутер и смотрим, чтобы на экране были не кракозябы, а осмысленный текст. У меня соединилось на скорости 57600 бод. Теперь у нас есть доступ к загрузчику, а значит, шанс окирпичить роутер уменьшается.
Хорошо, попробуем прошиться через загрузчик. В момент старта системы мы видим приветствие
Меня в этом меню больше всего привлекает пункт 1 — получение прошивки через TFTP и запуск ее из RAM. Получается, проверить совместимость прошивки с устройством можно даже не прошивая ее в EEPROM. Для меня это стало приятным сюрпризом. Устанавливаем tftp-сервер (я взял atftpd), кладем в рабочий каталог прошивку от Hame MPR-A1 и переименовываем ее поудобнее — в mpr-a1.bin.
Запускаем роутер, нажимаем в консоли клавишу 1, выставляем на сетевом интерфейсе компьютера адрес 10.10.10.3, вводим в загрузчике нужные параметры и загружаем прошивку.
Прошивка запустилась, ура! Даже есть доступ к Web-интерфейсу, а значить, большая часть прошивки работоспособна. И это мы еще ничего не шили! Только со светодиодами твориться что-то странное — горит только Wi-Fi (а он отключен и гореть не должен), а вот светодиоды портов Ethernet не горят. Разбираемся дальше. Для настройки коммутаторов в OpenWRT используется утилита swconfig. Выясняем, что может наш коммутатор
На первый взгляд — обнадеживающе, мы можем управлять не только VLAN’ами, что жизненно необходимо для разграничения трафика LAN и WAN-подсетей, но и программировать светодиоды.
Делаем
и… ничего не происходит. Видимо проблема где-то глубже, в драйверах. Хорошо, что у OpenWRT открытый код. Идем в git-репозитоий, находим там исходники драйвера и видим
тут, кажется, используется магия вуду. И еще — по коду драйвера сразу понятно, что без детальной документации на регистры коммутатора нам в нем не разобраться. Но видно, что параметры драйвера задаются не через аргументы команды modprobe, а, судя по всему, через вкомпилированные в ядро строки:
Ладно, отложим исходники и попробуем зайти с другой стороны. Все три роутера — Upvel UR-322N4G, Hame MPR-A1 и Zyxel Keenetic 4G II — двухпортовые. Наверняка среди тучи поддерживаемых моделей на Ralink 5350 есть и пятипортовые модели. Идем на WikiDev и находим, например, D-Link 320 NRU B1. Пятипортовый роутер, один USB порт — то, что надо. Качаем прошивку, загружаем в память роутера, запускаем. Светодиоды работают как положено. Очень интересно. Будем прошиваться на нее, а пока попробуем найти разницу между OpenWRT для Hame MPR-A1 и D-Link 320 NRU B1. Разницу нужно искать в профилях сборки — DTS. Вот, например, параметр led_polarity для Hame не указан, а для D-Link равен 0x17. А я то думал, что полярность бывает только прямая и обратная! Опять лезем в исходники драйвера, находим там константу
находим способ задания полярности
и опять убеждаемся, что без описания регистров коммутатора нам ловить нечего.
Мы выяснили, что для нашего роутера лучше всего подходит прошивка от D-Link DIR-320 NRU B1. Теперь нужно прошиваться. Быть может вы заметили, что для тестирования работы прошивок я выбирал файлы со словом uImage в имени. Такой файл содержит только образ ядра и файловую систему, загружаемую в RAM и доступную только для чтения. Такой образ можно запускать прямо из памяти, а вот для прошивки он не очень подходит — настройки в таком образе хранить просто негде. Поэтому для прошивки мы выберем образ с расширением sysupgrade — в конце такого образа прицеплен раздел JFFS2, в котором будут храниться изменения, внесенные нами в файловую систему роутера. Поэтому образ sysupgrade стартовать из памяти без прошивки на флешку не может.
Очень хорошо, что у Upvel UR-313N4G флешка на 8Мб, после установки у нас останется еще чуть больше 4Мб для дополнительных пакетов. А вот в TP-Link TR-ML3420 флешка на 4Мб и свободного места там — кот наплакал.
Перезагружаем роутер, нажимаем 2, указываем имя прошивки и шьемся. Итак, вроде все нормально: интерфейсы поднялись, светодиоды моргают, в общем — жизнь бурлит. Вы еще не забыли, что нашей основной целью было заставить работать роутер с модем Megafon M21-4? Втыкаем модем в USB-порт, смотрим в dmesg и… ничего. То есть, совсем ничего. Тут есть два варианта — либо ядро не увидело какую-нибудь адскую шину, на которой внутри чипа висит USB-порт (тут уж мы ничего не поделаем), либо в прошивку забыли добавить драйверы для этого порта. В D-Link 320 NRU B1 USB-порт есть, так что более вероятен второй вариант. Гуглим “OpenWRT usb support”, настраиваем на роутере WAN-порт, чтобы прошивка получила доступ в Интернет и ставим пакеты.
Именно в таком порядке, потому что модуль kmod-usb2 должен быть загружен раньше, чем kmod-usb-ohci
В консоли тут же появляются строки:
Ого, система увидела устройство на шине USB, значит, продолжаем.
Теперь ставим пакет, который при подключении модема пошлет на него “магическую последовательность”, переключающую модем из режима CD-ROM/TF Card в режим CD-ROM/TF Card+3 COM-порта.
В консоли видим следующее:
Значит, usb-modeswitch сработал — отправил команду модему, а модем после этого исчез с шины USB и появился там уже как другое устройство.
Поставим два пакета с драйверами, которые увидят COM-порты и сделают их доступными системе
Видно, что модем определился правильно и в системе появилось 3 COM-порта
Ставим пакет, необходимый для создания отправки команд 3G-модемам и расширение для Web-интерфейса:
Заходим в Web-интерфейс, настраиваем 3G, в качестве порта указываем /dev/ttyUSB0, все работает.
Теперь возьмемся за светодиоды. Сначала установим пакет kmod-ledtrig-usbdev — он позволит нам управлять светодиодами в зависимости от наличия устройств на шине USB. Зайдем в Web-интерфейс на вкладку System->LED Configuration и определим там два светодиода:
и нажмем кнопку Save/Apply
На этом настройка роутера закончена.
Стоить добавить, что светодиод “usb” ссылается на конкретный адрес устройства на шине USB (1-1), а поэтому, если адрес изменится, то светодиод работать не будет.
Прошивка через Telnet
А вот теперь пришло время выяснить, можно ли прошить роутер без доступа к UART. Для начала попробуем режим восстановления — обычно он включается, если при зажатой кнопке сброса подать питание. Зажимаем, подаем и смотрим в консоли: ничего. Режим не доступен. Откатимся через загрузчик на оригинальную прошивку и посмотрим в лог загрузки:
Видно, что u-boot читает 64 байта, начиная с адреса 0x00050000 (отцы, объясните, почему в логе bc050000?). Начиная с 0x00050000 на MTD прошит образ uImage и в первых 64-х его байтах находится заголовок. Из заголовка берется размер образа, его будущий адрес в оперативной памяти и точка входа, после чего образ распаковывается в RAM и на точку входа передается управление.
Подождем, пока оригинальная прошивка загрузится и посмотрим в лог:
Начиная с адреса 0x00050000 начинается раздел Kernel, и этот адрес подозрительно совпадает с адресом из лога u-boot. Значит, именно здесь храниться прошивка роутера, сюда мы и запишем OpenWRT. Посмотрим, на какие устройства отобразились разделы:
Размер раздела Kernel — 7680 Кб, а образ OpenWRT занимает примерно 3,5 Мб, следовательно, можно прошиваться без опасения, что новая прошивка не поместится в старый раздел.
Посмотрим, сколько у нас свободной памяти:
Нам нужно примерно 3,5 Мб и они у нас есть.
Запустим на рабочей станции atftpd (адрес 192.168.10.100) и скопируем прошивку в RAM роутера:
Сначала сотрем раздел RW_FS. Может, этого и не надо делать, но на всякий случай перестрахуемся:
Теперь запишем прошивку:
Ключ -r значит, что после выполнения команды роутер перезагрузится. Корректировать таблицу разделов не нужно, потому что она существует только внутри ядра Linux.
После перезагрузки заходим в Web-интерфейс, ставим пакеты kmod-usb2, kmod-usb-ohci, kmod-usb-serial, kmod-usb-serial-option, kmod-ledtrig-usbdev, usb-modeswitch, comgt, luci-proto-3g, настраиваем интерфейсы и светодиоды.
Читайте также: