Jak odblokować maksymalną jasność projektora HY-300 za pomocą ADB i reverse engineering oprogramowania Rockchip
Producenci budżetowych projektorów często sztucznie ograniczają jasność, nie zapewniając użytkownikom ustawień. Na przykładzie HY-300 z SoC Rockchip RK3326 pokażemy, jak uzyskać root dostęp przez ADB, wyłączyć dm-verity i edytować gamma LUT, aby przywrócić pełną jasność wyświetlacza.
Analiza platformy sprzętowej i problemy
Projektor HY-300 jest zbudowany na SoC Rockchip RK3326 z systemem Android TV OS. Kluczowym problemem jest całkowity brak ustawień jasności w interfejsie. Wizualnie jasność spada zaraz po uruchomieniu, pozostając na poziomie około 70% potencjalnego maksimum. Badania wykazały, że standardowy mechanizm kontroli podświetlenia w Androidzie nie działa: węzeł backlight w device tree jest skonfigurowany nieprawidłowo, brakuje powiązania z kanałem PWM.
Co zostało sprawdzone bezskutecznie:
- Zmiana screen_brightness przez ustawienia
- Manipulacje właściwościami systemowymi (persist.vendor.brightness.main)
- Bezpośrednie sterowanie przez /sys/class/leds/Lcd_power
- Polecenia SurfaceFlinger dla macierzy kolorów
Podłączenie ADB i uzyskanie dostępu root
Ponieważ podłączenie USB powoduje konflikty zasilania, jedyną działającą metodą jest ADB przez Wi-Fi. W Android TV tryb dewelopera włącza się przez dotknięcie wersji systemu, ale w tym przypadku ADB i root były dostępne domyślnie.
adb connect <IP projektora>:5555
adb root
Po podłączeniu okazało się, że partycje /system i /vendor są chronione przez dm-verity, co blokuje jakikolwiek zapis. Rozwiązaniem jest jednorazowe wykonanie adb disable-verity z późniejszym restartem. To aktywuje overlayfs, umożliwiając edycję partycji systemowych.
Poszukiwanie mechanizmu sterowania jasnością
Analiza logów uruchamiania ujawniła usługę testgamma, która wykonuje się przy starcie systemu. Jej skrypt /system/bin/testgammatx.sh zawiera parametry bezpośrednio wpływające na korekcję gamma:
testgamma --wb_r 1.0 --wb_g 0.96 --wb_b 0.95 --contrast 58 --brightness 30 --saturation 80 --hue 35 --target_gamma 1.8 --native_gamma 2.9
Narzędzie testgamma zapisuje Look-Up Table (LUT) bezpośrednio do procesora wideo VOP przez DRM ioctl. Jednak parametry brightness, contrast, saturation i hue są fikcyjne — VOP Lite w RK3326 nie obsługuje odpowiednich właściwości DRM (BCSH). Rzeczywisty wpływ mają tylko:
- wb_r, wb_g, wb_b — współczynniki balansu bieli (0.0–1.0), działające jako mnożniki jasności dla każdego kanału koloru.
- target_gamma, native_gamma — określają kształt krzywej gamma, wpływając na wyświetlanie ciemnych tonów.
Dlaczego zmiany wymagają restartu
Usługa testgamma wykonuje się przed uruchomieniem SurfaceFlinger i HWC (hwcomposer). HWC przechwytuje sterowanie urządzeniem DRM i nadpisuje ustawienia VOP w każdej klatce, czyniąc jakiekolwiek wywołania testgamma w czasie rzeczywistym nieskutecznymi. Dlatego edycja skryptu z późniejszym restartem to jedyny sposób na zastosowanie zmian.
Optymalizacja parametrów dla maksymalnej jasności
Systematyczne testowanie różnych kombinacji parametrów po każdym restarcie pozwoliło znaleźć optymalną konfigurację. Ustawienia fabryczne zmniejszały jasność na dwa sposoby: obniżeniem współczynników dla kanałów zielonego i niebieskiego (0.96 i 0.95) oraz ustawieniem target_gamma=1.8 przy native_gamma=2.9.
Wyniki testowania:
- wb_r/g/b = 0.1, target_gamma=2.2 — jasność ~10%
- wb_r/g/b = 0.5, target_gamma=1.8 — jasność ~50%
- wb_r/g/b = 1.0, target_gamma=1.0 — maksymalna jasność z odwróconymi kolorami
- wb_r/g/b = 1.0, target_gamma=1.6 — optymalny balans jasności i wierności kolorów
Instrukcja krok po kroku
Dla właścicieli projektorów HY-300 na RK3326 (oprogramowanie TXCZ) zalecamy następujący algorytm działań.
1. Przygotowanie i podłączenie:
Zainstaluj Android Platform Tools na PC, sprawdź adres IP projektora w sieci. Wykonaj:
adb connect <IP>:5555
adb root
2. Wyłączenie ochrony dm-verity (jednorazowo):
adb disable-verity
adb reboot
Poczekaj na pełne uruchomienie i podłącz się ponownie.
3. Ustawienie maksymalnej jasności:
adb shell mount -o remount,rw /system
adb shell "echo '#!/system/bin/sh\ntestgamma --wb_r 1.0 --wb_g 1.0 --wb_b 1.0 --contrast 58 --brightness 50 --saturation 80 --hue 35 --target_gamma 1.6 --native_gamma 2.9' > /system/bin/testgammatx.sh"
adb reboot
4. Powrót do ustawień fabrycznych:
adb shell mount -o remount,rw /system
adb shell "echo '#!/system/bin/sh\ntestgamma --wb_r 1.0 --wb_g 0.96 --wb_b 0.95 --contrast 58 --brightness 30 --saturation 80 --hue 35 --target_gamma 1.8 --native_gamma 2.9' > /system/bin/testgammatx.sh"
adb reboot
Co jest ważne
- ADB i root są dostępne domyślnie w tym oprogramowaniu, co ułatwia badanie.
- Główny mechanizm sterowania jasnością to gamma LUT, zapisywana przez narzędzie testgamma w VOP.
- Zmiany wymagają restartu, ponieważ HWC nadpisuje ustawienia w czasie rzeczywistym.
- Optymalne parametry: wb_r/g/b = 1.0, target_gamma = 1.6 przy native_gamma = 2.9.
- Metoda jest stosowana do innych urządzeń na Rockchip z podobną architekturą.
Wnioski dla deweloperów
Badanie pokazuje typowe problemy budżetowych urządzeń z Androidem: nieprawidłowa konfiguracja device tree, użycie przestarzałych lub nieudokumentowanych mechanizmów sterowania sprzętem. Zrozumienie działania DRM, gamma LUT i overlayfs pozwala nie tylko rozwiązywać konkretne problemy, ale też głębiej analizować architekturę systemów wbudowanych. Dla projektorów na innych SoC potrzebna jest adaptacja metod, ale ogólne podejście — analiza logów, reverse engineering usług systemowych i bezpośrednie sterowanie przez interfejsy debugowania — pozostaje uniwersalne.
— Editorial Team
Brak komentarzy.