Okee je hebt een device waarop OpenWrt loopt (bijvoorbeeld de Asus WL-HDD) en je wilt nu zelf software schrijven voor dit device. We gaan ervan uit dat de toolchain voor OpenWrt aanwezig is. Heb je deze nog niet, lees dan het artikel Compileren van OpenWrt.
Voorbereidingen
Op de build computer, dat is de computer met de OpenWrt-source/SDK/toolchain, gaan we het HelloWorld-package bouwen.
- Ga eerst naar de directory met de OpenWrt-source:
cd ~/OpenWrt/8.09
- Maak hier de directory-structuur voor het nieuwe package:
mkdir package/helloworld mkdir package/helloworld/src
HelloWorld-programma schrijven
Nu schrijven we een simpel HelloWorld-programma dat de tekst “Hello world!” naar standaard uitvoer (stdout) stuurt: package/helloworld/src/helloworld.c
#include <stdio.h> int main(void){ printf("Hello world!\n\n"); return 0; }
Makefiles maken
Een simpele Makefile (package/helloworld/src/Makefile) voor dit programma ziet er zo uit:
helloworld: helloworld.o $(CC) $(LDFLAGS) helloworld.o -o helloworld helloworld.o: helloworld.c $(CC) $(CFLAGS) -c helloworld.c clean: rm *.o helloworld
Tip 1: Let op de tabs in plaats van spaties aan het begin van de regels.
Tip 2: Dit programma moet standalone kunnen compileren en runnen:
cd package/helloworld/src && make && ./helloworld && cd $OLDPWD
Maak nu de Makefile (package/helloworld/Makefile) voor OpenWrt. Dit is als het ware het ‘recept’ voor het package. Let wederom op de tabs in plaats van spaties aan het begin van de regels.
include $(TOPDIR)/rules.mk PKG_NAME:=helloworld PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk define Package/helloworld SECTION:=utils CATEGORY:=Utilities TITLE:=Helloworld endef define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ endef define Build/Configure endef define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) $(TARGET_CONFIGURE_OPTS) endef define Package/helloworld/install $(INSTALL_DIR) $(1)/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/ endef $(eval $(call BuildPackage,helloworld))
Selecteren van package
Zorg nu dat het HelloWorld-package is gekozen met het commando: make menuconfig
- Selecteer: Utilities
- Zoek ‘helloworld‘ op, ga erop staan en druk op M. Als het goed is verschijnt nu de letter M voor ‘helloworld’.
- Ga dit configuratiemenu uit (2x Exit) en sla de nieuwe OpenWrt configuratie op, wanneer hierom gevraagd wordt.
Compileren
Compileer nu het package: ‘helloworld’:
make package/helloworld/compile V=99
Als het compileren en packagen goed is gegaan zal het HelloWorld-package zich nu hier bevinden: bin/packages/mipsel/helloworld_1_mipsel.ipk
Tip: Verschijnt tijdens het compileren een melding zoals: ‘missing separator‘, controleer dan of in de Makefiles inderdaad tabs zijn gebruikt en geen spaties.
HelloWorld-package installeren en testen op OpenWrt-device
- Kopieer nu dit package naar het device waar OpenWrt op draait. Hier wordt aangenomen dat het IP-adres van dat device: 192.168.1.2 is:
scp bin/packages/mipsel/helloworld_1_mipsel.ipk root@192.168.1.1:/tmp
- Installeer het HelloWorld-package:
opkg install /tmp/helloworld_1_mipsel.ipk
- Voer het HelloWorld-programma uit:
helloworld
Let op de uitvoer van dit programma!
…. Hello world! …. dat hadden we nou niet verwacht.
Enkele handige OPKG-commando’s
- Verwijder het HelloWorld-package:
opkg remove helloworld
- Informatie over het package HelloWorld:
opkg info helloworld
- Welke bestanden bevat het package HelloWorld? :
opkg files helloworld