Temat: Netgear R6220 - ciągłe restarty po wgraniu OpenWRT

Witam.

Jest to mój pierwszy post na forum, dlatego chciałbym serdecznie pozdrowić wszystkich forumowiczów. Poniżej zamieszczam opis moich doświadczeń z routerem Netgear R6220. Być może te informacje oszczędzą komuś trochę czasu smile.

Niedawno zakupiłem używany router Netgear R6220 z zamiarem wgrania OpenWRT. Po wgraniu wersji 18.06.4 wszystko wyglądało dobrze, do momentu wykonania restartu urządzenia po wstępnej konfiguracji. Od tego momentu router zaczął się cyklicznie restartować i nie było z nim żadnego kontaktu. Wgranie oryginalnego firmware za pomocą nmrpflash przywracało router do życia, ale ponowne próby kończyły się tak samo.

Po otwarciu routera i podłączeniu się za pomocą portu szeregowego okazało się, że przyczyną restartów jest błąd przy podłączaniu partycji ubifs:

[    4.911875] UBI: auto-attach mtd3
[    4.918489] ubi0: attaching mtd3
[    5.040392] mtk_nand: UnCorrectable at PageAddr=9473
[    5.050290] ubi0 warning: 0x802efa94: error -5 while reading 64 bytes from PEB 100:2048, read only 0 bytes, retry
[    5.071316] mtk_nand: UnCorrectable at PageAddr=9473
[    5.081208] ubi0 warning: 0x802efa94: error -5 while reading 64 bytes from PEB 100:2048, read only 0 bytes, retry
[    5.102212] mtk_nand: UnCorrectable at PageAddr=9473
[    5.112126] ubi0 warning: 0x802efa94: error -5 while reading 64 bytes from PEB 100:2048, read only 0 bytes, retry
[    5.133142] mtk_nand: UnCorrectable at PageAddr=9473
[    5.143048] ubi0 error: 0x802efab0: error -5 while reading 64 bytes from PEB 100:2048, read 0 bytes
[    5.161060] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.14.131 #0
[    5.173175] Stack : 00000000 00000000 00000000 00000064 00000000 00000000 00000000 00000000
[    5.189804]         00000000 00000000 00000000 00000000 00000000 00000001 87c31ba8 53261662
[    5.206434]         87c31c40 00000000 00000000 00003b48 00000038 804835d8 00000007 00000000
[    5.223063]         00000000 80530000 00027524 00000000 87c31b88 00000000 80550000 00000000
[    5.239692]         00c80800 00000000 00000800 00000064 00000000 8029b5a8 00000004 80590004
[    5.256321]         ...
[    5.261178] Call Trace:
[    5.261193] [<804835d8>] 0x804835d8
[    5.272966] [<8029b5a8>] 0x8029b5a8
[    5.279892] [<80010090>] 0x80010090
[    5.286819] [<80010098>] 0x80010098
[    5.293747] [<8046c57c>] 0x8046c57c
[    5.300672] [<802efab0>] 0x802efab0
[    5.307600] [<802efab8>] 0x802efab8
[    5.314533] [<802f0088>] 0x802f0088
[    5.321461] [<802ef7bc>] 0x802ef7bc
[    5.328386] [<802f5770>] 0x802f5770
[    5.335316] [<802f6b6c>] 0x802f6b6c
[    5.342245] [<802e9590>] 0x802e9590
[    5.349171] [<8007033c>] 0x8007033c
[    5.356100] [<8056f454>] 0x8056f454
[    5.363031] [<8056f110>] 0x8056f110
[    5.369956] [<80557248>] 0x80557248
[    5.376883] [<80005560>] 0x80005560
[    5.383813] [<8004b600>] 0x8004b600
[    5.390741] [<80557cc8>] 0x80557cc8
[    5.397668] [<80557248>] 0x80557248
[    5.404596] [<8048390c>] 0x8048390c
[    5.411525] [<8048391c>] 0x8048391c
[    5.418450] [<8048390c>] 0x8048390c
[    5.425376] [<8000afd8>] 0x8000afd8
[    5.432308] 
[    5.435415] ubi0 error: 0x802e95b0: failed to attach mtd3, error -5
[    5.447915] UBI error: cannot attach mtd3
[    5.455918] hctosys: unable to open rtc device (rtc0)
[    5.466729] VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
[    5.481653] Please append a correct "root=" boot option; here are the available partitions:
[    5.498287] 1f00            1024 mtdblock0 
[    5.498292]  (driver?)
[    5.511306] 1f01            1024 mtdblock1 
[    5.511311]  (driver?)
[    5.524311] 1f02            4096 mtdblock2 
[    5.524316]  (driver?)
[    5.537312] 1f03           28672 mtdblock3 
[    5.537317]  (driver?)
[    5.550318] 1f04            1024 mtdblock4 
[    5.550323]  (driver?)
[    5.563340] 1f05           61440 mtdblock5 
[    5.563345]  (driver?)
[    5.576342] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    5.594902] Rebooting in 1 seconds..

Co ciekawe przy pierwszym uruchomieniu, gdy nieużywana część pamięci flash partycji jest kasowana, błędy nie występują.

Dalsze testy za pomocą narzędzia nandtest wykazały, że zgodnie z informacją w powyższym logu, w bloku (eraseblock) nr 100 losowo występują błędy odczytu (ECC).

W pierwszym podejściu postanowiłem doprowadzić, do zaznaczenia bloku 100 jako błędnego, tak aby był on pomijany w kolejnych operacjach.

Po wielu próbach okazało się jednak, że sterownik obsługujący pamięć flash (NAND) dla tego typu chipsetu nie działa prawidłowo. Próba zapisania w bloku bbt informacji o błędzie powoduje za każdym razem zawieszenie procesu (próby wykonywałem za pomocą zmodyfikowanego programu nandtest). Być może komuś bardziej obytemu z pamięciami NAND i sterownikiem MTK uda się ustalić przyczynę problemu.

Wykonane eksperymenty wskazują, że obecnie pojawienie się nowego błędnego bloku w trakcie pracy routera nie będzie poprawnie obsłużone i doprowadzi do awarii.

Pozostało drugie rozwiązanie - kompilacja obrazu ze zmniejszoną partycją ubi i zastosowanie zewnętrznej pamięci flash dla systemu plików.
Po kilku próbach udało mi się skompilować OpenWRT w takiej postaci, aby jądro było kompatybilne z oficjalnymi pakietami opkg (dzięki poradom na stronie https://hamy.io/post/0015/how-to-compil … epository/).
W oficjalnej wersji 18.06.4 wykonałem dwie zmiany: zmniejszyłem partycję ubi (z 0x1280000 do 0x0c80000) - plik mt7621_netgear_r6220.dts:

        partition@600000 {
            label = "ubi";
            reg = <0x600000 0x0c80000>;
        }; 

oraz zastosowałem poprawkę blokującą przesuwanie adresów partycji mtd, w przypadku występowania błędnych bloków - zmiana w pliku mtk_nand2.c w funkcji nand_set_flash_node():

shift_on_bbt = 0;

Z nieustalonych przyczyn w zbudowanym przeze mnie obrazie nie było modułów obsługujących WiFi - po wgraniu obrazu musiałem je doinstalować:

opkg install kmod-mt7603
opkg install kmod-mt76x0e
opkg install kmod-mt76x2
opkg install wpa-supplicant
opkg install hostapd

Podsumowując, udało mi się uzyskać sprawny router z OpenWRT, przy czym niezbędna jest indywidualna kompilacja obrazu OpenWRT. Zmniejszenie rozmiaru partycji z systemem plików zrekompensowałem za pomocą pendrive USB 4GB.
Wadą tego rozwiązania jest oczywiście brak możliwości upgrade do kolejnych wersji bez indywidualnej kompilacji nowego obrazu.

Wszystkim posiadaczom takiego routera z odzysku odradzam używanie go bez external root. Podejrzewam, że pamięć flash w tych urządzeniach jest już mocno wyeksploatowana, co w połączeniu z niedziałającym mechanizmem oznaczania błędnych bloków, musi w końcu doprowadzić do awarii lub trudnych do zdiagnozowania zawieszeń i restartów.
(Podejrzewam, że przyczyną wysypu ofert tych urządzeń maże być właśnie ich niestabilna praca spowodowana błędami pamięci flash. Po zresetowaniu urządzenia, błędne bloki są chwilowo nieużywane i urządzenie wydaje się być sprawne - do momentu gdy system plików zacznie się zapełniać.)

Jeśli ktoś chciałby wgrać OpenWRT bez otwierania routera i podłączania się pod port szeregowy, to proponuję od razu skompilować jądro z minimalnym niezbędnym rozmiarem partycji ubi (np. 4MB), aby zminimalizować prawdopodobieństwo trafienia na błędny blok flash  i użyć external root. Przy odrobinie szczęścia powinno się udać smile.

2

Odp: Netgear R6220 - ciągłe restarty po wgraniu OpenWRT

w 19.07 jest to naprawione, 18.06 jest już martwe.
http://downloads.openwrt.org/releases/1 … ps/mt7621/

3

Odp: Netgear R6220 - ciągłe restarty po wgraniu OpenWRT

Co dokładnie zostało naprawione (poza zmianą adresów partycji)? Pierwsze testy prowadziłem na wersji snapshot (zgodnie z poradnikiem Quick Image Building Guide) i nie zauważyłem różnic.

4

Odp: Netgear R6220 - ciągłe restarty po wgraniu OpenWRT

Wyzerowano właśnie shift_on_bbt, bo jak pisałeś przesuwał offsety i najczęściej wifi nie wstawało bo nie znalazł danych.

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