Powrót do strony głównej

Odblokowanie jasności projektora HY-300 za pomocą ADB i reverse engineering

Techniczny przewodnik po odblokowaniu maksymalnej jasności projektora HY-300 na Rockchip RK3326 za pomocą ADB i reverse engineering firmware. Opisano metody uzyskania root access, wyłączenia dm-verity, edycji gamma LUT i optymalizacji parametrów testgamma w celu przywrócenia pełnej jasności wyświetlacza.

Maksymalna jasność HY-300: reverse engineering firmware Rockchip
Advertisement 728x90

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:

Google AdInline article slot
  • 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:

Google AdInline article slot
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.

Google AdInline article slot

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

Advertisement 728x90

Czytaj dalej