03.02.2013

Работаем с внутренним USART портом в DD-WRT на DIR-620

Как-то раз захотел я создать простенькую систему на основе радио модулей RFM-12, RFM-01 на 868 MHz и связать кухонный термометр с интернетом на основе встраиваемой приставки в роутер...
И ПОНЕСЛОСЬ!!!

Для начала был сделан этот самый модуль, потом я подключил второй модуль к своей отладочной плате на основе atXmega128A3 и дисплея LPH9157 на который недавно нашли похожую информацию и заставили работать, но так как контроллер Xmega оказался кривоватый в плане ADC, DAC и изначально плата проектировалась как измерительный комплекс - проект был заброшен и обзора естественно нет, но возможно будет.
Теперь к делу.
Описание плат, фото и т.д. будет сделано после окончательного запуска устройств. На данный момент это модуль для роутера, большие светодиодные часы с радио модулем для приема синхронизации времени (но так как в них стоит качественный кварц фирмы Geyer - функция почти ненужная) и приема уличной температуры с пока-что отсутствующего кухонного термометра.

Дальнейшее развитие проекта - возможно это система "Умный Дом", так как вычислительный возможности и коммуникации роутера позволяют многое (это и веб интерфейс, и Wi-Fi, и мой встроенный радио модуль). На данном этапе необходимо написать программу на роутер и сделать кухонный термометр.

А вот теперь к сути - припаял я в роутер разъем, система на роутере - DD-WRT v24-sp2 уже была установлена сразу-же при покупке роутера, я уже молчу про радиатор на процессоре (возможно то-же в будущем напишу статью). Так как с линуксом я на Ты - проблем с пониманием работы ОС роутера не возникло и я сразу-же подружился с его консолью через TelNet, запустил полноценный консольный Midnight Commander (MC), FTP, SAMBA, Lighttpd.
Отладку модуля я изначально проводил на обычной системе используя USBtoRS232 кабель и PuTTY, и ничего не предвещало беды. Но как только я подключил модуль в роутер и начал настраивать порт, искать программы - мне начало казаться что порт вообще не работает. На роутер я для использования порта поставил PicoCom.
По информации в интернете этот порт использует ядро для вывода логов при запуске, и теоретически мне должна была помочь команда:
nvram set kernel_args="console=null root=/dev/mtdblock4 rootfstype=squashfs noinitrd"
nvram commit
Но не тут то было! Вывод логов при старте возможно и отключился, но вот внутренняя консоль ни в какую не хотела отключаться, и при попытке подключится к роутеру через этот интерфейс кабелем в PuTTY я при попытке ввести какую-либо команду я видел консоль роутера, которая была явно не к стати. Я начал копать вглубь системы роутера.
Вывод команды "# dmesg |grep tty":
<5>Kernel command line: console=ttyS1,57600n8 root=/dev/mtdblock4 rootfstype=squashfs noinitrd
<6>console [ttyS1] enabled, bootconsole disabled
<6>serial8250: ttyS0 at MMIO 0x10000500 (irq = 13) is a 16550A
<6>serial8250: ttyS1 at MMIO 0x10000c00 (irq = 20) is a 16550A
<4>ttyS1: 1 input overrun(s)
<4>ttyS1: 5 input overrun(s)
<4>ttyS1: 9 input overrun(s)
Попытки использовать пропатченный busybox в который добавили stty и setconsole с командой:
chmod +x /opt/bin/busybox
/opt/bin/busybox setconsole /dev/ttyS0
ни к чему не привели. В интернетах пишут что необходимо отключить консоль и включить setconsole и stty в исходниках прошивки, но исходников в свободном доступе нет.

После долгих шаманств и плясок с бубном я решил попробовать нечто похожее на "Ремап" портов, и так как в роутере есть два порта:
ttyS0 - который постоянно молчит и не хочет реагировать на внешние команды
ttyS1 - наш железный порт, который использует консоль, и хочем использовать мы.
Не долго думая я решил - "А что будет если их переименовать?". Попробуем подсунуть ttyS0 консоли, а ttyS1 переименуем в ttyS2 (для наглядности).
Простейшими командами:
mv /dev/ttyS1 /dev/ttyS2
mv /dev/ttyS0 /dev/ttyS1
приводим в действие наши шаманства, и о чудо! Теперь у нас есть порт ttyS2 который никто не занимает! Коннектим к нему PicoCom командой:
picocom -b38400 /dev/ttyS2
и работаем!
В будущем будет написана своя программа. GCC компилятор уже установлен на роутер, и протестирован.

Продолжение следует!

Комментариев нет:

Отправить комментарий