Portál AbcLinuxu, 30. dubna 2025 17:27
Milý blogísku, konečně to mám za sebou. Dlouho jsem o tomto okamžiku přemýšlel a představoval si jaký bude, ale až teprve dnes se mi podařilo to zažít. Co? No přece přijít o panictví \o/.
Přesně tak, přišel jsem o moje linuxokompilační panictví. Poprvé v životě jsem se utkal s kompilací celého systému a po lítém boji který zabral půl dne jsem vyhrál. Teda aspoň doufám, nějak mi blbne Bus pirate, resp. UART bridge, nebo bůh ví proč ten python uploader pořád padá. To je jedno. Zkompilovalo se to a já se teď můžu považovat za celého linuxáka. Můžu se zasvěceně smát až si budeme s ostatními linuxáky vyprávět sprosté vtipy a pohrdavě pohlížet na nezkušené ubunťáky, kteří si myslí že vědí když to viděli na internetu, ale ve skutečnosti samozřejmě nemají tušení. Něco takového se totiž nedá předat teorií, to se musí zažít..
O velkých prázdninách jsem při čtení webu o robotice narazil na článek o routeru BR6104KP (verzi bez P na konci nebrat, chybí jí dva USB porty které je nutné připájet!), což je v podstatě zakuklený počítač. Připadalo mi to zajímavé, ba přímo skvělé, tak jsem si z aukra přidal do readeru RSS feed vyhledávání a čekal kdy se objeví nějaký router za přijatelnou cenu. Netrvalo to dlouho a podařilo se mi jeden nový a nikdy nepoužívaný koupit za 300kč i s poštovným.
Jakmile mi přišel domu, okamžitě jsem ho vybalil a jal se prohlížet co jsem to vlastně vydražil. Router vypadá (překvapivě..) jako router - krabička v pěkném stříbrnočerném designu, 4 LAN porty, 1 WAN, 2 USB, konektor na trafo a miniaturní zapuštěné reset tlačítko. Obsah balení dále tvoří zdroj 9V v malé bílé papírové krabičce, manuál, CDčko a disketa (:D). Disketu jsem hodil do poličky mezi ostatní starožitnosti, manuál jsem zběžně prolétl, ale jedná se jen o step by step guide pro cvičené opice schopné rozpoznat obrázky. CDčko nabízí podstatně více - nacházejí se zde spousty ovladačů, elektronická verze manuálu a různé návody jak rozhodit sdílený printserver který router nabízí na všech třech hlavních OS. Po zevrubném prozkoumání jsem ho vyndal z notebooku a putovalo do další poličky, tentokrát té určené na zbytečné krámy.
Po chvíli kdy jsem hledal ethernet kabel jsem se na router napojil a prohlédl si webové rozhraní. Jedná se o standard který je možné v různém grafickém provedení nalézt na téměř každém levném domácím routeru, takže mě to rychle znudilo a začal jsem hledat jak že to mám vlastně router upravit na linuxovou mašinu. Během chvilky googlení jsem narazil na původní článek, který mě tenkrát tak nadchl.
Hardwarová modifikace je jednoduchá - stačí jen připájet neosazený konektor do portu kde je vyvedený JTAG (JP2). Jedná se o osm děr, které je nutné provrtat (jsou ucpané pájecím materiálem) a z obou stran desky do nich připájet konektor. Později jsem přišel na to, že není nutné osazovat všechny piny, ale stačí vždy dva krajní, dohromady tedy čtyři.
Jelikož je možné že čipy na desce jsou citlivé vůči magnetickým polím, není možné použít mojí milovanou, 30 let starou trafopájku, ale je nutné pájet něčím co nevytváří takové EMP, tedy například mikropájku. Díky tomu že mám nějakej 40W šmejd za stopade z GME se jednalo doslova o utrpení. Cín (je mi jasné že to není čistý cín, ale stejně tomu tak říkám) se nechtěl tavit, celé mi to trvalo strašně dlouho a na konci jsem byl už tak nasraný že jsem to vzal trafopájkou kterou jsem zapnul nataženou rukou co nejdále od desky. To co jsem neudělal za půl hodiny mikropájkou bylo trafopájkou hotové během půl minuty, obvody to naštěstí přežily bez újmy.
Poté co jsem připájel konektor přišlo na řadu zjišťování jak že to mám vlastně s routerem komunikovat. Pro přenos dat se používá UART, což je vlastně zjednodušený RS232C pracující v nižších napěťových úrovních. V praxi to znamená, že běžný osobní počítač se na sériovou konzoli nemůže nijak jednoduše připojit. Pokud má ještě dnes již nemoderní sériový port (tedy podporu RS232), tak je pořád nutný převodník napěťových úrovní, pokud ho nemá tak je nutné si sehnat něco sofistikovanějšího.
Jedna z možností je použít externí převodník USB2RS232 a dobastlit si k němu ještě převodník úrovní, což je ovšem poněkud nepohodlné a časově náročné. Další možnost je použít arduino, nebo nějaký podobný programovatelný kit a naprogramovat si do něj UART bridge - program který přepne mikrokontroler do režimu kdy pouze předává zaslaná data dál, v našem případě na router.
Jelikož se mi doma už nějakou dobu válí BusPirate, rozhodl jsem se že ho konečně nějak smysluplně využiji. BusPirate není programovatelný obvod jako třeba arduino (resp. je, ale není k tomu určený), ale svým způsobem hydra, která se umí připojit na nejrůznější komunikační sběrnice a odposlouchávat je (funguje i jako ne moc kvalitní logický analyzátor), popřípadě do komunikace aktivně zasahovat. Funkci UART bridge v sobě má už zabudovanou a její spuštění a nastavení je dílem několika příkazů (M, 3, 9, ENTER, ENTER, ENTER, 2, (1), mezerník). Potěšilo mě že umí přímo 3.3V logiku, takže jsem nemusel ani přidávat odpory které by zajistily konverzi mezi 5V UARTem.
Zapojení konektoru je jednoduché - na jedničce (je označená na desce) je Rx, na dvojce +3V, na sedmičce Tx a na osmičce Gnd. Jelikož jsem na rozložení neustále zapomínal, po chvíli jsem se naštval a napsal jsem si to tam lakem na nehty (drží o hodně lépe jak lihová fixa, je levný, ale zase se s ním blbě píše).
Minicom (software pro sériovou komunikaci) jsem už měl z dřívějška na ubuntu nastavený, takže jsem ho zapnul a přepnul buspirate do potřebného módu. Poté co se jsem experimentálně ověřil (;D) že Rx na zařízení musí přijít Tx mastera a naopak jsem byl konečně připojený na sériovou konzoli.
Jakmile jsem desku resetoval, objevila se bootovací hláška (pokud chcete přejít do nastavení, je nutné třikrát rychle zmáčknout mezerník), po které následovala záplava informací od linuxového jádra a něco co požadovalo heslo, ale nešlo do toho psát, protože se přepisoval pořád ten samý znak. Moc jsem to nezkoumal a desku jsem zase vypnul.
Když jsem teď měl vyřešené propojení s počítačem, nastalo shánění software. Jako první jsem našel distribuci Midge. Chvíli mi trvalo než jsem na jejich stránce nalezl binárku ke stažení, přičemž mě zarazilo především to, že je to poněkud stará distribuce. Poslední buildy jsou staré cca čtyři roky a jedou ještě na jádru 2.4.
Spustil jsem minicom a rychle zmáčkl třikrát po sobě mezerník. Naskočilo menu, ze kterého jsem si vybral že chci nahrávat do flash paměti, načež počalo zobrazování jakéhosi progressbaru. Došlo mi, že bych měl asi vybrat soubor který chci uploadnout, ale než jsem v nápovědě minicomu našel jak na to, spojení timeoutovalo. Nenechal jsem se odradit a zkusil jsem to znovu, ale opět s neúspěchem. Zkoušel jsem to takhle několikrát, ale prostě není možné tak rychle vybrat upload souboru, vybrat xmodem, najít ve filesystému potřebnou image, mezerníkem jí potvrdit a eneterem odeslat. Naštěstí jsem po chvíli googlení našel python script který to automatizuje.
Midge nebylo úplně špatné, ale postupně jsem dostával pocit že tomu něco chybí. Jasně, zařízení v /dev do kterých se dá zapisovat a podle nich blikají ledky jsou parádní, ale jakákoliv snaha o instalaci nového software byla fakt utrpení. Navíc podpora flashdisku byla fakt podivná a trvalo mi fakt dlouho než jsem přišel na to, že nemám hledat zařízení v /dev, ale v /rom/dev/scsi/tri/prdele/podslozek. Má nespokojenost s touto distribucí narůstala, takže jsem se rozhodl že si najdu jinou. Mezitím mi ovšem začala škola, takže jsem se k tomu už nedostal.
O vánocích jsem konečně měl zase dost volného času a chuti abych se na to po dlouhé době podíval. Začal jsem googlit, ale většina toho co jsem zkusil byla horší než midge. Někdy v tu dobu jsem konečně narazil na stránku, která popisovala možnost používat na routeru NetBSD. To mě zaujalo. S NetBSD nemám žádné praktické zkušenosti, ale když jsem se ho kdysi dávno pokoušel rozchodit na jornadě, zjistil jsem že má excelentní dokumentaci, kde je popsané snad všechno. Už delší dobu chci proniknout do jádra unixu, jenže na mém počítači to není tak jednoduché, protože na něm musím taky fungovat, navíc dokumentace ubuntu se zaměřuje spíš na uživatele, než na průzkumníky. NetBSD mi přišlo jako ideální systém pro poznávání unixu, takže jsem se pevně rozhodl že ho tam dostanu ať to stojí co to stojí.
Nastavil jsem si tedy vmware, nainstaloval NetBSD a začal stahovat zdrojáky z svn. Trvalo to snad století, ale na konci jsem měl vše potřebné a mohl jsem postupovat podle návodu. Nastavoval jsem, kompiloval a já nevím co ještě, ale nakonec to vždy skončilo chybou. Návod je pro NetBSD 3.1, přičemž v době psaní tohoto textu je aktivní 5.1. Vypadá to, že od doby napsání návodu se cosi změnilo a kompilace padá na ovladači USB.
Zkoušel jsem všechno možné, včetně úprav konfiguráku jádra a zuřivého googlení, ale problém jsem nepřekonal. Hrál jsem si s tím příležitostně asi měsíc, ale nebylo to nic platné. Na IRC jsem dokonce vyhlásil, že nabízím 500kč tomu kdo to rozchodí, jenže ani zkušenější itsgoingd neuspěl. Celá věc se dostala tak daleko, že jsem si dal dokonce inzerát do bazaru abclinuxu, kde jsem to nabídl i ostatním, ale 500kč je zřejmě buď moc málo, nebo NetBSD moc hardcore :).
Nějak jsem se poflakoval a občasně googlil až do předevčírem, kdy jsem si na vrchol mého TODO poznámkovníčku napsal: Linux na router. Aby se neřeklo, zkusil jsem i netbsd 3.1, která se dá stáhnout na stránkách návodu, ale měl jsem z toho pocit jako kdybych si prdnul v rozlehlé jeskyni - nikde nic podtržené nezkreslenou ozvěnou. Celá .img je sice chválihodně malá, ale v těch 1.3MB nic není! Minimum příkazů, nové programy navíc není možné doinstalovat, protože flash má jen 2MB a flashdisk to buď neumí, nebo jsem na to nepřišel. WTF? Tohle jsem vážně chtěl? Nevím okolik je lepší 5.1, ale ten pár let starý 3.1 build vypadal jako trakař, zatímco čtyři roky stará Midge vedle něj byla kosmická raketa schopná letu hyperprostorem.
Mezi tím jsem si taky koupil další router na aukru (byl až moc levnej, tak jsem ho prostě musel koupit), předevčírem ráno mi přišel domu.
Včera jsem vstal a pohled mi padl na můj todovníček. Pomyslel jsem si že už by to vážně chtělo něco s tím udělat a tak jsem opět začal googlit. Vzpomněl jsem si, že na routerech často běhá OpenWRT, jenže ten není jen tak jednoduché zkompilovat. Někde jsem narazil na fórum, nebo mailovou konferenci, kde kdosi psal že vytvořil vlastní distribuci zvanou Squidge, která je v podstatě OpenWRT s možností běhu USB rootu, což je kompletní systém uložený na flashdisku, v routeru zůstává pouze loader. To znělo skvěle, otevřel jsem si tedy stránky distribuce, kde je jednoduchý návod na kompilaci a nefunkční odkaz na Squidge 1.7.
Zkoušel jsem hledat všude možně, včetně webarchive, ale funkční odkaz jsem nenašel. Po chvilce hledání jsem se dostal do sourceforge, odkud se dá stáhnout verze 1.4, jenže já měl plné zuby starých sraček. 1.7 v sobě má mít spoustu vychytávek, které umožňují zajímavé modifikace, jako je třeba i2c místo LED atp.. Rozhodl jsem se tedy, že si zkompiluji vlastní 1.7.
Včera jsem toho upravil spoustu, ale ne všechno fungovalo. Podle všeho jsem ručně opravil adresy na svn, protože staré byly nefunkční, navíc lehce ohackoval jednotlivé python scripty, které mají za úkol projít make OpenWRT a nastavit chtěné a nechtěné vlastnosti, programy a moduly. Musel jsem patchnout script který pořád padal na vyjímkách, protože bez toho to prostě nešlo.
Výsledkem je zbrusu nová Squidge 1.7 s novým 2.6 jádrem, podporou GPIO, moduly pro i2c, 1-wire a UART, která má navíc root na flashdisku, takže nejste omezeni 2MB interního flashe, ale jen tím co se vejde na ext3 flashdisk. Doufám že nemá nějakou skrytou chybu kvůli tomu patchi python scriptu, ale co jsem ho dnes zkoušel, vypadá a funguje skvěle.
Okaz pro stažení souboru který je nutno rozbalit na flashdisk. Image kterou je nutné nahrát do routeru se nachází v /boot.
BR6104KP je skutečně parádní kus hardware. Za cenu pár stovek získáte embeded zařízení, které nemá nijak špatné parametry. Díky podpoře všemožných sběrnic může sloužit k jednoduché domácí automatizaci, robotice, jako mikroserver, nebo hosting různých checker scriptů. Využití se meze nekladou..
Osobně mám v plánu nechávat ho konstantně zapnutý a používat ho jako jednouživatelský mikroserver k internetové automatizaci (různé checkery a reagující scripty) s možností připojení některých autodestrukčních prvků, ale o tom možná až někdy příště :).
Tiskni
Sdílej:
Mikrotik totiž USB nemělNo tak on Inifineon/Adm5120 má USB kontroler myslím libovolný. Akorát jak na sviňu u RouterBoardů řady 1XX není ani u jednoho vyveden.
Na druhou stranu, ten Mikrotik má normální RS232Není úplně pravda. On ten UART je naprosto stejný jako v případě výše popsaného routeru (tedy TTL logika nebo tak), akorát těsně před Cannonem je MAX. Ty ostatní nedatové piny jsou stejně intaktní jako u jakéhokoliv jiného podobného Embedded boardu.
00:08 < Bystroushaak> jsem ho stahl rucne a nakopiroval do nejake nahodne slozky, snad to vyjde..Tak to mě dostalo. Hezkej dlouhej zápisek. Takhle má vypadat pravej blog. Né napsat jednu otázku nebo vložit trapnej komix.
Vzpomněl jsem si, že na routerech často běhá OpenWRT, jenže ten není jen tak jednoduché zkompilovatje jen sporstá pomluva a určitě to není pravda. Teda aspoň občas.
http://
na svn://
, jmenovitě squidge/openwrt/feeds.conf.default
, a /squidge/openwrt.py
. Dál je pak nutné ošetřit řádek 153 v squidge/mksquidge_usbroot.py
do tvaru
try: cfg.module(i) except KeyError: passNěkde na netu se se mi podařilo najít script který to taky nějak řeší, bohužel až poté co jsem na to několik hodin přicházel :S Nejsem si úplně jistej jeho funkčností, ale podle všeho dělá to samé co jsem dělal já; http://openpaste.org/en/24730/, s vyjímkou toho patche
mksquidge_usbroot.py
.
Narazil jsem na to, že některé balíky prostě nejdou nainstalovat (resp. nainstalují se, ale při spuštění hlásí skutečně podivnou chybu openwrt symbol 'errno': can't handle reloc type xx), tak si teď zkouším udělat čisté OpenWRT. Mám takovej pocit, že za tu chybu totiž může to zakomentování..
Jestli se mi to podaří, tak o tom udělám další blogpost.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.