Pull to refresh

Comments 40

Читал как остросюжетный детектив. К сожалению, моей квалификации не хватает, чтобы разобраться во всем, что вы сделали — но это все очень круто.
А зачем столько лишних телодвижений? Если уже подключен UART жимкаем 2 и uboot прошивает прошивку. Если хочется предохранится, я так понимаю изначальная прошивка поддерживает USB-накопители, поэтому можно скопировать содержание микросхемы роутера перед обновлением (что-то типа cp /dev/mtd0 /tmp/mnt/usb1_1, вообщем смотреть как разбита микросхема и куда монтируется флешка).
А зачем потом возится с восстановлением, если проще загрузить в память и попробовать? Почему в оригинале поддерживают USB Mass Storage? Скорее всего нет. И вообще dd if=/dev/mtd0 of=/mnt/fw.img
После того, как загрузить в память и попробовать, таким же образом можно и прошить эту же прошивку, нажав вместо «1» — «2». Зачем прошивать после попробования через командную строку?
Я добавил прошивку через командную строку для тех, у кого нет возможности распаять UART.
А что им тогда делать, если что-то «пойдет не так»? :) Тема обновления загрузчика до нормального не раскрыта. И раз у вас был доступ к uboot могли бы показать что будет, если прошивка не взлетит (возможно там есть аварийный режим, когда uboot сам ищет фтп сервер и пытается слить с него прошивку для прошивки).
На самом деле это мое небольшое исследование, ведь до этого я этого работал только с x86. Можно было сразу прошить через «2» или через telnet, но мне хотелось понять, что, как и куда прошивается. В общем-то, UART именно затем и распаян. Да, стоковая прошивка поддерживает USB storage и снять дамп с mtd0 можно сразу на внешний накопитель. Проблема в том, чтобы прошить его обратно, если вдруг при прошивке через telnet я укажу не /dev/mtd4, а /dev/mtd0 и затру загрузчик.
через telnet я укажу не /dev/mtd4, а /dev/mtd0 и затру загрузчик

Тогда только программатор, тут без вариантов… Точнее вариант есть, jtag, но проще и быстрее все таки программатор.
Я в свое время перечитал все доступные в рунете статьи по прошивке на openwrt, могу уверенно заявить, это самая годная и понятная. Оч круто!
Мне многим нравится openwrt, но предположим в ядре или одном из пакетов будет найден новый аналог Heartbleed Bug. И что делать? Качать прошивку, патчить и заливать заново? Забить и пополнить ряды ботнетов?
Поясните, пожалуйста, кто знает, как обстоят дела с обновлениями безопасности для OpenWRT.
На самом деле автор только начал постигать уличную магию. Качать готовые прошивки openwrt это неспортивно. Чаще всего они оказываются старыми — авторы выкладывают только прошивку без репов с пакетами под эту версию ядра, а из официальных пакеты уже не подходят.
Я так со своим старичком dir-320 для дачи поплюхался, слил сорцы и собрал сам что мне нужно.
Поэтому обновление вообще не вопрос в этом случае — обновил сорцы и пересобрал прошивку со старым конфигом. Хотя при нормальной настройке не думаю что это потребуется — снаружи на роутере все равно все закрыто.
Можно, конечно, и из исходных кодов собрать, но тут вот какая проблема: моих знаний хватит только на то, чтобы поправить профили сборки (ну, чтобы светодиод назывался не d-link:green:usb, upvel:green:usb). Написать новый драйвер я не смогу. А сборка из исходников — занятие довольно долгое и муторное: нужно собирать тулчейн, возможны ошибки компиляции и т.п. В ситуации, когда ежедневно выкладываются сборки из транка, не думаю, чтобы сборка из исходников для меня была актуальна.
Долгое? Там дел на 15 минут. Это если по принципу: скачал, сконфигурил, собрал. Драйвера писать не надо в этом случае. Плюс проблема в том, что новые версии больше не собираются под старые маршрутизаторы, а если и собираются, то в 4мб флешку уже не лезут либо содержат много лишнего. Менять флешку лениво — оперативку апгрейднул до 64, а флешки и этой хватит. Так было с моим 320м (который старый, не NRU).
Мануалов в сети полно: autohome.org.ua/12-openwrt/8-openwrt-dlya-dir-320 — пример.
Кстати достаточно было еще до habracut написать, что данное устройство на основе чипа rt5350: для роутерщиков это единственный интересный момент во всей статье, потому что практически любой 5350 с uboot можно зашить в openwrt. :)
Видно, что u-boot читает 64 байта, начиная с адреса 0x00050000 (отцы, объясните, почему в логе bc050000?).

На это может ответить только исходник конкретно этого загрузчика.

Если возникнет желание разобраться с тем, как работает система сборки OpenWrt, и будут нужны советы, обращайтесь в личку.
lovecraft Круто! Так случилось что как раз сейчас нашел в тумбочке upvel UR-312N4G, думал пристроить его на даче. Зашел на него телнетом, там само собой busybox. Вопрос: sshd на нем можно поднять? Моих знаний для решения такой задачи не хватает :-(
А зачем вам sshd?
Если так нужно, проверьте, есть ли команда dropbear в этом busybox.
В качестве альтернативы OpenWRT (и бизибоксу с dropbear) можно попробовать собрать прошивку на базе FreeBSD. Список поддерживаемого оборудования там сейчас, конечно, поскромнее, но отзывы в рассылке народ, в общем, положительные давал.
Только заменой busybox. А вообще гугл выдаёт инструкцию по впиливанию на ваш аппарат прошивок от зюхелевского девайса. Там ssh уже есть.
Мне нужен ssh тунель, не знаю можно ли его организовать через telnet
Нельзя. Советую сходить на 4pda за альтернативной прошивкой.
Да, если поставите OpenWRT. Можно через telnet, но у вас одна попытка.
dev: size erasesize name
mtd0: 00800000 00010000 «ALL»
mtd1: 00030000 00010000 «Bootloader»
mtd2: 00010000 00010000 «Config»
mtd3: 00010000 00010000 «Factory»
mtd4: 00380000 00010000 «Kernel»
mtd5: 00030000 00010000 «RW_FS»
Кажется, размер раздела /dev/mtd4 подходит (раздел занимает 3670016 байт, а прошивка — 3407876). В принципе, можно прошиться на Hame MPR-1A, но у него флешка на 4 Мб, и вам не хватит места, если вы надумаете ставить, например, OpenVPN. В профиле сборки указан размер флешки, так что можно его поправить на 8 Мб и пересобрать OpenWRT.

Еще можно попробовать прошивку от Hame MPR-2A, аппаратная платформа вроде та же, но флешка на 8Мб. Хотя могут возникнуть проблемы с тем, что у Hame MPR-1A и Hame MPR-2A разное количество USB и Ethernet-портов.

Ну и да, вы делаете это на свой страх и риск )
с адреса 0x00050000 (отцы, объясните, почему в логе bc050000?).


0xbc050000 это реальный адрес данных из флеша. Поулчается так: 0x00050000 это смещение от начала флеша, флеш отображается на адреса с начиная 0xbc000000, затем эти два числа суммируются и дают реальный адрес.
Спасибо. Значит, если писать в RAM по адресу 0xbc000000, попадешь во флеш?
Записать так просто не получится по двум причинам
1. Ядро, если уже загружен линукс, защищают некоторые области от записи.
2. Запись требуется определенной последовательности действий. Как правило, это сначала стереть блок, затем записать блок. Размер блока зависит от флеша и будет, наверное, 64К.

Прочитать можно.
Говорят, что флеш доступен еще и по адресу 0х9c000000, причем в этом случае нет кеширования. Если есть желание можно проверить.
Как правило, это сначала стереть блок, затем записать блок. Размер блока зависит от флеша и будет, наверное, 64К.
При этом erasesizewritesize, как правило. С флешем вообще надо работать аккуратно (капризная штука), «наверное» здесь неуместно: после неправильной записи посыпятся ошибки ECC и мусор в прочитанных блоках; и хотя erasesize практически всегда кратен writesize, это совсем не обязательно 64K: вполне может быть, к примеру, 128K и 2K соответственно.

Проще всего из userland писать через функции mtdutils.c; ядро не предоставляет достаточно высокоуровневого механизма работы с MTD, поэтому обычно приходится вручную определять все размеры, дергать block_isbad(), устанавливать erase_callback и пр. (Это для корректного чтения/записи, если нужно лишь читать, то ничего сложного.)
Спасибо за статью. После этой статьи нашел в загашнике этот одноразовый модем. «Все равно лежит зря» — подумал я, и решил проверить. «Не критики ради, а дополнения для» сообщаю: openwrt перепрошивается через родной web-интерфейс, правда я грузил прошивку с uboot, но потом обновил её с помощью sysupgrade, поэтому у меня есть сомнения в правдивости слов автора: «у вас есть одна попытка».
Спасибо за комментарий, я имел в виду, что если что-то пойдет не так при прошивке через Web-интерфейс, то восстановиться мы не сможем — режима восстановления в модеме нет. Вполне возможно, что в некоторых версиях оригинальной прошивки OpenWRT можно загрузить и через Web-интерфейс.

я грузил прошивку с uboot

Хотелось бы внести ясность — и uImage и sysupgrade-образы не содержат uboot. Получается, вы сначала загружали uImage, а потом обновлялись до sysupgrade?
Прошу прощения за то, что ввел вас в заблуждение. Полностью прошивка называется openwrt-ramips-rt305x-dir-320-b1-initramfs-uImage.bin, я подумал, что uImage — ubootimage. А sysupgrade накатывался с целью проверить, действительно ли у меня «один шанс», правильнее было бы вернуть заводскую прошивку, а потом обратно openwrt. Давайте еще разберемся вот с каким вопросом. Я всегда считал, что прошивка со словами sysupgrade предназначена для обновления openwrt, а не для перепрошивки с родной, в первую очередь потому, что не трогает настройки, в отличие от полной прошивки (со словом firmware). Я честно сказать не понял вашего объяснения, начиная со слов «настройки в таком образе хранить просто негде». Так чем же отличаются firmware, sysupgrade и uImage прошивки?
Скажу сразу — сборочные скрипты я не смотрел (а посмотреть сейчас времени нет), поэтому все, что я сейчас напишу — мои личные предположения, основанные на анализе поведения OpenWRT в мое личном случае и логах загрузки:
1) Образ uImage стартует из RAM без прошивки.
2) Когда прошиваешь uImage, невозможно сохранить никакие настройки, например, пароль на root. Так что ФС доступна только на чтение.
3) Образ sysupgrade не стартует из RAM — в логах куча ошибок на невозможность создать ноды ФС JFFS2.
4) В прошитом образе sysupgrade видна инициализация JFFS2 на MTD устройстве. В uImage ее вроде бы нет.

Из всего этого я сделал вывод, что uImage состоит из Kernel+Squashfs(RO) а sysupgrade — из Kernel+Squashfs(RO)+JFFS2(RW), при этом JFFS2 умеет при первом запуске разворачиваться до конца раздела (в логах это видно).

Но, конечно, все это догадки и ответ надо смотреть в сборочных скриптах.
1) Образ uImage стартует из RAM без прошивки.

Означает ли это, что после перезагрузки роутер приводится в исходное положение? Если да, то ваше мнение ошибочно, ибо именно uImage был залит мною через веб-интерфейс, после чего последовала ОБЯЗАТЕЛЬНАЯ перезагрузка. Если нет, то не могли бы вы пояснить своё утверждение.
2) Когда прошиваешь uImage, невозможно сохранить никакие настройки, например, пароль на root. Так что ФС доступна только на чтение.

Опять вы не правы: зашел телнетом поставил пароль, потом зашел ssh. Такое ощущение, что мы совсем о разном говорим.
3) Образ sysupgrade не стартует из RAM — в логах куча ошибок на невозможность создать ноды ФС JFFS2.

Вот честное слово: не понимаю о чем вы. Из ssh заходим под рутом, вводим команду sysupgrade -v xxx-sysupgrade.bin.
4) В прошитом образе sysupgrade видна инициализация JFFS2 на MTD устройстве. В uImage ее вроде бы нет.

Опять не могу с вами согласиться. А куда, скажите пожалуйста, я записал пароль рута? В squashfs? Бред, но можно конечно (копируем распакованную систему во временный каталог, упаковываем в squashfs, заменяем образ), правда похоже на удаление гланд через анальное отверстие.
Означает ли это, что после перезагрузки роутер приводится в исходное положение? Если да, то ваше мнение ошибочно, ибо именно uImage был залит мною через веб-интерфейс, после чего последовала ОБЯЗАТЕЛЬНАЯ перезагрузка. Если нет, то не могли бы вы пояснить своё утверждение.

3) Образ sysupgrade не стартует из RAM — в логах куча ошибок на невозможность создать ноды ФС JFFS2.

Нет, я всего лишь имел виду, что uImage можно запустить из загрузчика u-boot по нажатию кнопки 1 (загрузить образ в RAM без прошивки через TFTP, затем запустить его)
В этом же режиме sysupgrade не стартует — т.е. ему нужно, чтобы его честь все-таки была прошита на MTD.

Опять вы не правы: зашел телнетом поставил пароль, потом зашел ssh. Такое ощущение, что мы совсем о разном говорим.

Вполне возможно, я действительно не прав — надо разбираться (
Sign up to leave a comment.

Articles