Od momentu pojawiania się routera TP-LINK TL-WR703N trochę czasu już upłynęło. Mimo że model dostępny jest tylko w krajach azjatyckich (w europie ma swój odpowiednik w modelu MR3020 - choć jest większy) stał się szybko "koniem" pociągowym dla wielu różnych modyfikacji. Użytkownicy opracowali dodatkowe moduły rozszerzające jego możliwości, płytka została dokładnie zbadana i został sporządzony jej schemat ideowy. Dostępność procesorów Atherosa AR933x na rynku przyczyniło się także do powstania całej gamy mniej lub bardziej podobnych urządzeń czy modułów, które przez serwisy aukcyjne stały się dostępne na całym świecie.
Jednym z takich urządzeń jest
GL.iNet. Na pierwszy rzut oka jest ono bardzo podobne do jednego z modeli z licznego portfolio TP-LINK, jednakże został zaprojektowany inaczej. Sprzętowo mamy więc do czynienia z jednostką wyposażoną w:
- procesor AR9330 taktowany 400MHz
- 8 lub 16 MB pamięci flash (zależy od wersji)
- 64MB pamięci RAM
- wifi 150Mbps
- 2x Ethernet RJ45 10/100 (domyślnie wan + lan)
- złącze microUSB przeznaczone do zasilania urządzenia
- złącze USB 2.0 - host, mające możliwość podłączenia zewnętrznych urządzeń typu pendrive czy kamera
- jeden przycisk
- dwie diody led (czerwona i zielona)
Całość zamknięta jest w naprawdę małym pudełeczku w kolorze białym. W środku znajduje się jeszcze trochę miejsca co możecie zobaczyć na zdjęciach. Zauważcie, że domyślnie jest wlutowane złącze RS232 (TTL), dostępne są także punkty lutownicze z napięciem 3.3V i 5V oraz szereg punktów z GPIO.
Więcej zdjęć można obejrzeć w galerii:
http://galeria.tech-blog.pl/GLiNet/Sam sprzęt nie powala możliwościami sprzętowymi - ot kolejny klon o takich samych parametrach jak wiele innych urządzeń. Jednakże producent całość wzbogacił o odpowiednie oprogramowanie - i domyślnie jest to OpenWrt w wersji rozwojowej (trunk) z LuCI w tle, choć tak szybko tego interfejsu nie zobaczymy - gdyż producent dołączył swoją własną "nakładkę".
Oprogramowanie to (w przeciwieństwie do samego LuCI) jest bardzo przyjazne dla zwykłego użytkownika i wnosi kilka ciekawych nowości. Przy pierwszym uruchomieniu urządzenia (parametry do połączenia są na naklejce z tyłu obudowy) zostaniemy zapytani o wybór języka (chiński lub angielski), wybór strefy czasowej (można to zrobić wybierając odpowiedni obszar na zaprezentowanej mapce) oraz ustawić hasło. Po zalogowaniu pojawi na się dość przyjazne menu podzielone na kategorie konfiguracyjne, pobierania danych, webkamerę, przeglądarkę plików i oprogramowanie.. Jeżeli przyjrzymy się dobrze menu to można zauważyć kilka ciekawostek:
- urządzenie samo sprawdza "status internetu" więc mamy od razu informacje czy jest połączenie z internetem czy nie
- jeżeli jest połączenie to tworzony jest domyśle DDNS i możemy mieć dostęp do urządzenia z internetu
- urządzenie samo sprawdza aktualność oprogramowania które może być pobrane i zaktualizowane.
- wszystkie potrzeby restartu urządzenia kończą się pojawieniem wykrzyknika w menu, czyli mamy jawną sygnalizację
Reszta opcji to standardowe możliwości które powinny się znaleźć w każdym oprogramowaniu: zmiana wifi, adresów ip itd. Znajdziemy także tu możliwość pobierania danych z BT/HTTP/FTP (w tej roli występuje Aria2) oraz wyświetlania obrazu z kamery (mjpg-streamer). Za udostępnianie plików odpowiada samba, natomiast sam serwer http to lighttpd. Osobiście uważam że ten dodatek to bardzo dobry ukłon w stronę początkujących osób; Ci bardziej zaawansowani mają możliwość wejścia w LuCI i ustawieniu systemu wg własnych potrzeb.
Poniżej można obejrzeć wygląd tej nakładki.
Warto także wspomnieć, że dostępne są aplikacje na Androida i na iPhona do obsługi tego urządzenia.
Sprzęt wydaje się być wymarzoną platformą dla tych co lubią eksperymentować - mały, wyprowadzone wszystko co trzeba, ma usb, dwa porty sieciowe, wifi. Dla zwykłego użytkownika też może być przydatny - choć na chwilę obecną brakuje w gui opcji od modemów 3G (jest w LuCI). No i w końcu dla nas - OpenWrt praktycznie daje nieograniczone możliwości, choć pamiętajmy że jest to trunk który cały czas się rozwija i zmienia.
Jest jednak jedno "ale". Producent wykonując urządzenie nie wykonał kalibracji układu radiowego. Wyszedł z założenia że układ jest na tyle stabilny i nie wykazuje odchyleń, że takie same dane kalibracyjne wystarczą dla wszystkich urządzeń. Problemem może być też złącze USB - jest trochę zbyt blisko gniazda ethernet. Wystarczy trochę szerszy pendrive czy modem USB i już możemy nie mieć możliwości na włożenie wtyczki od kabla ethernet.
Sprzęt do testów dostarczył pepe2k, który wykonał też zdjęcia tego produktu.
Na koniec - bootlog systemu
[ 0.000000] Linux version 3.10.15 (alzhao@alzhao-ubuntu-hk) (gcc version 4.6.4 (OpenWrt/Linaro GCC 4.6-2013.05 r38299) ) #1 Fri Feb 14 14:55:11 HKT 2014
[ 0.000000] MyLoader: sysp=35d1d636, boardp=d8924e31, parts=461d20c8
[ 0.000000] bootconsole [early0] enabled
[ 0.000000] CPU revision is: 00019374 (MIPS 24Kc)
[ 0.000000] SoC: Atheros AR9330 rev 1
[ 0.000000] Clocks: CPU:400.000MHz, DDR:400.000MHz, AHB:200.000MHz, Ref:25.000MHz
[ 0.000000] Determined physical RAM map:
[ 0.000000] memory: 04000000 @ 00000000 (usable)
[ 0.000000] Initrd not found or empty - disabling initrd
[ 0.000000] Zone ranges:
[ 0.000000] Normal [mem 0x00000000-0x03ffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x00000000-0x03ffffff]
[ 0.000000] On node 0 totalpages: 16384
[ 0.000000] free_area_init_node: node 0, pgdat 803049b0, node_mem_map 81000000
[ 0.000000] Normal zone: 128 pages used for memmap
[ 0.000000] Normal zone: 0 pages reserved
[ 0.000000] Normal zone: 16384 pages, LIFO batch:3
[ 0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
[ 0.000000] Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
[ 0.000000] Kernel command line: board=GL-INET console=ttyATH0,115200 rootfstype=squashfs,jffs2 noinitrd
[ 0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[ 0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[ 0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.000000] Writing ErrCtl register=00000000
[ 0.000000] Readback ErrCtl register=00000000
[ 0.000000] Memory: 61336k/65536k available (2200k kernel code, 4200k reserved, 592k data, 212k init, 0k highmem)
[ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] NR_IRQS:51
[ 0.080000] Calibrating delay loop... 265.42 BogoMIPS (lpj=1327104)
[ 0.080000] pid_max: default: 32768 minimum: 301
[ 0.080000] Mount-cache hash table entries: 512
[ 0.090000] NET: Registered protocol family 16
[ 0.100000] MIPS: machine is GL-CONNECT INET v1
[ 0.550000] bio: create slab <bio-0> at 0
[ 0.560000] Switching to clocksource MIPS
[ 0.560000] NET: Registered protocol family 2
[ 0.570000] TCP established hash table entries: 512 (order: 0, 4096 bytes)
[ 0.570000] TCP bind hash table entries: 512 (order: -1, 2048 bytes)
[ 0.570000] TCP: Hash tables configured (established 512 bind 512)
[ 0.580000] TCP: reno registered
[ 0.580000] UDP hash table entries: 256 (order: 0, 4096 bytes)
[ 0.590000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[ 0.600000] NET: Registered protocol family 1
[ 0.600000] PCI: CLS 0 bytes, default 32
[ 0.620000] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.620000] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[ 0.630000] msgmni has been set to 119
[ 0.640000] io scheduler noop registered
[ 0.640000] io scheduler deadline registered (default)
[ 0.640000] Serial: 8250/16550 driver, 1 ports, IRQ sharing disabled
[ 0.650000] ar933x-uart: ttyATH0 at MMIO 0x18020000 (irq = 11) is a AR933X UART
[ 0.660000] console [ttyATH0] enabled, bootconsole disabled
[ 0.670000] ath79-spi ath79-spi: master is unqueued, this is deprecated
[ 0.680000] m25p80 spi0.0: found en25q64, expected m25p80
[ 0.680000] m25p80 spi0.0: en25q64 (8192 Kbytes)
[ 0.690000] 5 tp-link partitions found on MTD device spi0.0
[ 0.690000] Creating 5 MTD partitions on "spi0.0":
[ 0.700000] 0x000000000000-0x000000020000 : "u-boot"
[ 0.700000] 0x000000020000-0x000000119344 : "kernel"
[ 0.710000] mtd: partition "kernel" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
[ 0.720000] 0x000000119344-0x0000007f0000 : "rootfs"
[ 0.720000] mtd: partition "rootfs" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
[ 0.740000] mtd: partition "rootfs" set to be root filesystem
[ 0.740000] 1 squashfs-split partitions found on MTD device rootfs
[ 0.750000] 0x000000740000-0x0000007f0000 : "rootfs_data"
[ 0.760000] 0x0000007f0000-0x000000800000 : "art"
[ 0.760000] 0x000000020000-0x0000007f0000 : "firmware"
[ 0.780000] libphy: ag71xx_mdio: probed
[ 0.790000] eth0: Atheros AG71xx at 0xb9000000, irq 4, mode:MII
[ 1.340000] ag71xx ag71xx.0 eth0: connected to PHY at ag71xx-mdio.1:04 [uid=004dd041, driver=Generic PHY]
[ 1.350000] eth1: Atheros AG71xx at 0xba000000, irq 5, mode:GMII
[ 1.900000] eth1: Found an AR7240/AR9330 built-in switch
[ 2.940000] TCP: cubic registered
[ 2.940000] NET: Registered protocol family 17
[ 2.940000] 8021q: 802.1Q VLAN Support v1.8
[ 2.960000] VFS: Mounted root (squashfs filesystem) readonly on device 31:2.
[ 2.960000] Freeing unused kernel memory: 212K (8031b000 - 80350000)
[ 7.000000] usbcore: registered new interface driver usbfs
[ 7.000000] usbcore: registered new interface driver hub
[ 7.010000] usbcore: registered new device driver usb
[ 7.060000] SCSI subsystem initialized
[ 7.070000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 7.080000] ehci-platform: EHCI generic platform driver
[ 7.080000] ehci-platform ehci-platform: EHCI Host Controller
[ 7.090000] ehci-platform ehci-platform: new USB bus registered, assigned bus number 1
[ 7.100000] ehci-platform ehci-platform: irq 3, io mem 0x1b000000
[ 7.120000] ehci-platform ehci-platform: USB 2.0 started, EHCI 1.00
[ 7.120000] hub 1-0:1.0: USB hub found
[ 7.120000] hub 1-0:1.0: 1 port detected
[ 7.130000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 7.140000] uhci_hcd: USB Universal Host Controller Interface driver
[ 7.150000] usbcore: registered new interface driver usb-storage
[ 7.470000] usb 1-1: new high-speed USB device number 2 using ehci-platform
[ 7.620000] usb-storage 1-1:1.0: USB Mass Storage device detected
[ 7.620000] scsi0 : usb-storage 1-1:1.0
[ 8.630000] scsi 0:0:0:0: Direct-Access SanDisk U3 Cruzer Micro 4.04 PQ: 0 ANSI: 2
[ 8.640000] sd 0:0:0:0: [sda] 8027793 512-byte logical blocks: (4.11 GB/3.82 GiB)
[ 8.640000] sd 0:0:0:0: [sda] Write Protect is off
[ 8.650000] sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00
[ 8.650000] sd 0:0:0:0: [sda] No Caching mode page found
[ 8.650000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 8.660000] sd 0:0:0:0: [sda] No Caching mode page found
[ 8.670000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 8.680000] sda: sda1
[ 8.680000] sd 0:0:0:0: [sda] No Caching mode page found
[ 8.690000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 8.690000] sd 0:0:0:0: [sda] Attached SCSI removable disk
[ 10.680000] jffs2: notice: (327) jffs2_build_xattr_subsystem: complete building xattr subsystem, 2 of xdatum (1 unchecked, 1 orphan) and 43 of xref (0 dead, 24 orphan) found.
[ 15.190000] NET: Registered protocol family 10
[ 15.230000] NTFS driver 2.1.30 [Flags: R/O MODULE].
[ 15.270000] nf_conntrack version 0.5.0 (961 buckets, 3844 max)
[ 15.280000] ip6_tables: (C) 2000-2006 Netfilter Core Team
[ 15.360000] Linux video capture interface: v2.00
[ 15.390000] fuse init (API version 7.22)
[ 15.480000] usbcore: registered new interface driver cdc_acm
[ 15.480000] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[ 15.530000] Loading modules backported from Linux version master-2013-06-27-0-gdcfa6d5
[ 15.540000] Backport generated by backports.git backports-20130617-4-ge3220f5
[ 15.550000] cpia2: V4L-Driver for Vision CPiA2 based cameras v3.0.1
[ 15.550000] usbcore: registered new interface driver cpia2
[ 15.600000] ip_tables: (C) 2000-2006 Netfilter Core Team
[ 15.830000] usbcore: registered new interface driver Philips webcam
[ 15.850000] usbcore: registered new interface driver usbserial
[ 15.860000] usbcore: registered new interface driver usbserial_generic
[ 15.860000] usbserial: USB Serial support registered for generic
[ 15.880000] usbcore: registered new interface driver uvcvideo
[ 15.890000] USB Video Class driver (1.1.1)
[ 15.930000] xt_time: kernel timezone is -0000
[ 15.940000] usbcore: registered new interface driver cdc_ether
[ 15.970000] cfg80211: Calling CRDA to update world regulatory domain
[ 15.980000] cfg80211: World regulatory domain updated:
[ 15.980000] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[ 15.990000] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 16.000000] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[ 16.000000] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[ 16.010000] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 16.020000] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 16.030000] usbcore: registered new interface driver cp210x
[ 16.040000] usbserial: USB Serial support registered for cp210x
[ 16.050000] usbcore: registered new interface driver ftdi_sio
[ 16.050000] usbserial: USB Serial support registered for FTDI USB Serial Device
[ 16.070000] gspca_main: v2.14.0 registered
[ 16.080000] usbcore: registered new interface driver mars
[ 16.090000] usbcore: registered new interface driver mr97310a
[ 16.100000] usbcore: registered new interface driver ov519
[ 16.100000] usbcore: registered new interface driver ov534
[ 16.110000] usbcore: registered new interface driver ov534_9
[ 16.120000] usbcore: registered new interface driver pac207
[ 16.130000] usbcore: registered new interface driver pac7311
[ 16.140000] usbcore: registered new interface driver se401
[ 16.150000] usbcore: registered new interface driver gspca_sn9c20x
[ 16.160000] usbcore: registered new interface driver sonixb
[ 16.170000] usbcore: registered new interface driver sonixj
[ 16.180000] usbcore: registered new interface driver spca500
[ 16.190000] usbcore: registered new interface driver spca501
[ 16.210000] usbcore: registered new interface driver spca505
[ 16.220000] usbcore: registered new interface driver spca506
[ 16.230000] usbcore: registered new interface driver spca508
[ 16.240000] usbcore: registered new interface driver spca561
[ 16.250000] usbcore: registered new interface driver sq905
[ 16.260000] usbcore: registered new interface driver sq905c
[ 16.260000] usbcore: registered new interface driver stk014
[ 16.270000] usbcore: registered new interface driver STV06xx
[ 16.280000] usbcore: registered new interface driver sunplus
[ 16.290000] usbcore: registered new interface driver t613
[ 16.300000] usbcore: registered new interface driver tv8532
[ 16.310000] usbcore: registered new interface driver vc032x
[ 16.320000] usbcore: registered new interface driver gspca_zc3xx
[ 16.380000] PPP generic driver version 2.4.2
[ 16.390000] NET: Registered protocol family 24
[ 16.400000] usbcore: registered new interface driver rndis_host
[ 16.450000] usbcore: registered new interface driver conex
[ 16.460000] usbcore: registered new interface driver etoms
[ 16.470000] usbcore: registered new interface driver finepix
[ 16.480000] usbcore: registered new interface driver gspca_gl860
[ 16.490000] usbcore: registered new interface driver jeilinj
[ 16.490000] usbcore: registered new interface driver konica
[ 16.500000] usbcore: registered new interface driver ALi m5602
[ 16.520000] usbcore: registered new interface driver option
[ 16.520000] usbserial: USB Serial support registered for GSM modem (1-port)
[ 16.550000] ath: EEPROM regdomain: 0x0
[ 16.550000] ath: EEPROM indicates default country code should be used
[ 16.550000] ath: doing EEPROM country->regdmn map search
[ 16.550000] ath: country maps to regdmn code: 0x3a
[ 16.550000] ath: Country alpha2 being used: US
[ 16.550000] ath: Regpair used: 0x3a
[ 16.570000] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[ 16.570000] cfg80211: Calling CRDA for country: US
[ 16.580000] cfg80211: Regulatory domain changed to country: US
[ 16.580000] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[ 16.590000] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2700 mBm)
[ 16.600000] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 1700 mBm)
[ 16.610000] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 16.610000] cfg80211: (5490000 KHz - 5600000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 16.620000] cfg80211: (5650000 KHz - 5710000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[ 16.630000] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 3000 mBm)
[ 16.640000] ieee80211 phy0: Atheros AR9330 Rev:1 mem=0xb8100000, irq=2
[ 16.660000] EXT4-fs (sda1): recovery complete
[ 16.780000] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[ 25.730000] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[ 25.730000] device eth1 entered promiscuous mode
[ 25.760000] IPv6: ADDRCONF(NETDEV_UP): br-lan: link is not ready
[ 25.820000] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 27.590000] cfg80211: Calling CRDA for country: CN
[ 27.590000] cfg80211: Regulatory domain changed to country: CN
[ 27.600000] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[ 27.600000] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[ 27.610000] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (N/A, 3000 mBm)
[ 32.260000] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[ 32.280000] device wlan0 entered promiscuous mode
[ 32.290000] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[ 32.940000] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[ 32.960000] br-lan: port 2(wlan0) entered forwarding state
[ 32.960000] br-lan: port 2(wlan0) entered forwarding state
[ 32.980000] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready
[ 34.960000] br-lan: port 2(wlan0) entered forwarding state
[ 36.720000] eth0: link up (100Mbps/Full duplex)
[ 36.720000] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 52.720000] eth0: link down
[ 53.190000] eth1: link up (1000Mbps/Full duplex)
[ 53.190000] br-lan: port 1(eth1) entered forwarding state
[ 53.190000] br-lan: port 1(eth1) entered forwarding state
[ 53.200000] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
[ 55.190000] br-lan: port 1(eth1) entered forwarding state
Dostępne GPIO: