Embedded linux op Asus WL-HDD

Heb je nog ergens een Asus WL-HDD (wireless harddisk drive) liggen of heb je er juist één gekocht voor een paar tientjes op Ebay of Marktplaats om ermee te experimenteren? Lees dit artikel dan zodat je weet hoe je embedded Linux in de vorm van OpenWrt op dit apparaatje plaatst en vervolgens de WL-HDD in wireless client mode zet.

Er wordt vanuit gegaan dat de originele software nog geïnstalleerd staat. Door het uitvoeren van deze stappen vervalt de garantie op het apparaat. Ook is het mogelijk dat door deze stappen uit te voeren het apparaat onbruikbaar wordt. Ik ben hier niet verantwoordelijk voor. Voer de volgende stappen op eigen risico uit. Stroomuitval en onnauwkeurigheid/slordigheid zijn de grootste vijanden.

Laten we beginnen met het verwijderen van de originele software om vervolgens OpenWrt te flashen.

Voorbereidingen op computer die software gaat flashen naar Asus WL-HDD.

Stap 1: Downloaden van image

Download het bestand openwrt-brcm-2.4-jffs2-4MB.trx (WhiteRussian release van OpenWrt). Het root-filesystem bij dit image is JFFS2 (Journalling Flash File System version 2) dit betekent dat je bestanden ook kunt wijzigen als je ingelogd bent op het device. Dit in tegenstelling tot SquashFS dat read-only is.

Stap 2: Installeren van Firmware Restoration Utility

Als het goed is heb je bij de Asus WL-HDD ook een CD-ROM gekregen. Op deze CD-ROM staat de ‘Firmware Restoration Utility’. Installeer deze software op een M$ Windows computer.

Stap 3: Netwerk configureren

Zorg dat op deze computer enkel 1 netwerkkaart actief is en disable alle wireless netwerk devices. Stel de actieve netwerkkaart in op IP-address: 192.168.1.2 met subnet mask 255.255.255.0 DNS en gateway zijn onbelangrijk. Verbind deze computer middels een kabel met een hub/switch om deze vervolgens met een kabel met de Asus WL-HDD te verbinden.

Flashen van OpenWrt naar Asus WL-HDD

Stap 1: Activeer de TFTP-server op de Asus WL-HDD

Om het image te kunnen uploaden moet op de WL-HDD de ingebouwde Trivial File Transfer Protocol (TFTP)-server draaien. Voer hiervoor de volgende stappen uit:

  1. Verwijder de voeding van de WL-HDD.
  2. Druk de reset-button in en houd deze ingedrukt.
  3. Plaats de voeding
  4. Laat de reset-button los zodra de power-led begint te knipperen. Dit is na zo’n 4 seconden. De interval van het knipperen is +/- 1 seconde.

De Asus WL-HDD is nu klaar om een image te ontvangen via de ethernetkabel.

Stap 2: Flash het nieuwe image

Nu gaan we daadwerkelijk het OpenWrt image flashen naar de Asus WL-HDD. Belangrijk is dat de stroomtoevoer niet onderbroken wordt en dat de kabels verbonden blijven.

  1. Start de Firmware Restoration Utility
  2. Kies het nieuwe image: openwrt-brcm-2.4-jffs2-4MB.trx
  3. Start met flashen
  4. Wacht geduldig totdat het flashen klaar is

Na deze stap hoeven we geen handelingen meer uit te voeren met M$ Windows. Mijn dual-boot machine heb ik herstart met Linux als operating system. In de volgende stappen ga ik ervan uit dat de Asus WL-HDD met een ethernetkabel is verbonden (via een switch/hub) met een Linux computer. Stel op de Linux computer de netwerk interface in middels het commando: sudo ifconfig eth0 192.168.1.2 Om de WL-HDD te benaderen moet men immers op hetzelfde subnet zitten. Vervang eth0 eventueel door een andere naam wanneer een ander network interface wordt gebruikt.

Configureren van OpenWrt

Verwijder de voeding van de Asus WL-HDD en sluit deze vervolgens opnieuw aan. Het apparaat zal nu de eerste keer OpenWrt booten.

Shields up: We kunnen nu middels telnet een password zetten.

  1. telnet 192.168.1.220 (inloggen als root zonder password)
  2. Voer nu op de prompt van OpenWrt in: passwd
  3. Vervolgens wordt 2-maal om het nieuwe password gevraagd. Voer 2-maal hetzelfde password in (en onhoud dit).

Het kan zijn dat het zetten van het password de eerste keer fout gaat. Reset de WL-HDD door de voeding te verwijderen en opnieuw de voeding te plaatsen. Begin vervolgens weer met stap 1 (telnet).

Inloggen op OpenWrt met SSH

Vanaf nu kunnen we inloggen op de Asus WL-HDD met SSH (Secure SHell). Dit doen we met het volgende commando: ssh root@192.168.1.220 Voer vervolgens het password in dat je bij de vorige stap in hebt gesteld.

Laten we eens rustig rondkijken op het device. Wat zijn belangrijke zaken?

  • Met uname -a kunnen we bijvoorbeeld zien welke Linux-kernel er draait en wanneer deze gebouwd is.
  • dmesg toont ons logging van het boot-proces.
  • df laat ons de filesystems zien en hoeveel ruimte er nog over is.
  • cat /proc/cpuinfo toont ons welke microprocessor er in dit device zit.
  • Met het commando ps auxfww kunnen we zien welke processen actief zijn.
  • logread toont ons de system-log-file.

Non-volatile random access memory

In de WhiteRussian release van OpenWrt en vaak ook bij andere embedded Linux varianten worden configuratie-variabelen geplaatst in het non-volatile random access memory (NVRAM). Dit is RAM-geheugen dat niet wordt gewist bij het verwijderen van de voeding. Bij een ‘normale’ Linux-distributie worden dergelijke waarden opgeslagen in de directory: /etc

  • Om de huidige settings van het NVRAM te zien, kan het volgende commando ingevoerd worden: nvram show | more (spatie voor volgende pagina).
  • Men kan een variabele een waarde geven middels het commando:
  • Een specifieke variabele uitlezen kan met het commando:
  • Het verwijderen van een variabele kan met het commano:

Eén van de nadelen is echter dat dit geheugen niet onbeperkt vaak gewist en geschreven mag worden.  Het maximale aantal wis/schrijfacties ligt op duizenden tot tienduizenden keren. Door het veranderen van variabelen kan het apparaat ook onbruikbaar worden. Bijvoorbeeld omdat je locked out (buitengesloten) wordt.  Denk hierbij aan verkeerde netwerk- of firewall-settings.

Zaak is dus om deze variabelen pas echt naar het NVRAM-geheugen te schrijven wanneer je zeker bent dat de waarden goed zijn. Dit om het aantal wis/schrijf acties te beperken en een lock out te voorkomen. Het reset/poweroff bestendig schrijven naar NVRAM kan met het commando: nvram commit Andersom moet je dit commando ook niet vergeten uit te voeren na het wijzigen van settings, anders ben je deze na een reboot kwijt.

Nieuwe software installeren

De OpenWrt versie WhiteRussian kent een package manager zoals apt-get / dpkg van Debian en Ubuntu. De package manager van OpenWrt (en veel andere embedded linux distributies) is IPKG (Itsy Package Management System).

Voordat we daadwerkelijk updates of nieuwe packages binnen kunnen halen moeten er nog netwerksettings worden gemaakt zodat de gateway naar het Internet bekend is. Ook moet de domain name server nog worden opgegeven. Dit doen we respectievelijk met de volgende commando’s:

Als het goed is kunnen we nu de packagelist updaten met het commando:

Ook kunnen we de geïnstalleerde packages updaten met het commando:

Let wel op dat de Asus WL-HDD maar beperkte ‘diskruimte’ heeft.

ipkg list_installed toont de geïnstalleerde packages en ipkg list toont alle beschikbare packages.

Wireless client mode

Zoals gezegd willen we dit device laten functioneren in wireless client mode en niet als wireless access point. Hiervoor moeten we een aantal dingen doen. Allereerst moeten we de packages ‘Proprietary Broadcom utility for setting wireless driver parameters’ (wl) en Proprietary Broadcom WPA Authenticator/Supplicant (nas) installeren. Dit doen we met de comando’s:

Nu zorgen we ervoor dat de firewall en DHCP (Dynamic Host Configuration Protocol)-server niet worden gestart bij het booten. Dit doen we door het execute-bit te verwijderen van de desbetreffende initialisatie-scripts:

Dit zorgt wel voor een onschuldige melding (Permission denied) in de system-log maar daarnaast is het eenvoudig om de scripts weer actief te maken door het execute-bit weer te zetten.

Herstart de Asus WL-HDD nu een keer zodat de firewall geheel open staat. We kunnen dit ook doen met IPTABLES, maar een reboot is veel sneller en eenvoudiger.

Wanneer je opnieuw bent ingelogd met SSH is het nu tijd om de NVRAM-settings aan te passen zodat de Asus WL-HDD verbinding gaat maken met het wireless accesspoint.

In dit artikel wordt ervan uitgegaan dat men gebruik maakt van een ‘FRITZ!Box Fon WLAN 7170 Annex A’ als accesspoint die nieuwe WLAN-devices toestaat (Allow all new WLAN devices). De radio-instellingen zijn: WLAN standard: 802.11g+b, Channel: 2 en Enable 802.11g++).  Voor security is gekozen: WPA encryption, WPA mode: WPA2 (CCMP). De WLAN key moet ingevuld zijn en hebben we nodig met het instellen van de NVRAM-variabele: wl0_wpa_psk. Het WLAN subnet van de FRITZ!Box is: 192.168.178.x Het configureren van de FRITZ!Box valt buiten de scope van dit artikel.

Stel eerst de wireless interface (wl0) in.

Merk op dat we met \[spatie] voor ‘FRITZ!Box Fon WLAN 7170 Annex A’ een spatie kunnen weergeven. Vul voor wl0_wpa_psk=xxxxxxxxx de juiste waarde in, deze waarde kan in het wireless accesspoint bijvoorbeeld aangeduid zijn als: WLAN key.

LAN-settings

Stel eerst de LAN-settings in. Verwijder de bridge.

WIFI-settings

Stel nu de WIFI-variabelen in:

WAN-settings

WAN bestaat niet op de Asus WL-HDD. Settings worden dus gewist of op defaults gezet:

Voer vervolgens een nvram commit uit om de settings weg te schrijven.

Het is nu tijd om het beestje te restarten. Wees er mentaal op voorbereid dat er een kans is dat je na het opstarten niet meer via de ethernetkabel of WIFI in kunt loggen. Niet kunnen inloggen betekent dat je NIETS meer kunt doen met de Asus WL-HDD !

Na een herstart zou het mogelijk moeten zijn om zowel via WIFI als ethernetkabel in te loggen op de Asus WL-HDD.

  • Inloggen via ethernetkabel: ssh root@192.168.1.220
  • Inloggen via WIFI: ssh root@192.168.178.35

Tip 1 Locked out: Werken beide methoden niet… oh oh.. je hebt jezelf buiten gesloten! In principe is het apparaat nu waardeloos geworden… De volgende stap zou kunnen zijn om het device in OpenWrt fail-safe mode op te starten, dit is mij echter nog niet gelukt. Gelukkig zit er een bug in de bootloader die de NVRAM-variabelen  (onterecht) terugzet naar factory defaults. Om deze bug uit te buiten moet je het volgende doen:

Verwijder de voeding, plaats voeding doe dit vaak achter elkaar met verschillende tussenpozen. Als je geluk hebt dan kun je na een tijdje inloggen op: ssh root@192.168.1.1 Let op! Dit is een ander IP-adres. Het moge duidelijk zijn dat dit een noodoplossing is, wanneer niets anders meer lukt.

Nu is ook duidelijk waarom tijdens het booten de voeding aangesloten moet blijven. Wordt deze verwijderd in het boot proces dan kunnen NVRAM-variabelen gewist worden!

Tip 2: Herstarten van WIFI

Lees meer over de Asus WL-HDD en OpenWrt


Hieronder volgen nog waarden die ik heb gevonden bij mijn werkende Asus WL-HDD in wireless client mode met als besturingssysteem OpenWrt WhiteRussian.

De complete lijst met NVRAM-settings

DMESG-uitvoer (kernel messages)

DF-uitvoer (disk gebruik)

UNAME-uitvoer (systeem informatie)

CPU-info (microprocessor informatie)

IFCONFIG-uitvoer (network interfaces)

IWCONFIG-uitvoer (wireless network interfaces)

ROUTE-uitvoer (network routing table)