1

Temat: TP-Link WR740N

Witam. W routerze takim jak w temacie (TP-Link WR740N v4.23) chciałbym zainstalować OpenWRT. Jest jeszcze na nim oryginalny firmware. Czy OpenWRT CC od Cezarego (OpenWRT 15.05 tl-wr740n-v4-squashfs-factory.bin) będzie odpowiednie dla tego routera?

2

Odp: TP-Link WR740N

Tak, ale ta konkretna wersja jest bez gui (chyba że tak chcesz). Jeżeli chcesz gui to lepiej zainstaluj gargoyle: http://dl.eko.one.pl/gargoyle-pl/attitu … actory.bin

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: TP-Link WR740N

Nie, nie, GUI nie jest potrzebne.
A czy linie od diod aktywności portów LAN w tym routerz to linie GPIO którymi można sterować?

4

Odp: TP-Link WR740N

Na bazie 741-v4 to jest budowane więc tak.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: TP-Link WR740N

Czyli wlutowywujac na miejsce diod karty MicroSD poprzez adapter MicroSD --> SD mógłbym ją zamontować w systemie i wykorzystać jako Extroot?

6

Odp: TP-Link WR740N

Te diody są wykorzystywane przez system. Tak fizycznie, ale musiał  byś sobie pozmieniać system, wywalić z kernela obsługę tych ledów i doinstalować odpowiednie pakiety.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7

Odp: TP-Link WR740N

Czyli rozumiem że trzeba skompilowac system od podstaw..
Czy jest możliwość skofigurowania tego w Twoim systemie, aby wyłączyć tą obsługę LEDów przez system?

8

Odp: TP-Link WR740N

Część jest w /etc/config/system, definicja jest w kernelu. I tak musisz kompilować.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9

Odp: TP-Link WR740N

Przyznam się szczerze że nigdy nie kompilowałem kernela sad(
Skąd mógłbym wziąć źródła do tego w którym mógłbym dokonać tych zmian, żeby te GPIO były "tylko dla mnie"?

10

Odp: TP-Link WR740N

Wszystko przed tobą: http://eko.one.pl/?p=openwrt-kompilacja

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

11

Odp: TP-Link WR740N

Zoltar napisał/a:

Przyznam się szczerze że nigdy nie kompilowałem kernela sad(
Skąd mógłbym wziąć źródła do tego w którym mógłbym dokonać tych zmian, żeby te GPIO były "tylko dla mnie"?

Jest inny sposób, poczytaj sobie: http://openrouter.info/forum/viewtopic. … mp;p=34532

12 (edytowany przez Zoltar 2016-01-14 18:54:23)

Odp: TP-Link WR740N

Po paru trudnościach (uszkodzony zasilacz i jakiś problem z przyciskiem RESET, nie wiem jaki, nie działał, nie działał, i nagle zaczął działać) udało mi się na routerku zainstalować OpenWRT CC 15.05 od Cezarego. Router sprawuje się dobrze, żadnych problemów z działaniem, więc czas pomyśleć o tym Extroocie bo ilość dostępnej pamięci Flash jest stanowczo za mała (przyzwyczajenie z WDR3600 gdzie flash jak wiadomo jest większy).
Więc do rzeczy:

pepe2k napisał/a:

Jest inny sposób, poczytaj sobie: http://openrouter.info/forum/viewtopic. … mp;p=34532

Próbowałem moduły od diod wyłączoyć/wyładować ale część tych modułów nie ma:

root@OpenWrt:~# rmmod gpio_button_hotplug
root@OpenWrt:~# rmmod leds-gpio
module is not loaded
root@OpenWrt:~# rmmod ledtrig_default_on
module is not loaded
root@OpenWrt:~# rmmod ledtrig_timer
module is not loaded
root@OpenWrt:~#

Moje podejrzenie jest takie że albo w nowszej wersji OpenWRT w stosunku do użytej w poście który wysłał pepe2k nazewnictwo tych modułów jest inne, albo działanie diod rozwiązane jest w jakiś inny sposób z pominięciem modułów?

13

Odp: TP-Link WR740N

Skompiluj...

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

14

Odp: TP-Link WR740N

Łatwo powiedzieć tongue

Czyli kompilowanie mnie nie ominie..
Zapoznałem się po krótce już wcześniej z tym co podesłałeś Cezary.. I z tego co mi się wydaje to sama kompilacja nie byłaby chyba problemem, ale gorzej z tym jak to skonfigurować aby zwolnić te GPIO odpowiedzialne za led'y sad

15

Odp: TP-Link WR740N

Zoltar napisał/a:

[...] Moje podejrzenie jest takie że albo w nowszej wersji OpenWRT w stosunku do użytej w poście który wysłał pepe2k nazewnictwo tych modułów jest inne, albo działanie diod rozwiązane jest w jakiś inny sposób z pominięciem modułów?

Ty nic nie podejrzewaj tylko sobie sprawdź jakie moduły masz załadowane... polecenie lsmod.

16

Odp: TP-Link WR740N

Przed kompilacją w target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr741nd-v4.c wywal definicję ledów które chcesz...

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

17

Odp: TP-Link WR740N

Jestem na etapie o którym pisałeś. Z tego co zrozumiałem, jeżeli usunę te oto linię:

#define TL_WR741NDV4_GPIO_LED_WLAN      0
#define TL_WR741NDV4_GPIO_LED_QSS       1
#define TL_WR741NDV4_GPIO_LED_WAN       13
#define TL_WR741NDV4_GPIO_LED_LAN1      14
#define TL_WR741NDV4_GPIO_LED_LAN2      15
#define TL_WR741NDV4_GPIO_LED_LAN3      16
#define TL_WR741NDV4_GPIO_LED_LAN4      17
#define TL_WR741NDV4_GPIO_LED_SYSTEM    27

To wszystkie linie GPIO od diod się zwolnią i będą dostępne "z ręki"? Nic więcej w tym pliku nie trzeba usuwać?

A potem tylko daje polecenie "make" i rozpoczyna się kompilacja?

18

Odp: TP-Link WR740N

Nie, tam dalej w pliku jeszcze masz ich definicje.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

19

Odp: TP-Link WR740N

Dlatego właśnie pytam, bo nie byłem pewny czy to dalej też należy usunąć.

static struct gpio_led tl_wr741ndv4_leds_gpio[] __initdata = {
        {
                .name           = "tp-link:green:lan1",
                .gpio           = TL_WR741NDV4_GPIO_LED_LAN1,
                .active_low     = 0,
        }, {
                .name           = "tp-link:green:lan2",
                .gpio           = TL_WR741NDV4_GPIO_LED_LAN2,
                .active_low     = 0,
        }, {
                .name           = "tp-link:green:lan3",
                .gpio           = TL_WR741NDV4_GPIO_LED_LAN3,
                .active_low     = 0,
        }, {
                .name           = "tp-link:green:lan4",
                .gpio           = TL_WR741NDV4_GPIO_LED_LAN4,
                .active_low     = 1,
        }, {
                .name           = "tp-link:green:qss",
                .gpio           = TL_WR741NDV4_GPIO_LED_QSS,
                .active_low     = 0,
        }, {
                .name           = "tp-link:green:system",
                .gpio           = TL_WR741NDV4_GPIO_LED_SYSTEM,
                .active_low     = 1,
        }, {
                .name           = "tp-link:green:wan",
                .gpio           = TL_WR741NDV4_GPIO_LED_WAN,
                .active_low     = 0,
        }, {
                .name           = "tp-link:green:wlan",
                .gpio           = TL_WR741NDV4_GPIO_LED_WLAN,
                .active_low     = 0,
        }, {
                /* the 3G LED is only present on the MR3220 v2 */
                .name           = "tp-link:green:3g",
                .gpio           = TL_MR3220V2_GPIO_LED_3G,
                .active_low     = 0,
        },
};

Więc usuwam te definicje z postu wyżej, to co powyżej w tym poście.
Dalej studiując plik mam definicje GPIO od przycisków, więc tego nie ruszam.

Jednak zastanawiam się.. dalej znalazłem coś takiego jak:

static void __init tl_wr741ndv4_setup(void)
{
        tl_ap121_setup();

        ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr741ndv4_leds_gpio) - 1,
                                 tl_wr741ndv4_leds_gpio);

        ath79_register_gpio_keys_polled(1, TL_WR741NDV4_KEYS_POLL_INTERVAL,
                                        ARRAY_SIZE(tl_wr741ndv4_gpio_keys),
                                        tl_wr741ndv4_gpio_keys);
}

czy:

static void __init tl_mr3220v2_setup(void)
{
        tl_ap121_setup();

        gpio_request_one(TL_MR3220V2_GPIO_USB_POWER,
                         GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
                         "USB power");
        ath79_register_usb();

        ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr741ndv4_leds_gpio),
                                 tl_wr741ndv4_leds_gpio);

        ath79_register_gpio_keys_polled(1, TL_WR741NDV4_KEYS_POLL_INTERVAL,
                                        ARRAY_SIZE(tl_mr3220v2_gpio_keys),
                                        tl_mr3220v2_gpio_keys);
}

To w jakiś sposób nawiązuje do tych LED'ów, z tym też coś trzeba robić, czy to już zostawiam w spokoju?

20

Odp: TP-Link WR740N

Jeżeli usuniesz całą definicję ledów to ath79_register_leds_gpio też. Jeżeli zostawisz to to drugie też masz zostawić.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

21

Odp: TP-Link WR740N

Czyli jeżeli chce usunąć całą definicję LEDów to po wyrzuceniu wszystkich rzeczy z tego pliku z tym związanych, plik powinien wyglądać tak:

/*
*  TP-LINK TL-WR741ND v4/TL-MR3220 v2 board support
*
*  Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
*
*  This program is free software; you can redistribute it and/or modify it
*  under the terms of the GNU General Public License version 2 as published
*  by the Free Software Foundation.
*/

#include <linux/gpio.h>

#include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/ar71xx_regs.h>

#include "common.h"
#include "dev-eth.h"
#include "dev-gpio-buttons.h"
#include "dev-leds-gpio.h"
#include "dev-m25p80.h"
#include "dev-usb.h"
#include "dev-wmac.h"
#include "machtypes.h"

#define TL_WR741NDV4_GPIO_BTN_RESET    11
#define TL_WR741NDV4_GPIO_BTN_WPS    26

#define TL_MR3220V2_GPIO_BTN_WPS    11
#define TL_MR3220V2_GPIO_BTN_WIFI    24

#define TL_MR3220V2_GPIO_LED_3G        26
#define TL_MR3220V2_GPIO_USB_POWER    8

#define TL_WR741NDV4_KEYS_POLL_INTERVAL    20    /* msecs */
#define TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR741NDV4_KEYS_POLL_INTERVAL)

static const char *tl_wr741ndv4_part_probes[] = {
    "tp-link",
    NULL,
};

static struct flash_platform_data tl_wr741ndv4_flash_data = {
    .part_probes    = tl_wr741ndv4_part_probes,
};


static struct gpio_keys_button tl_wr741ndv4_gpio_keys[] __initdata = {
    {
        .desc        = "reset",
        .type        = EV_KEY,
        .code        = KEY_RESTART,
        .debounce_interval = TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL,
        .gpio        = TL_WR741NDV4_GPIO_BTN_RESET,
        .active_low    = 0,
    }, {
        .desc        = "WPS",
        .type        = EV_KEY,
        .code        = KEY_WPS_BUTTON,
        .debounce_interval = TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL,
        .gpio        = TL_WR741NDV4_GPIO_BTN_WPS,
        .active_low    = 0,
    }
};

static struct gpio_keys_button tl_mr3220v2_gpio_keys[] __initdata = {
    {
        .desc        = "WPS",
        .type        = EV_KEY,
        .code        = KEY_WPS_BUTTON,
        .debounce_interval = TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL,
        .gpio        = TL_MR3220V2_GPIO_BTN_WPS,
        .active_low    = 0,
    }, {
        .desc        = "WIFI button",
        .type        = EV_KEY,
        .code        = KEY_RFKILL,
        .debounce_interval = TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL,
        .gpio        = TL_MR3220V2_GPIO_BTN_WIFI,
        .active_low    = 0,
    }
};

static void __init tl_ap121_setup(void)
{
    u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
    u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);

    ath79_setup_ar933x_phy4_switch(true, true);

    ath79_gpio_function_disable(AR933X_GPIO_FUNC_ETH_SWITCH_LED0_EN |
                    AR933X_GPIO_FUNC_ETH_SWITCH_LED1_EN |
                    AR933X_GPIO_FUNC_ETH_SWITCH_LED2_EN |
                    AR933X_GPIO_FUNC_ETH_SWITCH_LED3_EN |
                    AR933X_GPIO_FUNC_ETH_SWITCH_LED4_EN);

    ath79_register_m25p80(&tl_wr741ndv4_flash_data);
    ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
    ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1);

    ath79_register_mdio(0, 0x0);
    ath79_register_eth(1);
    ath79_register_eth(0);

    ath79_register_wmac(ee, mac);
}

static void __init tl_wr741ndv4_setup(void)
{
    tl_ap121_setup();

    ath79_register_gpio_keys_polled(1, TL_WR741NDV4_KEYS_POLL_INTERVAL,
                    ARRAY_SIZE(tl_wr741ndv4_gpio_keys),
                    tl_wr741ndv4_gpio_keys);
}

MIPS_MACHINE(ATH79_MACH_TL_WR741ND_V4, "TL-WR741ND-v4",
         "TP-LINK TL-WR741ND v4", tl_wr741ndv4_setup);

static void __init tl_mr3220v2_setup(void)
{
    tl_ap121_setup();

    gpio_request_one(TL_MR3220V2_GPIO_USB_POWER,
             GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
             "USB power");
    ath79_register_usb();

    ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr741ndv4_leds_gpio),
                 tl_wr741ndv4_leds_gpio);
    ath79_register_gpio_keys_polled(1, TL_WR741NDV4_KEYS_POLL_INTERVAL,
                    ARRAY_SIZE(tl_mr3220v2_gpio_keys),
                    tl_mr3220v2_gpio_keys);
}

MIPS_MACHINE(ATH79_MACH_TL_MR3220_V2, "TL-MR3220-v2",
         "TP-LINK TL-MR3220 v2", tl_mr3220v2_setup);

22

Odp: TP-Link WR740N

ath79_register_leds_gpio zostawiłeś, nie skompiluje się jak nie ma tl_wr741ndv4_leds_gpio

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

23

Odp: TP-Link WR740N

Nie zauważyłem jak wklejałem. Czyli jeszcze raz hmm

/*
*  TP-LINK TL-WR741ND v4/TL-MR3220 v2 board support
*
*  Copyright (C) 2011-2012 Gabor Juhos <juhosg@openwrt.org>
*
*  This program is free software; you can redistribute it and/or modify it
*  under the terms of the GNU General Public License version 2 as published
*  by the Free Software Foundation.
*/

#include <linux/gpio.h>

#include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/ar71xx_regs.h>

#include "common.h"
#include "dev-eth.h"
#include "dev-gpio-buttons.h"
#include "dev-leds-gpio.h"
#include "dev-m25p80.h"
#include "dev-usb.h"
#include "dev-wmac.h"
#include "machtypes.h"

#define TL_WR741NDV4_GPIO_BTN_RESET    11
#define TL_WR741NDV4_GPIO_BTN_WPS    26

#define TL_MR3220V2_GPIO_BTN_WPS    11
#define TL_MR3220V2_GPIO_BTN_WIFI    24

#define TL_MR3220V2_GPIO_LED_3G        26
#define TL_MR3220V2_GPIO_USB_POWER    8

#define TL_WR741NDV4_KEYS_POLL_INTERVAL    20    /* msecs */
#define TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL (3 * TL_WR741NDV4_KEYS_POLL_INTERVAL)

static const char *tl_wr741ndv4_part_probes[] = {
    "tp-link",
    NULL,
};

static struct flash_platform_data tl_wr741ndv4_flash_data = {
    .part_probes    = tl_wr741ndv4_part_probes,
};


static struct gpio_keys_button tl_wr741ndv4_gpio_keys[] __initdata = {
    {
        .desc        = "reset",
        .type        = EV_KEY,
        .code        = KEY_RESTART,
        .debounce_interval = TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL,
        .gpio        = TL_WR741NDV4_GPIO_BTN_RESET,
        .active_low    = 0,
    }, {
        .desc        = "WPS",
        .type        = EV_KEY,
        .code        = KEY_WPS_BUTTON,
        .debounce_interval = TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL,
        .gpio        = TL_WR741NDV4_GPIO_BTN_WPS,
        .active_low    = 0,
    }
};

static struct gpio_keys_button tl_mr3220v2_gpio_keys[] __initdata = {
    {
        .desc        = "WPS",
        .type        = EV_KEY,
        .code        = KEY_WPS_BUTTON,
        .debounce_interval = TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL,
        .gpio        = TL_MR3220V2_GPIO_BTN_WPS,
        .active_low    = 0,
    }, {
        .desc        = "WIFI button",
        .type        = EV_KEY,
        .code        = KEY_RFKILL,
        .debounce_interval = TL_WR741NDV4_KEYS_DEBOUNCE_INTERVAL,
        .gpio        = TL_MR3220V2_GPIO_BTN_WIFI,
        .active_low    = 0,
    }
};

static void __init tl_ap121_setup(void)
{
    u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
    u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);

    ath79_setup_ar933x_phy4_switch(true, true);

    ath79_gpio_function_disable(AR933X_GPIO_FUNC_ETH_SWITCH_LED0_EN |
                    AR933X_GPIO_FUNC_ETH_SWITCH_LED1_EN |
                    AR933X_GPIO_FUNC_ETH_SWITCH_LED2_EN |
                    AR933X_GPIO_FUNC_ETH_SWITCH_LED3_EN |
                    AR933X_GPIO_FUNC_ETH_SWITCH_LED4_EN);

    ath79_register_m25p80(&tl_wr741ndv4_flash_data);
    ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);
    ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1);

    ath79_register_mdio(0, 0x0);
    ath79_register_eth(1);
    ath79_register_eth(0);

    ath79_register_wmac(ee, mac);
}

static void __init tl_wr741ndv4_setup(void)
{
    tl_ap121_setup();

    ath79_register_gpio_keys_polled(1, TL_WR741NDV4_KEYS_POLL_INTERVAL,
                    ARRAY_SIZE(tl_wr741ndv4_gpio_keys),
                    tl_wr741ndv4_gpio_keys);
}

MIPS_MACHINE(ATH79_MACH_TL_WR741ND_V4, "TL-WR741ND-v4",
         "TP-LINK TL-WR741ND v4", tl_wr741ndv4_setup);

static void __init tl_mr3220v2_setup(void)
{
    tl_ap121_setup();

    gpio_request_one(TL_MR3220V2_GPIO_USB_POWER,
             GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
             "USB power");
    ath79_register_usb();

    ath79_register_gpio_keys_polled(1, TL_WR741NDV4_KEYS_POLL_INTERVAL,
                    ARRAY_SIZE(tl_mr3220v2_gpio_keys),
                    tl_mr3220v2_gpio_keys);
}

MIPS_MACHINE(ATH79_MACH_TL_MR3220_V2, "TL-MR3220-v2",
         "TP-LINK TL-MR3220 v2", tl_mr3220v2_setup);

Teraz nie widzę już nic związanego z LED'ami, poza "ath79_gpio_function_disable" ale to chyba nie dotyczy tych LED'ów bezpośrednio, więc może zostać(?)

24

Odp: TP-Link WR740N

No coś takiego. Kompiluj, lutuj, daj info jak działa.

PS. Ty to w ramach zabawy robisz? Bo normalnie to kupiłbyś sobie coś w z więcej flash lub z usb...

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

25

Odp: TP-Link WR740N

Dam info, jak cały proces przebiegł..

Taak. Zabawy, troszkę też nauki (jak mówiłem wcześniej, nigdy nic nie kompilowałem, także przyda się na przyszłość big_smile), a router leżał i się marnował wiec czemu by się nie "pobawić". Normalnie to używam WDR3600 z extroot'em.
Myślałem też nad USB-MOD'em do tego routerka, ale to chyba jeszcze ponad moje siły (tak precyzyjne lutowanie wymaga sprzętu jak i dużego doświadczenia którego mnie jeszcze brakuje)
A tak już odbiegając od tematu, ile taka kompilacja może trwać (wiem że zależy to od wydajności procesora, ale tak "pi razy oko" na średniej klasy laptopie) ? smile