Ako si napísať vlastný program pre OpenWRT
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Ako si napísať vlastný program pre OpenWRTAko si napísať vlastný program pre OpenWRT

 

Ako si napísať vlastný program pre OpenWRT

Google       Google       27. 3. 2007       10 540×

V poslednej dobe sa začali dosť rozširovať malé domáce routre, na ktorých je možné sprevádzkovať OpenWRT Linux. Tento článok nieje o inštalácii tohto systému. Tento článok je skôr o tom, ako na C/C++ programy pre zariadenia s týmto systémom.

Reklama
Reklama
Ako prvé si budeme musieť povedať, ako sú distribuované aplikácie pre tento systém. Systém beží na zariadeniach, ktoré niesu tak pamäťovo vybavene ako desktopy. Kompilácia priamo na tomto zariadení, sa z toho dôvodu komplikuje, no nieje nemožná. Omnoho lepšia voľba, a dosť používaná, je program skompilovať do takzvaného balička, následne preniesť na zariadenie s OpenWRT a nainštalovať. OpenWRT na distribúciu aplikácií používať program ipkg. Tým z vás, ktorí používajúci Ubuntu bude ipkg pripomínať apt. Ide o program, na správu balíčkov v OpenWRT.

Čo s tým ma dočinenia programovanie pre naše zariadenie? Totižto, vývoj programu budeme musieť realizovať na našom desktope, následne náš program prevedieme na balíček, a ten nainštalujeme na našom zariadení s OpenWRT. Nato, aby sme mohli na našom desktope vytvoriť balíček pre OpenWRT systém, je potrebne si stiahnuť OpenWRT SDK, ktoré nájdeme na www.openwrt.org. OpenWRT SDK si rozbalíme do domovského adresára. V domovskom adresári by po rozbalení mal vzniknúť adresár OpenWrt-SDK-Linux-i686-1.

Hello World

Asi ako prvé, si skúsime klasicky C program „Hello World“, na ktorom si vysvetlíme, ako program skompilovať a dostať do zariadenia. Pre náš program si vytvoríme adresár hello v OpenWrt-SDK-Linux-i686-1/packages. V tomto adresári si vytvoríme main.c z nasledujúcim, dobre známym, obsahom.

main.c:


#include <stdio.h>
int main()
{
   printf("Hello World\n");
   return 0;
} 

Najpodstatnejšia časť príde teraz. Totižto, pre program je potrebne vytvoriť balíček. OpenWRT SDK prechádza všetky adresáre v package adresári a pre každý balíček volá súbor Makefile. V tomto súbore sa nachádzajúcu pravidla ako kompilovať, čo kompilovať, čo a kam inštalovať, popis programu atď. Pre náš program si vytvoríme v tom istom adresári, ako je main.c nasledujúci Makefile.

Makefile:

include $(TOPDIR)/rules.mk 

PKG_NAME:=hello
PKG_VERSION:=1.0
PKG_RELEASE:=1 
PKG_BUILD_DIR:=$(BUILD_DIR)/hello 

include $(INCLUDE_DIR)/package.mk 

define Package/hello
   TITLE:=Hello World
   DESCRIPTION:=\
      A simple HELLO WORLD program
endef 

define Build/Compile
   $(TARGET_CC) $(TARGET_CFLAGS) -o $(PKG_BUILD_DIR)/hello main.c
endef 

define Package/hello/install
   $(INSTALL_DIR) $(1)/usr/bin
   $(INSTALL_BIN) $(PKG_BUILD_DIR)/hello.out $(1)/usr/bin/
endef 

$(eval $(call BuildPackage,hello)) 

Makefile je písaný podľa určitej šablóny, ktorej OpenWRT SDK rozumie. Teraz si prejdeme najdôležitejšie riadky. Do prvej trojice premenných PKG_NAME, PKG_VERSION, PKG_REVISION zapíšeme základne informácie o baličku, jeho meno, verziu a revízne číslo. Na základe týchto údajov, sa vygeneruje výsledný *.ipk súbor. Do premennej PKG_BUILD_DIR zapíšeme cestu, kde sa naša aplikácia bude kompilovať. Ide o adresár package/hello. Ďalej nasleduje sekcia define Package/hello. V tejto časti sa zadávajú informácie o baličku ako jeho popis, závislosti, kategória a sekcia programu. V našom prípade, sa jedna len o meno a popis programu. Ďalšia sekcia je define Build/Compile. Do tejto časti vložíme skript, ktorý skompilujte náš program. Je potrebne si uvedomiť, že pre kompiláciu sa nepoužíva klasicky kompilátor GCC ale upravený kompilátor. Jeho meno je v premennej $(TARGET_CC). Posledná časť je Package/hello/install. Do tejto časti, sa umiestňuje čo sa ma kde kopírovať, keď dáme náš balíček inštalovať. Je čas zahájiť kompiláciu a build nášho balička. K tomu nieje potrebne nič viac, ako spustiť nasledujúci sled príkazov v adresári OpenWrt-SDK-Linux-i686-1.


sn3d@sn3d-laptop:~/OpenWrt-SDK-Linux-i686-1$ make clean
sn3d@sn3d-laptop:~/OpenWrt-SDK-Linux-i686-1$ make world 

V prípade, že kompilácia zlyhala z nejakého dôvodu, je možne zapnúť kompletný výpis, pomocou make world V=99. Ak naopak všetko prebehlo v poriadku, v adresári ~/OpenWrt-SDK-Linux-i686-1/bin/packages nájdeme náš skompilovaný balíček hello_1.0-1_mipsel.ipk. Náš novovytvorený balíček, teraz prenesieme na zariadenie s OpenWRT do adresára /tmp. To môžeme uskutočniť rôznym spôsobom, buď cez FTP. No, v prípade, že na našom zariadení nebeží FTP, tak použijeme SCP.


sn3d@sn3d-laptop:~/OpenWrt-SDK-Linux-i686-1/bin/packages$ scp hello_1.0-1_mipsel.ipk root@192.168.1.1:/tmp/ 

Teraz sa nalogujeme na naše zariadenie s OpenWRT. V adresári /tmp, by sme mali mať náš balíček. Na inštaláciu balička použijeme ipkg, a to nasledovným spôsobom:


root@OpenWrt:~# ipkg install hello_1.0-1_mipsel.ipk

Inštalácia balíčka, by mala prebehnúť bez problémov. Náš program, by sa mal momentálne nachádzať v /usr/bin. Ako posledné si náš program spustíme a mali by sme dostať nasledujúci text:


root@OpenWrt:~# hello
Hello World

Závislosti na knižniciach a C++

Teraz si ukážeme ako na C++ program, a taktiež si demonštrujeme, ako sa vytvára závislosť nášho programu na určitej knižnici. V adresári package si teraz vytvoríme adresár hello2, kam uložíme main.cc z nasledujúcim obsahom.

main.cc:


#include  
using namespace std; 
int main()
{
   cout << "Hello World++" << endl;
   return 0;
}

Ide o najjednoduchší C++ program. Takmer každý C++ program pre svoju funkčnosť potrebuje knižnicu stdlib++. V OpenWRT existuje takto knižnica ako uclibc++. Ak použijete Makefile z prvého príkladu, pri kompilácii z V=99 sa na vás vyvalí množstvo chýb. Poďme si teda upraviť Makefile, tak aby kompilácia prebehla.

Makefile:

include $(TOPDIR)/rules.mk 

PKG_NAME:=hello2
PKG_VERSION:=1.0
PKG_RELEASE:=1 
PKG_BUILD_DIR:=$(BUILD_DIR)/hello2 

include $(INCLUDE_DIR)/package.mk 

define Package/hello2
   TITLE:=Hello World for C++
   DESCRIPTION:=\
      A simple HELLO WORLD program for C++
   DEPENDS:=uclibc++
endef 

define Build/Compile
   $(TARGET_CC) $(TARGET_CFLAGS) -luClibc++  -o $(PKG_BUILD_DIR)/hello2 main.cc
endef 

define Package/hello2/install
   $(INSTALL_DIR) $(1)/usr/bin
   $(INSTALL_BIN) $(PKG_BUILD_DIR)/zvrp $(1)/usr/bin/
endef 

$(eval $(call BuildPackage,hello2)) 

Nastali tu dve základne zmeny. Do sekcie define Package/hello2 pribudol riadok z DEPENDS. Do tejto premennej sa vkladajú mena všetkých knižníc, na ktorých je balíček závislý. Ipkg pri inštalácii, tento zoznam prejde a keď zisti, že v systéme sa potrebná knižnica nenachádza, vypíše nám chybu. V tomto prípade je potrebná uclibc++ knižnica. Ďalšiu dôležitú vec sme pridali do sekcie Build/Compile. Ide o prepínač -luClibc++, ktorý hovorí kompilátoru, aby prilinkoval knižnicu uclibc++. V ostatných prípadoch sa zmenilo len meno balička z hello na hello2. Teraz už môžeme prejsť ku kompilácii pomocou make world. Po úspešnej kompilácii, by sme mali mat opäť v adresári bin/packages/ súbor hello2_1.0-1_mipsel.ipk, ktorý prenesieme opäť do /tmp adresára na našom zariadení, a to pomocou SCP.


sn3d@sn3d-laptop:~/OpenWrt-SDK-Linux-i686-1/bin/packages$ scp hello2_1.0-1_mipsel.ipk root@192.168.1.1:/tmp/ 

Prihlásime sa na naše zariadenie a pokúsime sa nainštalovať balíček. Pravdepodobne, keď inštalujete na čerstvo flashnuty OpenWRT, dostanete nasledujúcu chybu:


root@OpenWrt:~# ipkg install hello2_1.0-1_mipsel.ipk
Installing hello2 (1.0-1) to root...
Nothing to be done
An error ocurred, return value: 1.
Collected errors:
ERROR: Cannot satisfy the following dependencies for hello2:
         uclibc++

Dôvod je nám hneď jasný. Totižto v systéme neexistuje uclibc++, na ktorej je závislí náš program hello2. Z toho dôvodu ipkg nenainštaluje náš program. Najprv si teda budeme musieť zaobstarať balíček chýbajúcej knižnice. Balíčky sa nachádzajú na downloads.openwrt.org, alebo necháme ipkg, aby balíček našiel a stiahol sám, ako to robí apt v Ubuntu.


root@OpenWrt:~# ipkg update
root@OpenWrt:~# ipkg install uclibc++ 

Po úspešnej inštalácii knižnice, je teraz už možné náš balíček nainštalovať. Po úspešnej inštalácii, už môžeme náš program spustiť. Mali by sme dostať nasledujúci výstup:


root@OpenWrt:~# hello2
Hello World++ 

Záverom

Čo dodať k záveru? Snáď len to, že tento článok nemal za úlohu popísať ako portovať rôzne aplikácie do balíčkov. O tom je napísaný dokument priamo na www.openwrt.org. Tento článok mal ukázať ako napísať aplikáciu pre váš router, na ktorom beží tento operačný systém. Na Makefile systém, ktorý sa v OpenWRT SDK používa, si je treba zvyknúť, ale výsledok určite stojí za to.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů

Nové články

Obrázek ke článku Blockchain & Bitcoin konference

Blockchain & Bitcoin konference

V pátek 19. 5. 2017 se v pražském konferenčním centru Andel’s konala Blockchain & Bitcoin konference. Řada odborníků a podnikatelů v oboru blockchainu a kryptoměn představila možnosti budoucího směřování tohoto oboru. Speakeři většinou rusky mluvící provenience prezentovali řešení svých firem založená na technologii blockchainu.

Reklama
Reklama
Obrázek ke článku Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Bezpečnostní tým Cisco Talos odhalil celkem 4 kampaně dosud neobjeveného malwaru, který dostal jméno KONNI. Ten se dokázal úspěšně maskovat od roku 2014. Zpočátku se malware zaměřoval pouze na krádeže citlivých dat. Za 3 roky se ale několikrát vyvinul, přičemž jeho současná verze umožňuje útočníkovi z infikovaného počítače nejenom krást data, ale i mapovat stisky na klávesnici, pořizovat screenshoty obrazovky či v zařízení spustit libovolný kód. Pro odvedení pozornosti oběti zasílali útočníci v příloze také obrázek, zprávu a výhružkách severokorejského režimu či kontakty na členy mezinárodních organizací.

Obrázek ke článku Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Trend Micro, celosvětový lídr v oblasti bezpečnostních řešení a VMware, přední světový dodavatel cloudové infrastruktury a řešení pro podnikovou mobilitu, oznámily výsledky výzkumu mezi českými a slovenskými manažery zodpovědnými za ochranu osobních údajů, který zjišťoval, jak jsou připraveni na nové nařízení o ochraně osobních údajů (GDPR). Většina firem v České republice a na Slovensku nad 100 zaměstnanců je již s novým nařízením GDPR obeznámena. Výzkum provedený ve spolupráci s agenturou Ipsos ukázal, že téměř 8 firem z 10 o nařízení ví, přičemž jeho znalost je o něco vyšší na Slovensku (89 %) než v České republice (69 %).

Obrázek ke článku Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Jeden z nejznámějších ransomwarů, Locky, se vrací. Po většinu roku 2016 patřil mezi nejrozšířenější vyděračské softwary. Ke svému šíření využíval emailové kampaně s infikovanými přílohami. Ransomware Locky byl rozesílán prostřednictvím botnetu (internetový robot zasílající spamy) Necurs. Jeho aktivita na konci roku 2016 téměř upadla a spolu s ní i šíření ransomwaru Locky. Před několika týdny se Necurs opět probudil a začal posílat spamy nabízející výhodný nákup akcií. Dne 21. dubna zaznamenal bezpečnostní tým Cisco Talos první velkou kampaň ransomwaru Locky prostřednictvím botnetu Necurs za posledních několik měsíců.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý