Instalacja OpenWrt na Linksysie EA4500
Ostatnia zmiana: 2015-06-29 07:49

Linksys EA4500 (i jego identyczny odpowiednik - Linksys E4200 v2) są urządzeniami wyposażonymi w dwa interfejsy radiowe, duże ilość pamięci flash i ram oraz (niestety) tylko jedno złącze USB 2.0.



Dane techniczne

  • SOC: Marvell Kirkwood Feroceon 88FR131 rev 1 (v5l) 1,2GHz
  • RAM: 128 MiB
  • Flash: 128 MiB NAND (Hynix)
  • Ethernet: 4+1 10/100/1000Mps (osobny interfejs na wan)
  • 1x USB 2.0
  • 1x biała dioda LED pod logiem Cisco
  • dwa przyciski
  • radio 2.4GHz Marvell 88W8366 (3x3)
  • radio 5GHz Marvell 88W8063 (3x3)
  • 6 wewnętrznych anten
  • sprzętowy wyłącznik zasilania

Obrazy OpenWrt

W chwili pisania tego opisu (czerwiec 2015r) modele te wspierane są obecnie tylko w wydaniu CC oraz trunku OpenWrt (choć nie są budowane domyślnie). Możliwe jest uruchomienie OpenWrt w pamięci ram (bez wpisywania danych do flash). Porty ethernet gigabitowe są w pełni obsługiwane przez swconfig. Dla radia 5GHz dostępne są tylko kanały 36, 40, 44 i 48 (ograniczenie sterownika).

Instalacja

Do instalacji niezbędne jest rozebranie urządzenia i podłączenie konsoli szeregowej.

Uruchomienie w pamięci RAM

Możliwe jest uruchomienie OpenWrt w pamięci urządzenia, bez dotykania flash.
- ustawić na stałe adres IP komputera na 192.168.1.254
- uruchomić serwer TFTP i umieścić w jego katalogu głównym plik openwrt-kirkwood-ea4500-uImage-initramfs
- podłączyć konsolę szeregową
- podłączyć router kablem z portu LAN do komputera
- uruchomić router
- przerwać wczytywanie bootloadera przez naciśnięcie dowolnego przycisku
- wykonać polecenie


    tftpboot ${loadaddr} openwrt-kirkwood-ea4500-uImage-initramfs ; bootm ${loadaddr}

Instalacja w pamięci flash

- ustawić na stałe adres IP komputera na 192.168.1.254
- uruchomić serwer TFTP i umieścić w jego katalogu głównym pliki openwrt-kirkwood-ea4500-uImage oraz openwrt-kirkwood-ea4500-rootfs.ubi
- podłączyć konsolę szeregową
- podłączyć router kablem z portu LAN do komputera
- uruchomić router
- przerwać wczytywanie bootloadera przez naciśnięcie dowolnego przycisku lub Ctrl-C
- wykonać polecenia


    tftpboot ${loadaddr} openwrt-kirkwood-ea4500-uImage ; nand erase 0x200000 0x200000 ; nand write ${loadaddr} 0x200000 0x200000
    nand erase 0x400000 0x7c00000
    tftpboot ${loadaddr} openwrt-kirkwood-ea4500-rootfs.ubi ; nand erase 0x400000 ${filesize} ; nand write ${loadaddr} 0x400000 ${filesize}

- zmodyfikować zmienne środowiskowe uboota


    setenv owrt_bootargs_root ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs rw
    setenv owrt_mtdparts mtdparts=orion_nand:0x80000@0x0(uboot),0x20000@0x80000(uboot_env),0x200000@0x200000(kernel),-@0x400000(root)
    setenv owrt_boot nand read.e \${loadaddr} 0x200000 0x200000 \; setenv bootargs \$(console) \$(owrt_mtdparts) \${owrt_bootargs_root} \; bootm \${loadaddr}
    setenv bootcmd run owrt_boot
    saveenv

Jeżeli z jakiegoś powodu nie będzie chciał wczytywać poprawnie systemu można od razu ustawić zmienne nandboot i altnandboot:


    setenv nandboot nand read.e \${loadaddr} 0x200000 0x200000 \; setenv bootargs \$(console) \$(owrt_mtdparts) \${owrt_bootargs_root} \; bootm \${loadaddr}
    setenv altnandboot nand read.e \${loadaddr} 0x200000 0x200000 \; setenv bootargs \$(console) \$(owrt_mtdparts) \${owrt_bootargs_root} \; bootm \${loadaddr}
    saveenv


Metoda alternatywna:


    tftpboot ${loadaddr} openwrt-kirkwood-ea4500-uImage-initramfs; setenv bootargs $(console) root=/dev/ram rw; bootm ${loadaddr}

Po uruchomieniu OpenWrt w pamięci urządzenia logujemy się do niego przez telnet i wykonujemy:


    # cd /tmp
    # wget ftp://192.168.1.254/openwrt-kirkwood-ea4500-rootfs.ubi
    # wget ftp://192.168.1.254/openwrt-kirkwood-ea4500-uImage
    # ubiformat /dev/mtd3
    # ubiformat /dev/mtd3 -f openwrt-kirkwood-ea4500-rootfs.ubi
    # mtd erase kernel
    # mtd write openwrt-kirkwood-ea4500-uImage kernel
    # reset

Ponownie przerywamy bootloader i wprowadzamy:


    setenv owrt_bootargs_root ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs rw
    setenv owrt_boot nand read.e \${loadaddr} 0x200000 0x200000 \; setenv bootargs \$(console) \$(owrt_bootargs_root) \; bootm \${loadaddr}
    setenv bootcmd run owrt_boot
    setenv auto_recovery no
    saveenv


Po instalacji w/w oprogramowania na modelu E4200v2 przedstawia się on jako EA4500.

Elementy specyficzne dla urządzenia

Port szeregowy

Złącze J5 na płytce, parametry 115200 8n1 (uwaga: rozstaw otworów to 2mm, nie 2.54mm!)


    1
    2
    3 RX
    4
    5 TX
    6 GND

LED

Dostępna jest jedna biała dioda LED, obsługiwana przez dwa gpio. Oba są eksportowane pod nazwami ea4500:white:health i ea4500:white:pulse. Zachowanie LED zależy od odpowiedniego ustawienia tych linii:
- wyłączenie diody LED


    # echo 0 > /sys/class/leds/ea4500:white:pulse/brightness
    # echo 0 > /sys/class/leds/ea4500:white:health/brightness

- włączenie diody LED na stałe


    # echo 0 > /sys/class/leds/ea4500:white:pulse/brightness
    # echo 1 > /sys/class/leds/ea4500:white:health/brightness

- powolne pulsowanie diody LED (sterowanie jest to sprzętowo)


    # echo 1 > /sys/class/leds/ea4500:white:pulse/brightness
    # echo 0 > /sys/class/leds/ea4500:white:health/brightness

- włączenie diody LED na stałe


    # echo 1 > /sys/class/leds/ea4500:white:pulse/brightness
    # echo 1 > /sys/class/leds/ea4500:white:health/brightness

Przyciski

Dostępne są dwa: wps i reset, obsługiwane przez skrypty w /etc/rc.button.

Flash

Dostępna jest cała przestrzeń 128MB, pomniejszona o miejsce dla uboota oraz kernela. Wykorzystywany jest system ubifs, całość jest zapisywalna.