Przygotowanie i instalacja OpenWrt na routerze jjPlus JWAP003
Ostatnia zmiana: 2013-11-26 18:43

Krótka specyfikacja

- architektura: Atheros ar71xx
- bootloader: Redboot
- procesor Atheros AR7130 rev 2 300MHz
- Flash: 8 MiB
- RAM: 32MiB
- WLAN: brak (1x złącze miniPCI)
- chipset Ethernet: 10/100 Mbps, 1xwan, 1xlan
- 2x USB 2.0 (wyprowadzone piny, niezbędna dodatkowa płytka ze złączami)
- 1x rs232c (wyprowadzone piny, niezbędna dodatkowa płytka ze złączami)
- przycisk reset
- gpio, serial, dodatkowe wyjścia LED, czujnik temperatury LM75

Stan projektu

Ruter obecnie nie jest obsługiwany przez OpenWrt. Stworzona została przeze mnie odpowiednia łatka na wersję rozwojową (trunk) która zawiera wsparcie dla tej platformy (https://dev.openwrt.org/ticket/7471).

Port szeregowy

Dostępny jest na płytce. Niezależnie od tego dostępne jest normalne złącze RS232C dzięki zewnętrznej płytce developerskiej.


1 3.3V 2 3.3V
3 GPIO7 4 UART_RX
5 GPIO8 6 UART_TX
7 NC 8 GND
9 GND 10 GND

Kompilacja

Należy użyć i skompilować aktualną wersję OpenWrt trunk pobraną z svn. Jako platformę należy wybrać Atheros AR71xx/AT7240/AR913x, target profile - jjPlus JWAP003, target image - squashfs. Z kolei w Kernel modules -> USB Support należy zaznaczyć kmod-usb-core oraz kmod-usb2 i kmod-ohci. Inne pakiety można zaznaczyć wg potrzeb, w szczególności jeżeli posiadamy kartę wlan należy pamiętać o pakietach wpad-mini, iw, crda oraz odpowiednich sterownikach do tej karty.
Firmware należy skompilować w standardowy sposób (make). Plik wynikowy dla tego routera to:

  • openwrt-ar71xx-generic-jwap003-kernel.bin - kernel
  • openwrt-ar71xx-generic-jwap003-rootfs-squashfs.bin - system plików

Instalacja przez bootloader

Po kolei należy:
- wyłączyć zasilanie płytki
- podłączyć kabel ethernet do rutera (do portu wan) i komputera
- ustawić adres karty sieciowej w komputerze na stałe na 192.168.1.3
- w katalogu głównym serwera TFTPD umieścić pliki openwrt-ar71xx-generic-jwap003-kernel.bin oraz openwrt-ar71xx-generic-jwap003-rootfs-squashfs.bin
- podłączyć kabel szeregowy do płytki
- uruchomić terminal z parametrami 115200 8n1
- włączyć zasilanie
- przez Ctrl-C przerwać ładowanie bootloadera.

Następnie wystarczy wydać polecenia:


    fis init
    load -r -b 0x80060000 openwrt-ar71xx-generic-jwap003-kernel.bin
    fis create linux.bin
    load -r -b %{FREEMEMLO} openwrt-ar71xx-generic-jwap003-rootfs-squashfs.bin
    fis create rootfs

Należy pamiętać także o zmianie skryptu startowego (polecenie fconfig bootloadera) na następujący:


    fis load -l linux.bin
    exec

Czujnik temperatury

Należy zainstalować pakiety i2c-tools, kmod-hwmon-lm75, kmod-i2c-core wraz z zależnościami zależności. Następnie odczytać temperatury:


    root@OpenWrt:/# i2cdetect -l
    i2c-0 i2c i2c-gpio0 I2C adapter
    root@OpenWrt:/# i2cdetect i2c-gpio0
    WARNING! This program can confuse your I2C bus, cause data loss and worse!
    I will probe file /dev/i2c-0.
    I will probe address range 0x03-0x77.
    Continue? [Y/n] y
        0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --
    root@OpenWrt:/# i2cget i2c-gpio0 0x48 0xaa w
    WARNING! This program can confuse your I2C bus, cause data loss and worse!
    I will read from device file /dev/i2c-0, chip address 0x48, data address
    0xaa, using read word data.
    Continue? [Y/n]
    0x0133
    root@OpenWrt:/#

i zdekodować otrzymaną wartość np. takim skryptem (znalezione w sieci):


    #!/bin/sh
    RAWTEMP=$(i2cget -y 0 0x48 0xaa w)
    if (echo "$RAWTEMP"| grep -Eq '0x[0-9a-f]{4}'); then
        HEXORDERED=$(echo "$RAWTEMP"|sed -r 's/0x([0-9a-f]{2})([0-9a-f]{2})/0x\2\1/')
        if [ $(($HEXORDERED)) -ge 32768 ]; then
                DECRAW=$(( -65536+$HEXORDERED ))
        else
                DECRAW=$(($HEXORDERED))
        fi
    
        TEMPNODOT=$(( ($DECRAW/16)*625 ))
        TEMPDOT=$(echo "$TEMPNODOT" | sed -r 's/([0-9]{4})$/.\1/')
                                                                                                                                                                                                
        echo "Temperatura: $TEMPDOT stC"
    fi