Портирование OpenWRT на новое устройство на примере ASUS DSL N12U
Что делать если вашего роутера не оказалось в списке поддерживаемых устройств OpenWRT? Конечно же сделать свой порт. Это можно сделать довольно быстро, если поддержка данной платформы уже реализована.
В этой статье я расскажу о процессе портирования прошивки в целом и о моем опыте портирования OpenWRT на ASUS DSL N12U.
Для начала следует определить насколько вообще это будет реально сделать. Для этого нужно узнать конфигурацию своего роутера. Тут достаточно много вариантов развития событий, например мой роутер показал все необходимые параметры в логе во время загрузки и в dmesg. Здесь следует точно определить объемы RAM, ROM, адреса партиций в mtd, и конечно же, на основе какого чипа сделан сам роутер.
Пример полного лога загрузки в моем случае есть здесь.
Я же отмечу наиболее важные для нас строки:
M25P128(20 20180000) (16384 Kbytes) mtd .name = raspi, .size = 0x01000000 (16M) .erasesize = 0x00040000 (256K) .numeraseregions = 0 Creating 5 MTD partitions on "raspi": 0x00000000-0x01000000 : "ALL" 0x00000000-0x00040000 : "Bootloader" 0x00040000-0x00080000 : "Config" 0x00080000-0x000c0000 : "Factory" 0x000c0000-0x00800000 : "Kernel"
Здесь есть адреса партиций, есть объем и тип ROM памяти. Ура.
Так же есть объем памяти и указана конкретная платформа:
ASIC 3052F (DSL-N12U) (Port5None) Total memory: 32 MBytes
Теперь нужно постараться обнаружить в таблице совместимых устройств наиболее похожий на Ваш роутер (главное это платформа), если там нет ничего подобного, то эта инструкция вам уже не поможет.
Мой роутер показал всю нужную информацию в dmesg и в консоль на порт. Но возможны другие варианты и направления поиска этой и другой полезной информации. Основные это GPL релиз прошивки (если он есть) и дамп прошивки роутера.
Так же нам потребуется подключиться к UART или Serial порту роутера, вероятность успеха затеи без этого подключения стремится к нулю. В качестве USB -> UART можно использовать Arduino, но нужно помнить что в Arduino уровень сигнала 5V (а у большинства подобных устройств 3.3V). И нужно принять примеры по решению этой проблемы (как минимум добавить резистор на RX роутера).
Как обнаружить Serial порт это тема отдельной статьи, но обычно он есть практически у любого роутера или устройства с Linux внутри, в моем случае хватило просто гугла.
Теперь перейдем к сборке прошивки.
В системе должны быть как минимум установлены пакеты для сборки toolchain:
sudo apt-get install subversion git build-essential
Я проводил сборку на Debian 7, но в целом проблем на этом этапе быть не должно.
svn co svn://svn.openwrt.org/openwrt/trunk wrt
cd ~/wrt ./scripts/feeds update -a ./scripts/feeds install -a
Target System (Ralink RT288x/RT3xxx) ---> Subtarget (RT3x5x/RT5350 based boards) ---> Target Profile (Asus RT-N13U) --->
Я выбрал ASUS RT-N13U как наиболее похожий на мой роутер. На самом деле этот выбор не очень важен, так как разница в конкретных профилях минимальна, и мы поправим большую часть различий, главное правильно угадать платформу.
Более в menuconfig не нужно менять ничего.
При первой сборке также нужно собрать один раз тулчейн и утилиты:
make tools/install -j9 V=-1 && make toolchain/install -j9 V=-1
Результат будет лежать в bin/ramips
Ramips для описания устройства использует DTS которые лежат в target/linux/ramips/dts. Оригинальный DTS для ASUS DSL RT-N13U лежит тут.
Здесь мы заменим полностью блок cfi@1f000000 на наш, новый. Очевидно что это не то, что подходит для нашего ROM чипа. Быстрый поиск по соседним dts позволил обнаружить, что пример конфигурации должен выглядеть как-то так (это опять же блок для DTS):
palmbus@10000000 < spi@b00 < status = "okay"; m25p80@0 < #address-cells = ; #size-cells = ; compatible = "m25p128"; reg = ; linux,modalias = "m25p80", "m25p128"; spi-max-frequency = ; partition@0 < label = "u-boot"; reg = ; read-only; >; partition@30000 < label = "u-boot-env"; reg = ; read-only; >; factory: partition@40000 < label = "factory"; reg = ; read-only; >; partition@50000 < label = "firmware"; reg = ; >; >; >; >;
Надеясь на благополучный исход с минимумом работы я собрал прошивку для ASUS RT-N13U c внесенными изменениями и попытался её залить через recovery режим, но роутер отказался ее принимать с ошибкой
wrong product id.
На данный момент я не смог обнаружить, какой именно id он проверяет, поэтому установка прошивки без доступа к Serial порту невозможна.
Но роутер без проблем прошился во 2 режиме uboot
2: System Load Linux Kernel then write to Flash via TFTP. Warning!! Erase Linux in Flash then burn new one. Are you sure?(Y/N) Please Input new ones /or Ctrl-C to discard Input device IP (192.168.1.1) ==:192.168.0.2 Input server IP (192.168.1.20) ==:192.168.0.20 Input Linux Kernel filename () ==:fw.bin
В нем используется не TFTP сервер, как в recovery от ASUS, а роутер сам идет на указанный сервер и качает указанный файл.
С первой попытки роутер не запустился из-за невозможности примонтировать /, но лог загрузки показал что проблемы с ROM’ом
[ 0.550000] m25p80 spi32766.0: found mr25h256, expected w25q128 [ 0.560000] m25p80 spi32766.0: mr25h256 (32 Kbytes) [ 0.570000] 4 ofpart partitions found on MTD device spi32766.0 [ 0.580000] Creating 4 MTD partitions on "spi32766.0": [ 0.590000] 0x000000000000-0x000000030000 : "u-boot" [ 0.600000] mtd: partition "u-boot" extends beyond the end of device "spi32766.0" -- size truncated to 0x8000 [ 0.620000] 0x000000030000-0x000000040000 : "u-boot-env" [ 0.640000] mtd: partition "u-boot-env" is out of reach -- disabled [ 0.650000] 0x000000040000-0x000000050000 : "factory" [ 0.660000] mtd: partition "factory" is out of reach -- disabled [ 0.670000] 0x000000050000-0x000001000000 : "firmware" [ 0.680000] mtd: partition "firmware" is out of reach -- disabled
Быстрый взгляд в драйвер m25p80 в сочетании с подозрительной ошибкой
[ 0.470000] rt2880-pinmux pinctrl: pin io3 already requested by pinctrl; cannot claim for 10000b00.spi [ 0.490000] rt2880-pinmux pinctrl: pin-3 (10000b00.spi) status -22 [ 0.500000] rt2880-pinmux pinctrl: could not request pin 3 (io3) from group spi on device rt2880-pinmux
позволил понять что проблема в некоем pinctr и похоже, что драйвер не может получить доступ к чипу (он определил его как самый примитивный с id 0). Как оказалось достаточно было стереть в DTS из секции pinctrl строчку с spi, именно она мешала драйверу m25p80 получить доступ к spi.
При следующей попытке загрузить устройство стало ясно, что ROM определился корректно, и дело осталось только за выставлением правильных адресов mtd партиций.
palmbus@10000000 < spi@b00 < status = "okay"; m25p80@0 < #address-cells = ; #size-cells = ; compatible = "m25p128"; reg = ; linux,modalias = "m25p80", "m25p128"; spi-max-frequency = ; partition@0 < label = "u-boot"; reg = ; read-only; >; partition@40000 < label = "u-boot-env"; reg = ; read-only; >; factory: partition@80000 < label = "factory"; reg = ; read-only; >; partition@c0000 < label = "firmware"; reg = ; >; >; >; >;
Прошиваем, и внезапно все грузится, УРА!
Лог успешной загрузки устройства.
В итоге на этом все: роутер заработал на OpenWRT без каких либо проблем и сбоев. Естественно DSL не работает, но все остальное работает лучше чем на оригинальной прошивке. Даже индикация на корпусе заработала корректно.
Эта статья написана для того чтобы показать, что запуск OpenWRT на новом устройстве (при условии что платформа поддерживается) — это очень просто, надеюсь она поможет кому-нибудь сделать порт OpenWRT и на свое устройство.
Как настроить и прошить ASUS DSL N12U
Роутер производства компании ASUS разработан для домашнего использования, он помогает решать задачи построения сетей любого масштаба. Устройство оснащено принт-сервером, представляет собой модем (ADSL) и беспроводной маршрутизатор в одном лице. Две антенны прибора характеризуются повышенным коэффициентом усиления, что гарантирует увеличенную территорию покрытия Wi-Fi и стабильный сигнал. Из интересных особенностей целесообразно также выделить опцию подключения сетевого МФУ. Рассмотрим детальнее принцип работы и характеристики DSL N12U.
Роутер можно эксплуатировать для построения сетей разного масштаба
Характеристики:
- возможность создания до 4 SSID;
- простое конфигурирование ADSL параметров;
- 300 Мбит/с;
- IPTV — есть;
- 2,4 ГГц;
- 4 порта LAN;
- антенны съёмные;
- QIS-мастер поможет настроить доступ к сети максимально быстро;
- Опция EZ All-in-One;
- WPS;
- возможность включить беспроводной модуль при помощи клавиши;
- подсоединение 3G-модема.
Широкая функциональность в приборе ASUS DSL N12U сочетается со стильным дизайном. Наличие опции Ethernet WAN даёт возможность без труда превратить устройство в обычный роутер.
Внешний вид
Все выходы находятся на задней панели DSL N12U. Здесь вы найдёте порт USB, клавиши включения и reset, разъём для БП, порты LAN, а также WAN-порт, в который необходимо подсоединить провод компании-провайдера.
Подключение
До того как начинать настройку, важно правильно установить свойства подключения на ПК. Эти конфигурации можно найти на панели управления («Сетевые подключения»). Здесь необходимо зайти в свойства подключений по локальной сети.
DNS-сервер и IP-адрес, описанные в параметре протокола TCP/IP v4, должны выдаваться автоматически (убедитесь, что флаг выставлен в правильном месте).
Чтобы сконфигурировать прибор, его также важно научиться подключать. Сначала всуньте кабель из PHONE разъёма в домашний телефон, затем подсоедините в ADSL-разъём маршрутизатора кабель от DSL, а на третьем этапе вставьте в LINE-разъём телефонный кабель. Осталось соединить патч-кордом ПК и роутер. Также не забудьте вернуться к первоначальным настройкам, зажав на пару секунд клавишу Reset.
Особенности настройки
Существует два способа выбора параметров маршрутизатора — ручной и автоматический. Специалисты рекомендуют пользоваться ручной настройкой, потому что она даёт возможность настроить прибор более качественно. Введите 192.168.1.1 в браузере, это позволит попасть в интерфейс. На втором этапе заполните поля login/pass (для новых устройств подходят параметры admin/admin). После этого откроется окно интерфейса, в котором находится меню «Настройки».
Настройка PPPoE
Интернет настраивается в пункте WAN. События могут развиваться по-разному, исходя из того, какая фирма предоставляет вам услуги глобальной сети . Для Ростелеком принято использовать PPPoE протокол соединения. Введите такие данные:
- режим инкапсуляции — LLC;
- protocol — PPPoE;
- login/pass — параметры можно узнать в договоре, выданном фирмой-провайдером;
- VPI/VCI — 1/50.
Другие поля можно не менять, проверьте правильность данных и примените эти настройки.
Настройка Wi-Fi
Зайдите в пункт «Беспроводная сеть» раздела WAN, после чего измените параметры следующим образом:
- шифрование WPA — TKIP;
- SSID — придумайте для своей сети наименование;
- метод аутентификации — WPA Personal;
- ключ — придумайте пароль для сети.
Осталось сохранить изменения и перезагрузить прибор. Роутер готов раздавать интернет!
Прошивка
Компания-девелопер регулярно выпускает обновление для микропрограммы с целью улучшения работы устройства. Перед тем как качать прошивку, разберитесь с аппаратной версией маршрутизатора. Данная информация описана на наклейке (смотрите на нижнюю крышку прибора, пункт H/W ver).
Затем нужно найти свою версию прошивки на сайте ASUS. Выберите интересующую модель, найдите пункт «Драйверы и утилиты» в разделе «Поддержка». Самое свежее ПО обычно находится вверху. Важно скачать файл, распаковать его в нужное место на ПК, после чего перейти в интерфейс.
В самом интерфейсе следует выбрать «Обновление микропрограммы (пункт «Администрирование в дополнительных параметрах). Осталось прописать маршрут к файлу и кликнуть на «Обновить».
Процедура прошивки ASUS DSL N12U занимает примерно 3 минуты, не вносите изменения и не выключайте оборудование в это время. По окончании изделие автоматически перезагрузится.