1 (edytowany przez tinware 2019-03-30 14:33:05)

Temat: Obsługa przycisku ON/OFF

Cześć,

W Archer C7 AC1750 posiadam przycisk WPS, który chciałem obsługiwać jako przełącznik ON (wciśnięty) i OFF (wyciśnięty). W /etc/rc.button/wps umieściłem prosty skrypt zapalający i gaszący diodę oraz podnoszący WiFi:

#!/bin/sh

if [ "$ACTION" = "pressed" ]; then
  echo "255" > /sys/devices/platform/leds-gpio/leds/archer-c7-v5:green:wps/brightness

  uci set wireless.radio0.disabled=1
  uci set wireless.radio1.disabled=1
  uci commit wireless
  wifi

elif [ "$ACTION" = "released" ]; then
  echo "0" > /sys/devices/platform/leds-gpio/leds/archer-c7-v5:green:wps/brightness
  
  uci set wireless.radio0.disabled=0
  uci set wireless.radio1.disabled=0
  uci commit wireless
  wifi
  
fi

return 0

Wszystko działa znakomicie, ale jeśli wymienię ten przycisk na przełącznik ON/OFF w płycie PCB pojawi się problem. Jeśli wciskam i trzymam przycisk WPS, a następnie włączam router - po uruchomieniu się urządzenia dioda WPS nie zapala się... Skrypt /etc/rc.button/wps nie jest w takiej sytuacji wykonywany.

Myślałem o ręcznym uruchomieniu tego skryptu z /etc/rc.local ale w jaki sposób mogę sprawdzić jego stan: wciśnięty czy nie? Zmienna $SEEN w obydwu sytuacjach zwraca wartość ok. 42949424 sekund.

2

Odp: Obsługa przycisku ON/OFF

Po prostu uruchom ten skrypt w /etc/rc.local żeby miał stan początkowy po starcie routera.

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

3 (edytowany przez tinware 2019-03-30 14:35:26)

Odp: Obsługa przycisku ON/OFF

Tak, ale uruchomienie go z /etc/rc.local

sh /etc/rc.button/wps

powoduje, że zmienne $BUTTON, $ACTION i $SEEN nie mają żadnych wartości, więc wykonanie tego skryptu nie wnosi żadnych zmian. W dodatku podczas uruchamiania się routera, gdy nacisnę kilka razy przycisk WPS router nie uruchomi się już. Trzeba go ponownie zresetować

4

Odp: Obsługa przycisku ON/OFF

To sobie ustaw. Nie szukaj problemów tam gdzie ich nie, odczytaj stan przełącznika, zrób ACTION=$STAN sh /etc/rc.button/wps

A stan sprawdzasz przed odczytanie odpowiedniego gpio, grep WPS  /sys/kernel/debug/gpio czy jak tam się przycisk nazywa.

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

5

Odp: Obsługa przycisku ON/OFF

Masz rację. Dodanie takiej instrukcji warunkowej rozwiązuje problem:

if grep WPS /sys/kernel/debug/gpio | grep "in  lo" > /dev/null; then
  ACTION="pressed"
elif grep WPS /sys/kernel/debug/gpio | grep "in  hi" > /dev/null; then
  ACTION="released"
else
  ACTION="fail"
fi

Teraz po wciśnięciu i przytrzymaniu przycisku WPS, a następnie włączeniu routera skrypt wps startuje z /etc/rc.local sprawdzając stan przycisku ;-)

Wyczyszczam plik /etc/rc.button/wps z całego kodu (aby wyeliminować wszystkie rzeczy, które on wykonuje) i zapisuje. Uruchamiam router z zasilania. Podczas uruchamiania naciskam pulsacyjnie przycisk WPS - po chwili dioda zasilania na routerze zaczyna bardzo szubko migać, a sam router się nie uruchamia.

6 (edytowany przez Cezary 2019-03-30 15:51:56)

Odp: Obsługa przycisku ON/OFF

Jak naciskasz dowolny przycisk podczas startu to on wchodzi w tryb failsafe - tak własnie działa openwrt.

Skompiluj sobie system wywalając failsafe z obrazu (to opcja kompilacji jest)

EDIT: co jest głupie, bo pozbawiasz się największej zalety openwrt - możliwości wejścia w tryb awaryjny i poprawy jak coś się zepsuło.

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

7

Odp: Obsługa przycisku ON/OFF

Cezary napisał/a:

pozbawiasz się największej zalety openwrt - możliwości wejścia w tryb awaryjny i poprawy jak coś się zepsuło.

Od tego zostawiłbym sobie serial port w płycie PCB - rozumiem, że bez failsafe będzie on nadal działał?

Cezary napisał/a:

Skompiluj sobie system wywalając failsafe z obrazu (to opcja kompilacji jest)

Zbudowałem to tak i niestety router cały czas wchodzi w ten tryb.

make image PROFILE="archer-c7-v5" PACKAGES="-failsafe ..."

8

Odp: Obsługa przycisku ON/OFF

Nie. Ty nie zbudowałeś obrazu tylko użyłeś imagebuildera do złożenia obrazu. I to nie jest pakiet o nazwie failsafe króry wyrzucasz tylko opcja kompilacji do ustawienia w .config.

Bez failsafe serial będzie działał, ale nie wejdziesz do obrazu jak coś popsujesz - dostaje tylko ponowne wgranie obrazu na czysto przez bootloader.

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

9

Odp: Obsługa przycisku ON/OFF

Cezary napisał/a:

tylko opcja kompilacji do ustawienia w .config.

Nie bardzo rozumiem o jakim "ustawieniu w .config" mówisz. Jest to jakiś plik imagebuildera?

Cezary napisał/a:

Bez failsafe serial będzie działał, ale nie wejdziesz do obrazu jak coś popsujesz

Ale normalnie będę mógł się poruszać po katalogach systemu przez serial port i wgrać firmware przez np. pendrive?

10

Odp: Obsługa przycisku ON/OFF

tinware napisał/a:

Nie bardzo rozumiem o jakim "ustawieniu w .config" mówisz. Jest to jakiś plik imagebuildera?

Nie, imagebuilder nie ma z tym nic wspólnego. Imagebulder jest wynikiem kompilacji sdk, o tym mówię:
http://eko.one.pl/?p=openwrt-kompilacja

tinware napisał/a:

Ale normalnie będę mógł się poruszać po katalogach systemu przez serial port i wgrać firmware przez np. pendrive?

Pisałem - o ile nie uwalisz softu. Jak uwalisz soft to nie będziesz miał jak się dostać od systemu bo sam system nie będzie działał. Czym jest failsafe przeczytaj na eko.one.pl.
Jeżeli system będzie nadal działał to przez serial się normalnie do niego dostaniesz.

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

11 (edytowany przez tinware 2019-03-30 18:56:07)

Odp: Obsługa przycisku ON/OFF

Cezary napisał/a:

o tym mówię: http://eko.one.pl/?p=openwrt-kompilacja

Zanim zapoznam się z tym artykułem sprawdziłem jeszcze działanie failsafe będąc podłączony pod serial port. Działa on zarówno na przycisku WPS jak i przycisku reset.

[    5.990354] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
[    7.004199] eth0: link up (1000Mbps/Full duplex)
[    7.009182] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
- failsafe button wps was pressed -
- failsafe -

Wnioskuję, że czeka on ok. 1 sekunde na wciśnięcie przycisku WPS lub reset. Czy nie mogę tego czasu skrócić do zera lub najlepiej usunąć przycisk WPS z tej procedury w jakimś systemowym skrypcie? W ten sposób nie pozbawiałbym się trybu failsafe, a mógłbym go uruchamiać poprzez przycisk reset. Miałbym jeden wspólny firmware do wszystkich modemów, a WPS to byłaby kwestia tylko pliku konfiguracyjnego

12

Odp: Obsługa przycisku ON/OFF

Eh, bo przecież dokładnie właśnie to ci napisałem - to jest w skrypcie ale żeby to wyłączyć potrzebujesz przekompilować system. Nie możesz tego zmodyfikować w systemie bo  overlay jest montowany PO sprawdzeniu failsafe.

Tak, failsafe działa na każdy przycisk obecny w systemie.

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

13 (edytowany przez tinware 2019-03-31 17:34:38)

Odp: Obsługa przycisku ON/OFF

Cześć, wczoraj uruchomiłem kompilowanie się systemu. W tym celu przesiadłem się na mojego testowego TL-MR3420v2. Wszystkie ustawienia w defaulcie, aby sprawdzić czy to zadziała - obraz skompilował się prawidłowo po kilku godzinach. Chciałem przejść teraz do próby kompilacji obrazu, w którym przycisk WPS nie będzie brał udziału w procedurze "failsafe". Znalazłem skrypty startowe "failsafe" w kompilatorze pod ścieżką:

./package/base-files/files/lib/preinit/

W nim następujące pliki:

02_default_set_state
10_indicate_failsafe
10_indicate_preinit
10_sysinfo
30_failsafe_wait
40_run_failsafe_hook
50_indicate_regular_preinit
70_initramfs_test
80_mount_root
81_urandom_seed
99_10_failsafe_login
99_10_run_init

Zainteresował się kodem pochodzącym z pliku "30_failsafe_wait". Nie wiem za bardzo, które linijki kodu powinienem zmodyfikować, aby wyeliminować przycisk WPS z procedury "failsafe"

#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications

fs_wait_for_key () {
    local timeout=$3
    local timer
    local do_keypress
    local keypress_true="$(mktemp)"
    local keypress_wait="$(mktemp)"
    local keypress_sec="$(mktemp)"
    if [ -z "$keypress_wait" ]; then
        keypress_wait=/tmp/.keypress_wait
        touch $keypress_wait
    fi
    if [ -z "$keypress_true" ]; then
        keypress_true=/tmp/.keypress_true
        touch $keypress_true
    fi
    if [ -z "$keypress_sec" ]; then
        keypress_sec=/tmp/.keypress_sec
        touch $keypress_sec
    fi

    trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" INT
    trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" USR1

    [ -n "$timeout" ] || timeout=1
    [ $timeout -ge 1 ] || timeout=1
    timer=$timeout
    lock $keypress_wait
    {
        while [ $timer -gt 0 ]; do
            echo "$timer" >$keypress_sec
            timer=$(($timer - 1))
            sleep 1
        done
        lock -u $keypress_wait
        rm -f $keypress_wait
    } &

    [ "$pi_preinit_no_failsafe" != "y" ] && echo "Press the [$1] key and hit [enter] $2"
    echo "Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level"
    # if we're on the console we wait for input
    {
        while [ -r $keypress_wait ]; do
            timer="$(cat $keypress_sec)"

            [ -n "$timer" ] || timer=1
            timer="${timer%%\ *}"
            [ $timer -ge 1 ] || timer=1
            do_keypress=""
            {
                read -t "$timer" do_keypress
                case "$do_keypress" in
                $1)
                    echo "true" >$keypress_true
                    ;;
                1 | 2 | 3 | 4)
                    echo "$do_keypress" >/tmp/debug_level
                    ;;
                *)
                    continue;
                    ;;
                esac
                lock -u $keypress_wait
                rm -f $keypress_wait
            }
        done
    }
    lock -w $keypress_wait

    keypressed=1
    [ "$(cat $keypress_true)" = "true" ] && keypressed=0

    rm -f $keypress_true
    rm -f $keypress_wait
    rm -f $keypress_sec

    return $keypressed
}

failsafe_wait() {
    FAILSAFE=
    [ "$pi_preinit_no_failsafe" == "y" ] && {
        fs_wait_for_key "" "" $fs_failsafe_wait_timeout
        return
    }
    grep -q 'failsafe=' /proc/cmdline && FAILSAFE=true && export FAILSAFE
    if [ "$FAILSAFE" != "true" ]; then
        pi_failsafe_net_message=true
        preinit_net_echo "Please press button now to enter failsafe"
        pi_failsafe_net_message=false
        fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true
        [ -f "/tmp/failsafe_button" ] && FAILSAFE=true && echo "- failsafe button "`cat /tmp/failsafe_button`" was pressed -"
        [ "$FAILSAFE" = "true" ] && export FAILSAFE && touch /tmp/failsafe
    fi
}

boot_hook_add preinit_main failsafe_wait

Czy tak skompilowany system jestem w stanie użyć w imagebulderze, aby następnie w łatwy sposób móc modyfikować w nim pliki systemowe oraz zainstalowane paczki?

14

Odp: Obsługa przycisku ON/OFF

Dlaczego nie czytasz tego co piszę? Nie modyfikuj skryptów tylko ustaw w .configu odpowiednią opcję kompilacji.

Jak sobie z sdk zaznaczysz i zbudujesz imagebuildera to będziesz miał imagebuildera. Tylko po skoro i tak w sdk zbudujesz ten obraz?

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

15

Odp: Obsługa przycisku ON/OFF

Cezary napisał/a:

Nie modyfikuj skryptów tylko ustaw w .configu odpowiednią opcję kompilacji.

Ponieważ w pliku konfiguracyjnym znalazłem tylko:

 580: # CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE is not set
 583: # CONFIG_TARGET_PREINIT_SUPPRESS_FAILSAFE_NETMSG is not set
3055: # CONFIG_PACKAGE_luci-mod-failsafe is not set

Powtórzę, że zależy mi na działaniu failsafe tylko z przycisku reset. W pliku konfiguracyjnym nie ma opcji wyłączenia procedury "failsafe" dla przycisku WPS, dlatego zależało mi wyeliminować go ze skryptów rozruchowych.

Cezary napisał/a:

Tylko po skoro i tak w sdk zbudujesz ten obraz?

Powiedz mi proszę, czy w pliku .config tak jak w przypadku imagebuildera jestem w stanie określić ścieżkę do folderu "files" inną niż domyślna ("./files/")?

16

Odp: Obsługa przycisku ON/OFF

Nie, dlaczego chciałbyś zmieniać ten katalog?

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

17

Odp: Obsługa przycisku ON/OFF

Jeśli teraz przez failsafe będę musiał się przesiąść z imagebuildera na kompilator, chciałem móc używać go zarówno dla TL-MR3420v2 jak i AC1750v5 (bez podstawiania na przemian zawartości folderu "files"). W przypadku imagebuildera robiłem to tak:

make image PROFILE="tl-mr3420-v2" FILES="files/tl-mr3420-v2/" PACKAGES="..."
make image PROFILE="archer-c7-v5" FILES="files/archer-c7-v5/" PACKAGES="..."

Czy polecałbyś mi pobrać dwa razy środowisko, aby nie przełączać się pomiędzy wersjami oprogramowania? Nie byłoby to problematyczne?

Czy wiesz może jak pozbyć się z  trybu failsafe przycisku WPS?

18

Odp: Obsługa przycisku ON/OFF

Nie, do przełączanie się używasz scripts/env : https://oldwiki.archive.openwrt.org/doc/devel/env

failsafe reaguje na wszystkie przyciski. Przerób sobie /etc/rc.button/failsafe tak żeby rozróżniał przyciski.

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

19 (edytowany przez tinware 2019-03-31 22:43:17)

Odp: Obsługa przycisku ON/OFF

Cezary napisał/a:

Przerób sobie /etc/rc.button/failsafe tak żeby rozróżniał przyciski.

Rozumiem, że cały czas mówisz o kompilatorze?

nano ./package/base-files/files/etc/rc.button/failsafe

Kod:

#!/bin/sh

if [ "$BUTTON" = "reset" ]; then
  [ "${TYPE}" = "switch" ] || echo ${BUTTON} > /tmp/failsafe_button

fi

return 0

Czy to powinno załatwić sprawę?

20

Odp: Obsługa przycisku ON/OFF

Powinno, tak.

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

21 (edytowany przez tinware 2019-04-01 18:46:16)

Odp: Obsługa przycisku ON/OFF

Kompilacja systemu zakończyła się powodzeniem. Tryb "failsafe" zaczął działać tylko z przycisku "reset".

Do dalszego składania swoich paczek wolałbym jednak skorzystać z image buildera - jest to dla mnie dużo prostsze narzędzie.
Które z stworzonych plików powinienem do niego przenieść?

Wstępnie przeniosłem:

./build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_generic/tl-mr3420-v2-kernel.bin

...ale niestety, w takiej konfiguracji router po uruchomieniu ciągle się resetuje

22

Odp: Obsługa przycisku ON/OFF

Ale co chcesz przenosić? Zaznacz sobie obraz dla mr3420 to się zrobi (w bin! nie w build_dir). Tak samo w opcjach kompilacji zaznacz sobie że chcesz zbudować imagebuildera to go zbuduje.

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

23

Odp: Obsługa przycisku ON/OFF

Mówisz o .config w kompilatorze? Jeśli tak, to dołożenie jednego pakietu i ponowna kompilacja trwa kilka godzin.

Zaś użycie tego w kompilatorze, od razu kończy się błędem:

make image PROFILE="tl-mr3420-v2" FILES="files/" PACKAGES="..."
WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig!
 make[1] image
make -r image: build failed. Please re-run make with -j1 V=s to see what's going on
~/openwrt/include/toplevel.mk:205: polecenia dla obiektu 'image' nie powiodły się
make: *** [image] Błąd 1

24

Odp: Obsługa przycisku ON/OFF

Mówię o .condig w sdk. I nie, jeżeli zostałes wszystko to ponowna kompilacja to jest tylko chwila.

W .config masz też opcje do budowania imagebuildera, więc go najpierw sobie zbuduj. imagebuilder pochodzi z sdk i nie używasz w/w składni w sdk (on jest w imagebuilderze).

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

25 (edytowany przez tinware 2019-04-01 21:26:57)

Odp: Obsługa przycisku ON/OFF

Masz rację, w kompilatorze w "make menuconfig" na głównym ekranie jest opcja:

[*] Build the LEDE Image Builder
[*] Include package repositories

Następnie po skompilowaniu "make V=s -j1" w katalogu "./bin" pojawia się imagebuilder - perfecto! ;-)
Jeszcze z niego nie korzystałem, ale domyślam się, że są w nim już zaszyte moje zmiany przycisku WPS.
Teraz wystarczy w prosty sposób dograć "files" i paczki.

Chciałem cofnąć się jeszcze kilka postów wyżej do samego procesu zmian w kompilacji. Będąc podłączony przez serial port zauważyłem jeszcze jeden problem - mianowicie, gdy pulsacyjnie przyciskam przycisk WPS rozruch zatrzymuje się w 8sek. Rusza ponownie, gdy na 2-3 sekundy zwalniam przycisk WPS.

[    8.823432] procd: - early -
[    8.827824] procd: - watchdog -
[   56.166747] procd: - watchdog -
[   56.170320] procd: - ubus -

Mogę coś jeszcze zmienić w kompilatorze, aby temu zapobiec?
Mam wrażenie, że przycisk WPS jest jeszcze gdzieś wykorzystywany oprócz "failsafe"...