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
.
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 hostapdPodsumowują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ć
.