OpenWrt на D-Link DNS-325 (rev A1): пошаговая прошивка через UART
Мои шаги по перепрошивки старичка D-Link DNS-325 A1 с помощь Windows 11, VirtualBox с Ubuntu в виртуалке, адаптер CP2102 kwboot, флешка в USB-порту NAS. Штатный веб-интерфейс D-Link для этой прошивки не используется. Читателю: подставь свои пути к файлам, имена на флешке и адреса в сети.
Официальная поддержка устройства в OpenWrt: PR #17924. Распиновка UART и фото платы: Jamie Lentin — DNS-325 (раздел Serial Port).
1. Что понадобится
- NAS: D-Link DNS-325 ревизия A1 (наклейка на корпусе должна быть с маркировкой А1).
- ПК с Windows 11, VirtualBox и Ubuntu как гостевая ОС — на ней ставится
kwbootиз пакетаu-boot-tools. - Oracle VM VirtualBox Extension Pack — версия должна совпадать с версией VirtualBox (нужен для USB 2.0/3.0 в ВМ).
- USB-UART 3.3 V TTL (например CP2102), не RS-232 12 V. Пайка/провода к JP1: GND, TX платы → RX адаптера, RX платы → TX адаптера; схема — по ссылке выше.
- Две роли флешки: (а) копирование файлов на диск Linux/ВМ; (б) вставка в USB-порт NAS — загрузчик в U-Boot читает образы именно с неё.
- Бэкап данных с дисков NAS, если они нужны — переход на OpenWrt обычно меняет разметку/настройки хранилища.
2. Скачать файлы прошивки
- Открой Firmware Selector или каталог downloads.openwrt.org.
- Target:
kirkwood→ обычноgeneric. - Устройство: D-Link DNS-325 A1 (профиль
dlink_dns-325-a1). - Возьми актуальный stable с нужным профилем устройства.
Сохрани у себя (имена могут немного отличаться по версии):
- u-boot.kwb — загрузчик (в каталоге вроде
u-boot-dns325/на зеркале kirkwood). - …-squashfs-factory.bin — первая установка в NAND.
- …-squashfs-sysupgrade.bin — для последующих обновлений через LuCI/sysupgrade (не для первой заливки из U-Boot в этом гайде).
Пример прямой ссылки на u-boot для релиза (подставь свой номер версии): каталог releases/…/targets/kirkwood/generic/u-boot-dns325/u-boot.kwb на downloads.openwrt.org.
3. Подготовить USB-флешку для NAS
- Сделай на флешке один раздел FAT32, файлы в корне. Если позже чтение с флешки в U-Boot сбоит — у меня сработали другая флешка и небольшой FAT-том (см. п. 9).
- Скопируй в корень (не в подпапку):
u-boot.kwbи файл…factory.bin. Имена лучше короткие; если будут ошибки чтения — переименуй factory, например, вfactory.binи вызывай в U-Boot именно это имя. - Не вставляй пока в NAS — сначала скопируй те же файлы в папку на Ubuntu (guest), откуда будешь запускать
kwboot(общая папка VirtualBox, drag-and-drop или вторая флешка).
4. Ubuntu в VirtualBox и проброс USB-UART в гость
Я подключал UART в Ubuntu не через вкладку «Serial ports» в VirtualBox (это про другое), а через проброс USB-адаптера в гостевую систему. Важно: в настройках ВМ включён контроллер USB 2.0 или 3.0 и стоит Oracle VM VirtualBox Extension Pack той же версии, что и VirtualBox.
- ВМ выключена: Настройки → USB — контроллер USB 2.0 или 3.0.
- Запусти ВМ. В меню работающей машины: Устройства → USB — выбери адаптер (Silicon Labs CP210x / USB to UART). Если в списке два похожих пункта — оставь подключённым только физический донгл и выбери тот пункт, который ему соответствует.
- Вкладку Serial ports в настройках ВМ для этого адаптера я не трогал — достаточно USB.
Проверка в терминале Ubuntu (внутри ВМ):
lsusb ls -l /dev/ttyUSB*
В lsusb должна появиться строка с Silicon Labs (у CP2102 часто ID 10c4:ea60), во второй команде — /dev/ttyUSB0 (иногда ttyUSB1). Если пусто — адаптер не передан в гость: снова Устройства → USB. Если не помогает — перезагрузка Ubuntu в ВМ и повторное подключение USB.
В kwboot подставь этот порт — у меня был /dev/ttyUSB0.
5. Установить kwboot и открыть терминал с консолью NAS
В Ubuntu (guest):
sudo apt update sudo apt install -y u-boot-tools which kwboot
Должен показаться путь вроде /usr/bin/kwboot.
Перейди в каталог, где лежит u-boot.kwb на диске гостя (тот же файл, что потом на флешке в NAS):
cd /путь/к/папке/с/файлом ls -la u-boot.kwb
Если при доступе к порту будет «Permission denied», запускай kwboot через sudo (ниже так и сделано) или добавь пользователя в группу dialout: sudo usermod -aG dialout $USER и перелогинься.
Отдельный терминал с picocom/screen не обязателен: после запуска kwboot я смотрел вывод U-Boot в том же окне. Скорость UART на стороне NAS — 115200 8N1.
Фото подключения UART к плате DNS325:
6. Запустить kwboot и попасть в приглашение U-Boot =>
Ниже — как у меня с /dev/ttyUSB0; если система покажет другой ttyUSB*, подставь его:
sudo kwboot -p -b u-boot.kwb -B115200 -t /dev/ttyUSB0
Дальше по подсказке в терминале: включи питание NAS (или перезагрузи его), когда kwboot уже ждёт устройство — как требует твоя сессия.
Во время строк с процентами ничего не нажимай в терминале — иначе символы уйдут в UART и могут сорвать передачу.
Когда появятся Done / Finishing transfer, передача файла закончена. Дальше в том же окне пойдёт вывод U-Boot с устройства. Строки вроде Warning - bad CRC, using default environment или Error: egiga0 address not set на этом этапе часто нормальны.
Когда увидишь Hit any key to stop autoboot с отсчётом — нажми пробел (это уже не этап процентов kwboot). Должно появиться приглашение => — это консоль U-Boot.
Если покажут меню с цифрами — нажми ту цифру, которую просит экран. Если имя файла в -b другое — укажи реальное имя u-boot.kwb на диске гостя.
7. Записать загрузчик в NAND (флешка обязательно в NAS)
Вставь подготовленную USB-флешку в порт самого NAS. Команда fatload читает файл с этой флешки, а не с ПК.
В приглашении => по очереди выполни (подставь точное имя файла после /, как в корне флешки — например /u_boot.kwb, если так переименовал):
usb start
fatload usb 0 0x1000000 /u-boot.kwb
nand erase.part u-boot
nand write 0x1000000 u-boot ${filesize}
reset
Проверка перед nand erase/write: после usb start в логе должно быть не ноль накопителей, например 1 Storage Device(s) found. Если 0 Storage Device(s) found — флешка не видна: другой порт USB на NAS, другая флешка, проверь FAT и файлы в корне. Пока fatload не покажет успешное чтение (строка с прочитанными байтами), не продолжай стирание/запись NAND.
После успешного fatload обычно видно, сколько байт прочитано — тогда ${filesize} для nand write будет верным. Дождись завершения nand write и только потом reset.
8. Записать MAC-адрес с наклейки
После перезагрузки снова останови автозагрузку и попади в =>. На наклейке корпуса — MAC. Если 12 символов подряд без двоеточий — разбей по парам (пример: 001A2B3C4D5E → 00:1a:2b:3c:4d:5e).
setenv ethaddr XX:XX:XX:XX:XX:XX saveenv printenv ethaddr
Подставь свой MAC. В выводе должна быть строка ethaddr=….
9. Залить образ OpenWrt (factory) в раздел ubi
Флешка с factory-образом в корне снова в NAS (имя в fatload — как на флешке; я после ошибок с длинным именем оставил factory.bin). В =>:
usb start
fatload usb 0 0x1000000 /dlink_dns-325-a1-…-squashfs-factory.bin
nand erase.part ubi
nand write 0x1000000 ubi ${filesize}
reset
Во второй строке имя файла должно точно совпадать с именем в корне флешки (регистр важен). Удобно положить копию под коротким именем, например factory.bin, тогда:
fatload usb 0 0x1000000 /factory.bin
Если fatload выдаёт EHCI timed out или Error reading cluster — попробуй другую флешку, короткое имя, или один небольшой раздел FAT на большой флешке. Не отключай питание во время nand erase / nand write.
10. Первая загрузка OpenWrt и настройка сети
Подключи NAS к сети (к роутеру/ПК). В UART могут быть сообщения про fstab — на первом запуске это не редкость.
По умолчанию интерфейс lan может быть в режиме DHCP, тогда устройство не отвечает на фиксированный 192.168.1.1, или адрес конфликтует с твоим роутером. Если UART ещё подключён, зайди в консоль как root и задай статику (подставь свои свободный IP, шлюз и DNS в своей подсети):
uci set network.lan.proto='static' uci set network.lan.ipaddr='192.168.1.10' uci set network.lan.netmask='255.255.255.0' uci set network.lan.gateway='192.168.1.2' uci set network.lan.dns='192.168.1.2' uci commit network /etc/init.d/network restart
У меня так и было: домашний роутер уже на 192.168.1.1, шлюз и DNS — 192.168.1.2, NAS вывел на 192.168.1.10 (читателю: подставь свои адреса, если подсеть другая).
Открой в браузере https:// и IP, который задал (с учётом предупреждения о самоподписанном сертификате). Задай пароль root (passwd в консоли или мастер в LuCI). На новых ветках OpenWrt пакеты ставятся через apk, не через старый opkg.
Дальнейшие обновления — только образом sysupgrade (…-squashfs-sysupgrade.bin) через веб-интерфейс или команду sysupgrade, а не повторной заливкой factory из U-Boot поверх работающей системы.
11. Жёсткий диск SATA: проверка, NTFS или ext4, автомонтирование
Я прошивал NAS без установленного HDD — на работу SATA это не влияет. После сборки корпуса и установки диска в отсек ядро поднимает драйвер sata_mv (два порта ata1 / ata2). Один диск часто сидит только на одном порту — в dmesg у второго будет SATA link down, это нормально; у меня диск оказался на втором порту (ata2 → /dev/sda).
Проверка: dmesg | grep -iE 'ata|sda'; устройства /dev/sda, разделы /dev/sda1. Список разделов: cat /proc/partitions. Утилиты lsblk и blkid в минимальной сборке могут отсутствовать — тип ФС смотрел так: block info (поле TYPE для /dev/sda1).
Если «диск не виден» в веб-морде, чаще всего он уже виден ядру, но не смонтирован — смотри тип раздела ниже.
NTFS (диск с Windows, метка вроде «Новый том»): в OpenWrt сам по себе не монтируется — нужны пакеты kmod-fs-ntfs3 и монтирование mount -t ntfs3 /dev/sda1 /mnt/data или вариант ntfs-3g. Для постоянного хранилища на NAS я ушёл на ext4: проще права и обслуживание, без возни с NTFS на роутере.
Переход на ext4 стирает всё на разделе — сначала сними копию данных, если они нужны. После umount (если что-то уже монтировал):
umount /mnt/data 2>/dev/null umount /dev/sda1 2>/dev/null apk update apk add e2fsprogs kmod-fs-ext4 mkfs.ext4 -L data /dev/sda1 mkdir -p /mnt/data mount /dev/sda1 /mnt/data df -h /mnt/data
(На старых сборках вместо apk — opkg update и opkg install e2fsprogs kmod-fs-ext4.) Метку -L data и каталог /mnt/data можно заменить на свои.
Постоянное монтирование после перезагрузки — четыре команды делают разное, не дублируют друг друга:
| Команда | Зачем |
|---|---|
block detect > /etc/config/fstab | Сканирует диски и записывает в /etc/config/fstab настройки автомонтирования. Символ > перезаписывает файл — при необходимости сохрани копию или правь руками. |
uci commit fstab | Сохраняет секцию fstab из RAM в постоянный overlay, чтобы настройки не пропали после перезагрузки. |
/etc/init.d/fstab enable | Включает автозапуск скрипта fstab при загрузке системы. |
/etc/init.d/fstab restart | Применяет конфиг сейчас: монтирует разделы без полной перезагрузки NAS. |
block detect > /etc/config/fstab uci commit fstab /etc/init.d/fstab enable /etc/init.d/fstab restart
Проверь cat /etc/config/fstab или LuCI → System → Mount Points. Если fstab уже настраивал вручную, block detect можно не вызывать — он для автогенерации и иногда требует правки.
Swap-файл на HDD — у NAS мало RAM (у меня порядка 256 МБ); без swap торренты и тяжёлые сервисы быстрее упираются в память. Файл подкачки делаю на /mnt/data, не на внутренней флешке.
Автомонтирование диска: в /etc/config/fstab (или LuCI → System → Mount Points) у точки /mnt/data должно быть enabled '1'. У меня стояло enabled '0' — после перезагрузки диск не поднимался, df -h /mnt/data показывал overlay, а не терабайты; swap-файл на диске «исчезал», пока снова не смонтируешь раздел.
uci set fstab.@mount[0].enabled='1' uci commit fstab /etc/init.d/fstab restart
Размер swap: dd с bs=1M и count=N — это N мебибайт. Пример: count=512 → 512 MiB; я делал count=4096 (4 GiB). Создавать файл только когда /mnt/data уже реальный большой том.
Куда класть файл: не в корень шары — иначе swapfile торчит в ls и в проводнике Windows. Делаю каталог /mnt/data/.system, swap внутри него, на каталог chmod 700 — гостевой Samba к nobody туда обычно не лезет.
mkdir -p /mnt/data/.system dd if=/dev/zero of=/mnt/data/.system/swapfile bs=1M count=512 chmod 600 /mnt/data/.system/swapfile mkswap /mnt/data/.system/swapfile swapon /mnt/data/.system/swapfile chmod 700 /mnt/data/.system free -m
Если swap уже был в корне: swapoff /mnt/data/swapfile, mv в .system/, снова mkswap и swapon, обновить путь в rc.local и при необходимости в /etc/fstab.
Строка для fstab — не команда в shell: нельзя вводить строку вида …/swapfile none swap … в терминал как программу (Permission denied). Добавлять через echo '...' >> /etc/fstab, если вообще используешь классический /etc/fstab.
Проверка: strings /mnt/data/.system/swapfile | head -1 → SWAPSPACE2; активность — cat /proc/swaps. Сообщение block: failed to swapon смотри вместе с /proc/swaps: иногда swap уже есть, а обёртка ругается.
После перезагрузки swap был пустой: одной строки в /etc/fstab мало — на ранней загрузке /mnt/data ещё не смонтирован. Сделал в /etc/rc.local перед exit 0:
[ -f /mnt/data/.system/swapfile ] && /sbin/swapon /mnt/data/.system/swapfile
и chmod +x /etc/rc.local. Запасной вариант — init-скрипт с START=99. После ребута проверяю swapon -s и df -h /mnt/data.
12. Доступ с Windows: Samba и права на каталог
С Windows диск не открывается как ext4 — нужен протокол SMB (как «общая папка»). На NAS ставлю Samba и смотрю шару с ПК по адресу вроде \\192.168.1.10.
Пакеты:
apk update apk add samba4-server luci-app-samba4 /etc/init.d/samba4 enable /etc/init.d/samba4 restart
При необходимости русского меню: luci-i18n-samba4-ru. На старых сборках вместо apk — opkg.
Где в LuCI: часто Services → Network Shares; если пункта нет (упрощённый режим интерфейса), открой в браузере напрямую: https://IP_NAS/cgi-bin/luci/admin/services/samba4 — или на NAS выполни grep -r samba /usr/share/luci/menu.d/ и посмотри путь в выводе.
Шара (как настраивал я): имя например nas, путь /mnt/data, Browse-able — да, Read-only — нет, Allow guests — да (для домашней сети), маски файлов/каталогов можно оставить 0666 / 0777 или чуть строже.
Фаервол: с LAN должны проходить TCP 139 и 445 (в LuCI — правила для Samba или вручную).
Права на каталог — без этого у меня запись с Windows не заработала. После ext4 каталог был «чужой» для гостевого пользователя Samba. По SSH:
ls -la /mnt/data chown -R nobody /mnt/data chmod -R 775 /mnt/data
Обычно гостевой вход идёт под nobody; если в конфиге Samba другой guest account, смотри grep -i guest /etc/samba/smb.conf и подставь того пользователя в chown.
На Windows: проводник → \\IP_NAS или \\IP_NAS\nas, при желании «Подключить сетевой диск».
13. Если что-то пошло не так (кратко)
- В UART тишина или мусор: скорость 115200, общий GND, TX/RX не перепутаны, адаптер 3.3 V TTL.
- kwboot — нет порта: закрой программы, занявшие UART на Windows; в госте снова Устройства → USB → CP210x; проверь
/dev/ttyUSB0илиttyUSB1. - 0 Storage Device(s) found: флешка не в том порту NAS или не та разметка/носитель.
- factory не читается: другая флешка, короткое имя файла, меньший FAT-раздел.
- Samba: папка видна, запись с Windows нет: права на
/mnt/data— как в п. 12 (chown nobody,chmod 775), фаервол TCP 139/445. - После ребута нет диска / swap: в UCI fstab
enabled '1'для/mnt/data; swap-файл —rc.local+chmod +x, см. п. 11.
14. Ссылки
- OpenWrt PR #17924
- OpenWrt, Firmware Selector
- Jamie Lentin — DNS-325 (распиновка UART)
- Яндекс Диск — UART к JP1
Описан мой пройденный путь: прошивка без HDD, сборка корпуса, диск SATA, ext4, fstab (enabled '1'), swap на HDD в /mnt/data/.system/swapfile и автоподключение через /etc/rc.local, Samba и chown/chmod для записи с Windows (Windows 11, VirtualBox, USB‑проброс CP2102, без COM в настройках ВМ). Перед прошивкой и форматированием диска перепроверь имена файлов, бэкап и сеть у себя.
Комментарии
Отправить комментарий