Transformarea adsl-modem Ethernet-Shield pentru Arduino

Transformarea adsl-modem Ethernet-Shield pentru Arduino

0x0 - introducere
0x1 - analiza :)
0x2 - se familiarizeze cu partea de software
0x3 - format firmware
0x4 - modificarea sistemului de fișiere
0x5 - scrie primul program
0x6 - port serial
0x7 - concluzie
Transformarea ADSL-modem Ethernet-Shield

Poate că cineva își amintește de sărbători de Anul Nou, am fost de cercetare pe bază de modem ADSL Linux - ZTE ZXDSL831AII (similar cu D-Link DSL-2500U) și derivarea serial am menționat posibilitatea de a se transforma într-un fel de modem Ethernet -shild.
Ei bine, e timpul să o facă!

Transformarea adsl-modem Ethernet-Shield pentru Arduino

În principiu, sarcina pare ușor, dar decizia sa am fost confruntat cu o serie de capcane, care a luat timp util cu privire la decizia sa :)

Ideea de bază a transformării modemului în Ethernet-Shield este foarte simplu - tot ce ai nevoie, trebuie doar să rulați programul de modem care va asculta un anumit port de rețea și conectați problema la datele sale de la portul serial, și invers, pentru a transmite datele recepționate la portul serial.
Desigur, acest Ethernet-Shield permite Arduino / CraftDuino funcționează nu numai în modul de server, dar clientul (trimite cereri de la Google și scrie în stare de nervozitate) - că această soluție nu permite, însă, cred că totul depinde de programul pe care îl începe ADSL modem;)
Aceeași soluție este adecvată în cazul în care aveți nevoie pentru a gestiona controlerul prin Ethernet. De exemplu, pe baza acestei decizii, se poate construi un camin adevarat inteligent :) Pe scurt, totul este limitată de imaginația ta;)

Deci, avem nevoie de un program de proxy ascultare socket și transmiterea datelor primite la portul serial.

Acest program este deja acolo:
ser2net.sourceforge.net - Serial rețea Proxy
dar eu folosesc suart de utilitate. scris de un participant roboforuma - Mort

Noi recompilarea programul sub modemul nostru. Am instalat deja toolchain pentru modem ADSL D-Link 2500U


Cu toate acestea, atunci când încercați să executați un program de pe modem care a genera în mod constant o eroare:


așa că a trebuit să modifice ușor programul.
Descărcați codul sursă și programul terminat aici:
suart-DSL-2500.zip

În mod implicit, programul este de a asculta pe portul 3000, și răstoarnă datele de pe / dev / ttyS0 la 115.200 rata.
Aceste valori pot fi modificate folosind parametrii de linie de comandă:


dar pentru toate modemului nostru program adecvat poate fi rulat fără parametri.

Deci, aveți deja programul pe care doriți să împingă la modem. Pentru a face acest lucru, trebuie să modificați sistemul de fișiere.

Despachetați sistemul de fișiere rădăcină (rootfs poate lua fișierul din exemplele anterioare, cum ar fi acesta - sq7.bin).
Vă reamintesc că decompresie ar trebui să fie făcut de către rădăcină superutilizator;)
Avem un director
SquashFS-root
copiați programul nostru suart directorul / usr / bin /
(Pentru programul de somn același exemplar care ia ca parametru numărul de secunde pe care doriți ca sistemul să dormi - este util pentru noi)
sleep-DSL-2500.zip

Dar, din moment ce ne-am împins deja două programe suplimentare - mărimea sistemului de fișiere rădăcină să crească și firmware de pe modem, probabil, nu va porni. Este simplu - ai nevoie pentru a elimina orice inutile.
De exemplu, imaginile din interfața web!
Noi mergem la / benzile / și a vedea o mulțime de gif-ok
executa comanda

fișierele sunt încă acolo, dar acum au o dimensiune de zero.

Cu toate acestea, dacă rulați doar programul pe modem - pentru a ajunge la portul 3000-lea nu va funcționa! Lucru este firewall (.) Iptables, care funcționează pe modem.

verificați dacă portul folosind Nmap-o:

acesta va da portul este deschis, dar filtrul și se conecteze la acesta nu va funcționa :(

În cele din urmă, verificați conjectura privind firewall-ul este simplu - puteți ucide http (kill -9 comandă) și a alerga suart pe portul 80

și va funcționa :)

Va trebui să se ocupe cu iptables. Pare a fi ceva: pentru a configura firewall-ul de pe modem :)))

Vizualizați setările existente cu comanda:


În principiu, puteți șterge pur și simplu întreaga comandă tabel:


Dar acest lucru nu este metoda noastră :)

Drop-învețe numere și să-l eliminați:


Scoateți DROP (11 regula lanțului de intrare):


Ostaytsya deschide portul 3,000th:


Verificați - lucrări!
Zapihnom aceste comenzi în fișierul / usr / bin / mytest


Rămâne să prescrie punerea în aplicare a acestor comenzi și de apel și suart la pornire ulterioară.

La început am încercat să împingă acest lucru în /etc/init.d/rcS
L-am torturat în acest fel și că, a încercat să pună la sfârșitul - programul rulează în fundal.
Suart adăugat la parametrul w care a cauzat întârzierea (în secunde) este introdus in furca suart () - în orice!

Ca urmare, cea mai recentă ediție a rcS

Dar, în cazul în care este provocarea programului? Este simplu - să acorde o atenție la portbagaj log un modem, care poate fi vizualizat prin portul serial.

Dacă utilizați RCs de mai sus-menționat. linia
[I] Start.
Acesta va fi imediat după linia
Algoritmica / MIPS FPU Emulator v1.5

și iptables, pare să înceapă mai târziu

să acorde o atenție la linia


Ea a găsit în zdorovuschem (deja un megabiți!) Fișier
/ Bin / cfm

Am decis să fac mutarea unui cavaler - redenumi fișierul / bin / CML la / bin / cfm0
și în locul ei împins un script, după cum urmează:


După cum puteți vedea, ruleaza original / bin / cfm0 în fundal, și apoi așteaptă 30 de secunde și pornește / usr / bin / mytest. care prevede configurarea iptables suplimentare, iar apoi ne / usr / bin / suart

Nu uita pentru a face script-ul executabil și ... totul! Puteți pachet firmware!

rula sistemul de pachete de comandă de fișiere rădăcină:

Utilizarea ulterioară meu set de scule de packImage.exe
ParseImage

și de a genera un fișier de firmware.
pentru ZTE ZXDSL831AII:

Mergem la interfața web a filei Gestionarea modem -> Actualizare firmware
Ne indică fișierul nostru rezultat-sq8-suart.bin și așteptați.

Dacă te uiți la jurnalul de portul de încărcare serial, vom vedea următoarele:

Vă rugăm să rețineți - când începe /etc/init.d/rcS (linia [i] Start.)
și când / bin / cfm ([i] CFM linie.)

verificați portul folosind Nmap-A:


mare! portul este deschis!

Asta e tot. Desigur, poate că puteți dezactiva ieșirea de depanare informații despre modul de descărcare modem pentru microcontroler de intrare este turnat date suplimentare, dar cred că nu este necesar - chiar în fața comenzilor lor de control trebuie să adăugați un cuvânt cod și toate.

Prompt, pliz, dragă Guru), este posibil să se facă BR1 - a subliniat într-o interfață de grup separat - primi setările de rețea de la DHCP? prin ifconfig poate configura o adresă IP fixă ​​și gw, și dacă rulați comanda. vylaziet eroarea. care este de înțeles, pentru că în directorul / proc / var / FYI / wan nimic despre BR1. Dacă creați o conexiune ADSL, numele său apare în dosarul WAN - tip nas_0_8_35.
Poate că există o modalitate de a crea un dosar acolo și BR1? Sau puteți rula dhcpc ocolind folosi acest dosar? Sau poate că puteți redenumi BR1 în nas_0_8_35.

Mașină - DLINK-2640u DSL / BRU / c2, fw: 2,05

Ajutor cu firmware pentru D-link 2500u - care a facut? Puteți așeza?

Te rog spune-mi cum să adăugați modem telnet? Acum, când încercați să vă conectați portul este deschis, dar conexiunea este scăzut