← Все записи
Телевизор / Инструкции / Android

Замена платы телевизора: полная инструкция и откат

UART, ADB, резервные копии, профиль Full HD, ограничения Android и порядок каналов LVDS. Команды и комплект для TP.T950ST.PB752(N).

Содержание
  1. 1. Что удалось исправить
  2. 2. Что означает одинаковый разъём
  3. 3. Состав архива и границы применимости
  4. 4. Что потребуется
  5. 5. Получение доступа: сначала сеть
  6. 6. UART: запуск Android shell
  7. 7. Диагностика профиля панели — до изменения файлов
  8. 8. Обязательные собственные резервные копии
  9. 9. Как было установлено, что профиль Full HD подходит
  10. 10. Проверенные конечные параметры LCD
  11. 11. Сохранение профиля: только для совпадающей проверенной конфигурации
  12. 12. Почему изображение двоилось: главный результат ремонта
  13. 13. Убрать отдельное ограничение Android UI до 720p
  14. 14. Убрать ограничение буфера SurfaceFlinger
  15. 15. Доказать Full HD на каждом участке
  16. 16. Тесты изображения и отделение ошибок
  17. 17. Таблица симптомов
  18. 18. Откат и восстановление доступа
  19. 19. Контрольные суммы конкретных LCD-профилей
  20. 20. Финальная приёмка

Это техническое продолжение истории ремонта. Готовые LCD-профили относятся только к описанной конфигурации; для другой панели сначала нужна проверка совместимости.

Практическая инструкция по завершённому ремонту. Рабочая конфигурация проверена 29 октября 2026 года. Публичная редакция от той же даты.

1. Что удалось исправить

В телевизор установили материнскую плату с такими же разъёмами, но от другой матрицы. Android загружался и получал IP-адрес. Подсветка работала, а экран был чёрным с широкой зелёной полосой. После настройки появилось изображение, затем удалось убрать ограничение интерфейса 720p и двоение.

Конечный результат подтверждён владельцем после применения пакета и перезагрузки: изображение работает правильно.

Узел Проверенная конфигурация
Материнская плата TP.T950ST.PB752 (N)
Платформа Amlogic TXHD2
Android / устройство Android 14, t950s_be30ae, сборка с поддержкой adb root
Оперативная память 1 ГБ по загрузочному журналу
Родная плата матрицы Маркировка V400HJB-P03-CG
Родная панель Full HD; полная модель панели в ходе работы не была достоверно установлена
Донорская плата матрицы LC320DXJ-SHAE VESA HD; с родной панелью не использовалась
Исходный профиль донора GENERAL_1366_768, LVDS, 8 бит, один канал
Рабочее подключение Новая материнка → родной шлейф → родная плата матрицы → родная панель
Рабочий профиль 1920×1080, 60 Гц, LVDS VESA 8 бит, два канала, port_swap=1

Инструкция состоит из общего способа диагностики и файлов конкретного ремонта. Бинарные профили из архива не являются универсальной прошивкой. Совпадение надписи на PCB и формы разъёмов недостаточно для применения этих файлов к другому телевизору.

2. Что означает одинаковый разъём

Одинаковые материнские платы могут комплектоваться разными панелями, шлейфами и настройками. В нашем случае донор использовал один канал LVDS, а родная панель — два. У родного шлейфа было больше проводов.

До включения необходимо установить:

  • точную модель панели по её наклейке и требования к интерфейсу;
  • назначение контактов обоих разъёмов, особенно питания и земли;
  • напряжение питания платы матрицы;
  • совместимость родного шлейфа с выходом новой материнки;
  • тип интерфейса: LVDS, V-by-One, eDP и другие варианты не взаимозаменяемы программной настройкой.

Сопротивление около 46 кОм и расположение одинаковых разъёмов сами по себе напряжение и распиновку не подтверждают. В этом ремонте по фотографиям обеих плат было установлено, что перемычка R12V установлена, а R5V не установлена; это не заменяет проверку напряжения и документации на другой плате.

Все подключения и перестановки шлейфов выполнять при отключённом питании. Не использовать донорскую плату матрицы только потому, что она пришла вместе с материнкой: она должна соответствовать самой панели. Сетевая часть блока питания телевизора опасна даже при работе через UART.

3. Состав архива и границы применимости

Файл / каталог Для чего нужен
INSTRUCTION_RU.md Эта инструкция
INSTRUCTION_RU.html Версия для браузера и печати
lcd_fhd_test/ Проверенный переход с исходного HD-профиля этого донора на Full HD с port_swap=0
lcd_port_swap/ Исправление порядка каналов: Full HD с port_swap=0 → Full HD с port_swap=1
TvFhdUiOverlay.apk Отдельный системный overlay, задающий framework config_maxUiWidth=1920
SHA256SUMS.txt Контрольные суммы содержимого архива

Скрипты проверяют хеши входных и текущих файлов. Если текущая конфигурация не известна скрипту, он отказывается от записи. Не удаляйте эти проверки ради запуска на другой плате.

Профиль LCD содержит не только разрешение: в нём есть настройки интерфейса и управления питанием. Для другой панели сначала нужен её профиль и отдельная проверка формата ключа. У данного LCD-ключа размер 145 байт; у другой версии драйвера он может отличаться.

Публичный UI overlay имеет нейтральный идентификатор com.local.tv.overlay.fhdui. Он пересобран с тем же единственным ресурсом config_maxUiWidth=1920; подпись и содержимое проверены локально. Именно эта пересобранная версия на физическом телевизоре отдельно не испытывалась. В исходном ремонте работала функционально такая же версия с другим идентификатором. Если телевизор уже исправлен по прежнему комплекту, переустанавливать overlay ради смены имени не требуется.

Полный дамп U-Boot environment, DRM-ключи и индивидуальные заводские данные владельца в этот архив не включены. Свои резервные копии сохраняйте отдельно.

4. Что потребуется

  • Windows с Android Platform Tools, примеры ниже рассчитаны на C:\platform-tools.
  • Ethernet-подключение телевизора и компьютера к одной локальной сети.
  • USB–TTL адаптер CP2102 или подходящий аналог и терминал для UART.
  • Доступ к маркировкам панели и плат.

Во всех примерах адрес телевизора — 192.168.1.197. Для своего телевизора замените его на адрес из DHCP-списка роутера.

Команды с PS C:\...> выполняются в PowerShell. Команды с console:/ $ или :/ # — в Android shell. Команды для txhd2_be30ae# — в U-Boot. Сами приглашения копировать не нужно.

Не вставляйте в консоль целиком текст справки вида echo <параметр> ... ; пояснение: угловые скобки, ; и & имеют специальное значение для shell.

5. Получение доступа: сначала сеть

Попробовать ADB:

cd C:\platform-tools
.\adb.exe connect 192.168.1.197:5555
.\adb.exe devices -l

Connection refused означает, что на этом адресе и порту соединение отвергнуто; это не доказывает неисправность Android.

Если установлен Nmap, можно посмотреть открытые TCP-порты:

nmap -sT -Pn -p- --open 192.168.1.197

В нашем случае были открыты:

Порт Что обнаружили Что это дало
8125/TCP WebSocket сервиса дистанционного управления Подтвердил работу Android; доступ к настройке панели не получен
9909/TCP AndServer с файлами приложения Только файлы приложения, не системная консоль
46299/TCP Jetty / DLNA MediaRenderer Управление медиарендерером, не ADB
5555/TCP Изначально закрыт Заработал после запуска adbd через UART

Номер порта DLNA может меняться. Не подключайте ADB к HTTP-порту в расчёте получить shell. Длительный поиск команд WebSocket и DLNA в этом случае не заменил UART.

6. UART: запуск Android shell

Подключение

Нужно достоверно определить GND, TX и RX на конкретной плате. Готовой проверенной распиновки UART для всех ревизий этой PCB в инструкции нет.

Использовать UART с логическими уровнями, соответствующими плате; не подавать 5 В на сигнальные линии. TX адаптера соединяется с RX платы, RX — с TX, GND — с GND. Питание платы от адаптера не подключать. Уровень UART проверять отдельно от положения вывода питания на CP2102.

В данном ремонте использовалась последовательная консоль 115200 бод; для терминала — 8N1, без аппаратного управления потоком.

Остановка загрузки

У проверенной платы U-Boot 2019.01, bootdelay=1. При включении остановить автозагрузку клавишей терминала в это окно. Ожидаемый prompt:

txhd2_be30ae#

Прочитать настройки:

version
printenv bootargs bootdelay stdin stdout stderr console earlycon

Ниже — команды именно для проверенного U-Boot, где переменные console и earlycon уже определены корректно. Не переносить на другую плату без проверки:

setenv silent
setenv bootargs "${bootargs} console=${console} earlycon=${earlycon} loglevel=7 ignore_loglevel"
run storeboot

Не выполнять saveenv: включение консоли здесь временное. Не стирать environment, reserved, bootloader и другие разделы.

В нашем журнале использовались ttyS0,115200 и UART по адресу 0xff803000. Эти значения не являются универсальными.

Если загрузка остановилась на ожидании

Строки Enter ddr suspend, ddr suspend is done, poweroff 5v, Close wifi en в нашем случае означали уход платы в ожидание. Короткое нажатие физической кнопки включения будило плату. Это важно: выключившийся экран и потеря ADB не обязательно означают неудачную прошивку.

Включение adbd из Android shell

После появления Android shell:

id
getprop ro.debuggable
getprop init.svc.adbd
setprop service.adb.tcp.port 5555
setprop ctl.start adbd
getprop service.adb.tcp.port
getprop init.svc.adbd

Ожидаем порт 5555 и состояние running.

Теперь в PowerShell:

.\adb.exe connect 192.168.1.197:5555
.\adb.exe -s 192.168.1.197:5555 shell id
.\adb.exe -s 192.168.1.197:5555 root
.\adb.exe connect 192.168.1.197:5555
.\adb.exe -s 192.168.1.197:5555 shell id

Продолжать операции записи только при uid=0(root). Если adb root запрещён сборкой, этот способ не подходит: наличие shell не равно наличию root.

Для сохранения сетевого ADB в проверенной прошивке использовались:

.\adb.exe -s 192.168.1.197:5555 shell setprop persist.adb.tcp.port 5555
.\adb.exe -s 192.168.1.197:5555 shell settings put global adb_enabled 1

После перезагрузки проверить соединение заново. Root-режим adbd может потребоваться включать снова. Держать такой ADB только в доверенной локальной сети; не пробрасывать 5555 в интернет.

7. Диагностика профиля панели — до изменения файлов

.\adb.exe -s 192.168.1.197:5555 shell cat /sys/class/aml_lcd/lcd0/vinfo
.\adb.exe -s 192.168.1.197:5555 shell cat /sys/class/aml_lcd/lcd0/dump
.\adb.exe -s 192.168.1.197:5555 shell cat /sys/class/aml_lcd/lcd0/lvds
.\adb.exe -s 192.168.1.197:5555 shell cat /sys/class/aml_lcd/lcd0/help
.\adb.exe -s 192.168.1.197:5555 shell cat /mnt/vendor/param/panel/panel_customer.ini

Нашли действующий INI именно по пути /mnt/vendor/param/panel/panel_customer.ini. Путь /param/panel внутри Android отсутствовал, хотя он фигурировал в U-Boot environment.

В дампе были panel_type: unifykey, key_valid: 1, config_load: 1: драйвер использовал LCD unifykey. Поэтому одной замены текстового INI было недостаточно для контролируемого результата.

Другие профили нашлись в /mnt/vendor/odm_ext/etc/tvconfig/panel. Они помогли определить параметры, но не были слепо скопированы: профили могут иметь другую подсветку и последовательность питания.

8. Обязательные собственные резервные копии

Выполнять до применения пакетов. Файлы с суффиксом original больше не перезаписывать последующими состояниями.

.\adb.exe -s 192.168.1.197:5555 pull /mnt/vendor/param/panel/panel_customer.ini C:\platform-tools\panel_customer_original.ini
"lcd" | .\adb.exe -s 192.168.1.197:5555 shell tee /sys/class/unifykeys/name
.\adb.exe -s 192.168.1.197:5555 shell cat /sys/class/unifykeys/name
.\adb.exe -s 192.168.1.197:5555 shell cat /sys/class/unifykeys/size

Для нашей платы размер ключа был 145. Затем:

.\adb.exe -s 192.168.1.197:5555 shell dd if=/sys/class/unifykeys/read of=/data/local/tmp/lcd_original.bin bs=4096 count=1
.\adb.exe -s 192.168.1.197:5555 pull /data/local/tmp/lcd_original.bin C:\platform-tools\lcd_original.bin
.\adb.exe -s 192.168.1.197:5555 shell dd if=/dev/block/by-name/env of=/data/local/tmp/uboot_env_original.bin bs=1048576
.\adb.exe -s 192.168.1.197:5555 pull /data/local/tmp/uboot_env_original.bin C:\platform-tools\uboot_env_original.bin
.\adb.exe -s 192.168.1.197:5555 pull /vendor/build.prop C:\platform-tools\vendor_build_before_fhd.prop

Размер environment в нашем случае — 8 МиБ. У другой разметки путь и размер проверяются отдельно. Дамп environment здесь только резервируется, штатный ремонт его не меняет.

Посчитать локальные хеши:

Get-FileHash C:\platform-tools\lcd_original.bin -Algorithm SHA256
Get-FileHash C:\platform-tools\panel_customer_original.ini -Algorithm SHA256
Get-FileHash C:\platform-tools\vendor_build_before_fhd.prop -Algorithm SHA256

9. Как было установлено, что профиль Full HD подходит

На первом этапе настройки меняли временно через sysfs, не переписывая сохранённый профиль. Это допустимо только после проверки характеристик панели. Для другой панели значения ниже не подбирать наугад.

Из PowerShell открыть root-shell:

.\adb.exe -s 192.168.1.197:5555 shell

В Android shell переходить по одному действию. После каждой команды tee вводить строку данных, Enter, затем Ctrl+D:

cd /sys/class/aml_lcd/lcd0
tee change

Ввести basic 1920 1080 2200 1130 8, Enter, Ctrl+D.

Снова tee change, затем sync 32 80 0 8 16 0, Enter, Ctrl+D.

Снова tee change, затем lvds 1 1 0 1 0, Enter, Ctrl+D. Эта команда в нашей версии драйвера поддерживалась, хотя краткая справка change её не перечисляла.

Снова tee change, затем clk 149160000, Enter, Ctrl+D.

Снова tee change, затем set, Enter, Ctrl+D.

Проверить cat dump, cat lvds, cat vinfo. Выйти командой exit.

В нашем сеансе буфер обмена иногда превращал > в число 62, кавычки — в 39, | — в 124. Команда echo ... 62 /путь ничего в sysfs не записывает. Метод с tee позволил обойти проблему. Ещё удобнее передавать одиночную строку через PowerShell:

"1 1 0 1 0" | .\adb.exe -s 192.168.1.197:5555 shell tee /sys/class/aml_lcd/lcd0/lvds

Изменение только LCD-драйвера во время работы не обновило все режимы DRM. Поэтому на промежуточном этапе картинка занимала угол экрана. Это не повод сразу перепаивать шлейф.

10. Проверенные конечные параметры LCD

Параметр Значение
h_active / v_active 1920 / 1080
h_period / v_period 2200 / 1130
hsync_width / hsync_bp / hsync_pol 32 / 80 / 0
vsync_width / vsync_bp / vsync_pol 8 / 16 / 0
pixel_clk 149160000 Гц
Частота 60 Гц
lcd_bits 8
repack 1: VESA 8 бит
dual_port 1
pn_swap 0
port_swap 1
lane_reverse 0
INI if_attr_0 … if_attr_3 1, 1, 0, 1
outputmode 1080p60hz

В этом ремонте параметры подсветки и управления питанием сохранили от рабочего профиля материнки. Не заменяли их настройками из произвольного lvds_fhd.ini.

11. Сохранение профиля: только для совпадающей проверенной конфигурации

Распаковать из архива каталоги lcd_fhd_test и lcd_port_swap в C:\platform-tools. Результат: например, C:\platform-tools\lcd_port_swap\apply.sh, без лишнего вложенного одноимённого каталога.

11.1. Из исходного HD-профиля — в Full HD

Этот шаг пропускают, если текущая плата уже имеет наш проверенный Full HD-профиль. Проверку выполняет также сам скрипт.

.\adb.exe -s 192.168.1.197:5555 root
.\adb.exe connect 192.168.1.197:5555
.\adb.exe -s 192.168.1.197:5555 push C:\platform-tools\lcd_fhd_test /data/local/tmp/
.\adb.exe -s 192.168.1.197:5555 shell sh /data/local/tmp/lcd_fhd_test/apply_profile_fhd.sh

Продолжать только после LCD_PROFILE_FHD_WRITE_VERIFIED. Этот промежуточный профиль содержит port_swap=0. Перезагрузка между двумя шагами не нужна.

11.2. Сохранить исправленный порядок A/B

.\adb.exe -s 192.168.1.197:5555 push C:\platform-tools\lcd_port_swap /data/local/tmp/
.\adb.exe -s 192.168.1.197:5555 shell sh /data/local/tmp/lcd_port_swap/apply.sh

Продолжать только после LCD_PORT_SWAP_WRITE_VERIFIED.

Скрипты проверяют исходные файлы, текущее содержимое ключа и INI, записывают согласованную пару, читают обратно и сверяют SHA-256. При ошибке после начала записи пытаются восстановить предыдущее состояние. При любой ошибке или ROLLBACK_VERIFICATION_FAILED не перезагружать и сохранить весь вывод: автоматический откат тоже может не сработать при отказе хранилища.

11.3. Загрузочный тест

.\adb.exe -s 192.168.1.197:5555 reboot

После загрузки, при необходимости короткого нажатия кнопки включения:

.\adb.exe connect 192.168.1.197:5555
.\adb.exe -s 192.168.1.197:5555 shell cat /sys/class/aml_lcd/lcd0/lvds
.\adb.exe -s 192.168.1.197:5555 shell cat /sys/class/aml_lcd/lcd0/vinfo

Ожидаем port_swap=1, два канала и 1920×1080. Не запускать старый скрипт Full HD повторно после исправления A/B: он рассчитан на прежний профиль и должен отказать по хешу.

12. Почему изображение двоилось: главный результат ремонта

После появления изображения оно выглядело зернистым, слегка двоилось, края букв были неровными. Скриншот выглядел лучше физического изображения. Дамп Android и HWC уже показывал Full HD без масштабирования. Выключение фильтра dejaggy эффекта не дало. Проверка APK лаунчера не выявила общей принудительной отрисовки в 720p; выбранные размеры ресурсов также были 1920×1080.

Проблему исправило одно временное переключение:

"1 1 0 1 0" | .\adb.exe -s 192.168.1.197:5555 shell tee /sys/class/aml_lcd/lcd0/lvds

До него было 1 1 0 0 0. После смены port_swap изображение сразу стало правильным. Затем это сохранили в INI и LCD-ключе и проверили после перезагрузки.

Вывод для диагностики: при нормальной геометрии картинки, но «рваных» или двойных контурах, нужно учитывать порядок каналов A/B. Разрешение Full HD и ровные широкие полосы ещё не доказывают корректный порядок соседних пикселей. Не следует сразу обвинять качество иконок или начинать перебирать тайминги.

13. Убрать отдельное ограничение Android UI до 720p

Исправление LVDS и разрешение Android — разные задачи. В этом ремонте существовали оба ограничения.

Проверить:

.\adb.exe -s 192.168.1.197:5555 shell wm size
.\adb.exe -s 192.168.1.197:5555 shell wm density
.\adb.exe -s 192.168.1.197:5555 shell cmd overlay lookup --verbose android android:integer/config_maxUiWidth

На проблемной плате было Physical size: 1920x1080, но Override size: 1280x720. wm size reset и wm size 1920x1080 не помогали: ресурс config_maxUiWidth=1280 приходил из /product/overlay/LowRamOverlay.apk.

Системный LowRamOverlay был immutable: отключение через cmd overlay disable запрещалось даже с root. Его удаление не использовалось: он содержит и другие настройки.

Временный fabricated overlay менял ресурс на 1920, но исчезал после загрузки. Для постоянного результата установлен отдельный TvFhdUiOverlay.apk из данного архива. Он содержит только integer/config_maxUiWidth=1920, без кода приложения.

Условия установки

Для проверенной платы:

.\adb.exe -s 192.168.1.197:5555 shell getprop ro.boot.verifiedbootstate
.\adb.exe -s 192.168.1.197:5555 shell getprop ro.boot.veritymode
.\adb.exe -s 192.168.1.197:5555 root
.\adb.exe connect 192.168.1.197:5555
.\adb.exe -s 192.168.1.197:5555 remount

Было orange, disabled, затем Remount succeeded. Это описание фактического состояния, не инструкция разблокировки другого телевизора. Если remount не работает или требует отключения verity — остановиться и разбирать конкретную прошивку отдельно.

Проверить конфигурацию overlay:

.\adb.exe -s 192.168.1.197:5555 shell cat /product/overlay/config/config.xml
.\adb.exe -s 192.168.1.197:5555 shell cat /system_ext/overlay/config/config.xml

В нашем случае обоих файлов не было. Если они существуют, порядок и включение нового overlay требуют отдельной проверки; установка по этому примеру не гарантирует приоритет.

Установка

Положить TvFhdUiOverlay.apk в C:\platform-tools:

.\adb.exe -s 192.168.1.197:5555 shell mkdir -p /system_ext/overlay
.\adb.exe -s 192.168.1.197:5555 push C:\platform-tools\TvFhdUiOverlay.apk /system_ext/overlay/TvFhdUiOverlay.apk
.\adb.exe -s 192.168.1.197:5555 shell chown 0:0 /system_ext/overlay/TvFhdUiOverlay.apk
.\adb.exe -s 192.168.1.197:5555 shell chmod 644 /system_ext/overlay/TvFhdUiOverlay.apk
.\adb.exe -s 192.168.1.197:5555 shell restorecon /system_ext/overlay/TvFhdUiOverlay.apk
.\adb.exe -s 192.168.1.197:5555 shell sync
.\adb.exe -s 192.168.1.197:5555 reboot

При ошибке любой команды сначала разобраться с ней, а не продолжать автоматически.

После загрузки:

.\adb.exe connect 192.168.1.197:5555
.\adb.exe -s 192.168.1.197:5555 shell cmd overlay list
.\adb.exe -s 192.168.1.197:5555 shell cmd overlay lookup --verbose android android:integer/config_maxUiWidth
.\adb.exe -s 192.168.1.197:5555 shell wm size reset
.\adb.exe -s 192.168.1.197:5555 shell wm size

Ожидаем включённый com.local.tv.overlay.fhdui, значение ресурса 1920 и Physical size: 1920x1080 без Override size: 1280x720.

wm density задаёт масштаб элементов, а не разрешение сигнала панели. В нашем сеансе Physical density была 240, Override density — 160; команда reset не всегда убирала override, поэтому результат нужно читать обратно. Однажды после сброса и возврата HOME лаунчер снова заполнил экран. Не использовать изменение density как доказательство, что изменился размер графического буфера.

14. Убрать ограничение буфера SurfaceFlinger

Даже после исправления wm size графический буфер оставался 1280×720 и растягивался до 1920×1080.

.\adb.exe -s 192.168.1.197:5555 shell getprop ro.surface_flinger.max_graphics_width
.\adb.exe -s 192.168.1.197:5555 shell getprop ro.surface_flinger.max_graphics_height
.\adb.exe -s 192.168.1.197:5555 shell grep -n max_graphics /vendor/build.prop

Нашли в /vendor/build.prop ширину 1280 и высоту 720. Следующие команды применять только если строки находятся именно в этом файле, исходные значения совпадают, есть root, успешный remount и сохранена собственная резервная копия build.prop.

.\adb.exe -s 192.168.1.197:5555 root
.\adb.exe connect 192.168.1.197:5555
.\adb.exe -s 192.168.1.197:5555 remount

Если резервной копии ещё нет, один раз выполнить:

.\adb.exe -s 192.168.1.197:5555 pull /vendor/build.prop C:\platform-tools\vendor_build_before_fhd.prop

Не перезаписывать прежнюю копию уже изменённым файлом. После успешного резервирования:

.\adb.exe -s 192.168.1.197:5555 shell sed -i s/ro.surface_flinger.max_graphics_width=1280/ro.surface_flinger.max_graphics_width=1920/ /vendor/build.prop
.\adb.exe -s 192.168.1.197:5555 shell sed -i s/ro.surface_flinger.max_graphics_height=720/ro.surface_flinger.max_graphics_height=1080/ /vendor/build.prop
.\adb.exe -s 192.168.1.197:5555 shell chmod 644 /vendor/build.prop
.\adb.exe -s 192.168.1.197:5555 shell restorecon /vendor/build.prop
.\adb.exe -s 192.168.1.197:5555 shell grep -n max_graphics /vendor/build.prop

Убедиться, что в файле 1920 и 1080; затем sync и reboot. После загрузки getprop должен тоже показывать новые значения. Обычный setprop не заменяет правку загрузочного источника readonly-свойств.

15. Доказать Full HD на каждом участке

.\adb.exe -s 192.168.1.197:5555 shell cat /sys/kernel/debug/dri/0/state | Select-String -Pattern "size=|crtc-pos=|src-pos=|mode:"

При необходимости root включается повторно после загрузки. Проверенный результат:

size=1920x1080
crtc-pos=1920x1080+0+0
src-pos=1920.000000x1080.000000+0.000000+0.000000
fb_size=8294400
mode: "1080p60hz"

Для проверки слоя лаунчера сначала закрыть заставку и открыть HOME:

.\adb.exe -s 192.168.1.197:5555 shell input keyevent 3
.\adb.exe -s 192.168.1.197:5555 shell dumpsys SurfaceFlinger > C:\platform-tools\surfaceflinger.txt
.\adb.exe -s 192.168.1.197:5555 shell dumpsys display > C:\platform-tools\display.txt

В дампе активным должен быть именно нужный экран, а не ScreenSaverActivity. Для LauncherMars у нас было activeBuffer=[1920x1080…], Source Crop 0 0 1920 1080 и Display Frame 0 0 1920 1080.

В display.txt оставалась строка mStableDisplaySize=Point(1280,720). Её наличие само по себе не означало действующий апскейл: активные viewport, буфер и область вывода уже были Full HD. Не исправлять каждое найденное число 1280 в системе без понимания его назначения.

16. Тесты изображения и отделение ошибок

Скриншот и фотография — разные точки наблюдения

.\adb.exe -s 192.168.1.197:5555 shell screencap -p /sdcard/launcher-fhd.png
.\adb.exe -s 192.168.1.197:5555 pull /sdcard/launcher-fhd.png C:\platform-tools\launcher-fhd.png

Сравнивать один и тот же неподвижный объект в PNG и на панели. Скриншот не показывает все последующие преобразования физического выхода. Фото камеры может добавлять муар и цветные края, поэтому оно тоже не является точной попиксельной копией.

Встроенный тест LCD

Режимы ниже подтвердились для проверенной ветки драйвера и нашей платы; у другой прошивки проверить справку и поведение.

"1" | .\adb.exe -s 192.168.1.197:5555 shell tee /sys/class/aml_lcd/lcd0/test

1 — цветные полосы, 2 — тонкие линии, 3 — сетка точек. Для выключения:

"0" | .\adb.exe -s 192.168.1.197:5555 shell tee /sys/class/aml_lcd/lcd0/test

В нашем ремонте линии оценивались как ровные, но это не исключило неправильный порядок A/B. Важен рисунок, различающий соседние чётные и нечётные пиксели, а не только прямизна широкой границы.

Лаунчер

APK установлен в /system/app/LauncherMars/LauncherMars.apk. Проверка показала базовую разметку 1920×1080, соответствующие фоны, но маленькие растровые иконки. Для эффективных размеров ресурсов:

.\adb.exe -s 192.168.1.197:5555 shell cmd overlay lookup --verbose com.cvte.tv.launcher.mars com.cvte.tv.launcher.mars:dimen/screen_width
.\adb.exe -s 192.168.1.197:5555 shell cmd overlay lookup --verbose com.cvte.tv.launcher.mars com.cvte.tv.launcher.mars:dimen/screen_height

Получили 1920.0px и 1080.0px из конфигурации 1920x1080. Полноразмерный буфер не делает маленькие PNG детальными, но ими нельзя объяснять любое двоение физического изображения.

HDMI

Внешний источник с известным разрешением 1920×1080 полезен как независимая проверка. Меню выбора входа можно открыть input keyevent 178. У HDMI может быть собственная обработка, поэтому его результат нужно интерпретировать вместе с тестом LCD и дампами.

В нашем сеансе также пробовали временно отключать SR0/SR1 dejaggy через /sys/class/amvecm/pq_user_set — эффекта не было. Это не вошло в конечное исправление. Перебирать все PQ-фильтры без контроля результата не требуется.

17. Таблица симптомов

Симптом Что проверять первым
Подсветка есть, чёрный экран, зелёная вертикальная полоса Питание/распиновку, соответствие профиля панели, один или два LVDS-канала
Картинка появилась, но занимает угол Совпадение LCD timings, режима DRM и области вывода; одного runtime-изменения LCD может быть мало
wm size не даёт убрать 1280×720 config_maxUiWidth и источник overlay
wm size уже 1080p, но DRM source 720p max_graphics_width/height и реальные размеры буфера
PNG лучше панели, буквы слегка двоятся Порядок A/B LVDS, затем другие участки вывода; не ограничиваться оценкой иконок
Команда echo вывела число 62 вместо изменения Ошибка передачи >; использовать tee или скрипт
После загрузки всё вернулось Проверить и INI, и unifykey, затем загрузочную синхронизацию профиля
error: closed / offline Сначала UART и состояние питания, затем переподключение ADB
UART сообщает ddr suspend, poweroff 5v В нашем случае — standby; короткая кнопка включения
У cat pc_mode нет вывода Не трактовать как «режим выключен»; в проверенном исходнике состояние выводилось в kernel log

18. Откат и восстановление доступа

18.1. Пропал только ADB

.\adb.exe disconnect 192.168.1.197:5555
.\adb.exe kill-server
.\adb.exe start-server
.\adb.exe connect 192.168.1.197:5555
.\adb.exe devices -l

Если устройство не отвечает, проверить UART. В режиме ожидания сначала разбудить кнопкой. Если Android загрузился, но adbd остановлен — повторить команды setprop из раздела UART.

18.2. Вернуть только порядок каналов

Временно, с root:

"1 1 0 0 0" | .\adb.exe -s 192.168.1.197:5555 shell tee /sys/class/aml_lcd/lcd0/lvds

Сохранённый откат к Full HD с port_swap=0:

.\adb.exe -s 192.168.1.197:5555 shell sh /data/local/tmp/lcd_port_swap/restore.sh

Должен появиться LCD_PORT_SWAP_RESTORE_VERIFIED. Это вернёт двоение на проверенной родной панели, но полезно для диагностического возврата.

18.3. Вернуть исходный HD-профиль донора

Если уже установлен финальный профиль, сначала выполнить откат port_swap из пункта 18.2. Затем:

.\adb.exe -s 192.168.1.197:5555 shell sh /data/local/tmp/lcd_fhd_test/restore_profile.sh

Ожидаем LCD_PROFILE_ORIGINAL_RESTORE_VERIFIED. Перезагружать только после успешной проверки. Исходный HD-профиль не рассчитан на родную Full HD-панель этого ремонта, поэтому возвращение чёрного экрана возможно и ожидаемо. Откат UI overlay и build.prop — отдельные действия.

18.4. Удалить добавленный UI overlay

После root, переподключения и успешного remount:

.\adb.exe -s 192.168.1.197:5555 shell rm /system_ext/overlay/TvFhdUiOverlay.apk
.\adb.exe -s 192.168.1.197:5555 shell sync
.\adb.exe -s 192.168.1.197:5555 reboot

18.5. Вернуть собственный build.prop

Использовать только сохранённую до изменения копию именно этой платы, не файл другого телевизора. После root и remount:

.\adb.exe -s 192.168.1.197:5555 push C:\platform-tools\vendor_build_before_fhd.prop /vendor/build.prop
.\adb.exe -s 192.168.1.197:5555 shell chmod 644 /vendor/build.prop
.\adb.exe -s 192.168.1.197:5555 shell restorecon /vendor/build.prop
.\adb.exe -s 192.168.1.197:5555 shell sync
.\adb.exe -s 192.168.1.197:5555 reboot

18.6. Нет изображения, но Android работает

Вернуть временно подходящий LVDS port_swap через ADB. Для постоянного отката использовать проверенные скрипты с резервными файлами. Если ADB нет, сначала UART и запуск adbd. Shell UART по умолчанию был uid=2000: не считать, что из него можно писать unifykey без получения root.

Если не загружается Android и ADB получить невозможно, универсального восстановления из U-Boot эта инструкция не обещает. Не стирать eMMC и не записывать чужие образы. Для дальнейшего восстановления нужны собственные дампы и схема загрузки конкретного устройства.

19. Контрольные суммы конкретных LCD-профилей

Файл / состояние SHA-256
LCD ключ исходного HD-профиля 7b6cb01a9d00ef9056bda3df3b2f6fd1b226d0dcbcc9364cd075e014dbab23b2
LCD ключ Full HD, port_swap=0 1590b7e451002e2aa8b0aa4d9e248732024c317ec332771f2df2c7c642ad8509
LCD ключ Full HD, port_swap=1 b79830f763a92d1b1647921b4e1dab164a94570d7833d46e2537b91756da2ab3
INI исходного HD-профиля f3fcafb5bd9630f319483ce3f0ec10ce3d93cd8033edb0db33cf5af36507af0e
INI Full HD, port_swap=0 527a219e8abf4883632528c1d0aa5c6f59ae6aadf24c15c44f9371a4c6182834
INI Full HD, port_swap=1 339e6d93bde23069fe5d181927cdded2265491099c8fc500bf1585699a077fb1

В исследованном 145-байтном LCD-ключе поле port_swap — uint16 little-endian по смещению 101, CRC32 — первые 4 байта по данным от смещения 4 до конца. Это результат разбора конкретного формата. Для другой длины/версии ключа смещения использовать нельзя.

20. Финальная приёмка

  • После обычной перезагрузки и пробуждения изображение на месте и не двоится.
  • /sys/class/aml_lcd/lcd0/lvds: repack=1, dual_port=1, pn_swap=0, port_swap=1, lane_reverse=0.
  • vinfo: 1920×1080, 60 Гц, pixel clock 149160000 Гц.
  • wm size: Physical size 1920x1080 без override 1280x720.
  • config_maxUiWidth: 1920.
  • SurfaceFlinger max_graphics: 1920 / 1080.
  • DRM: source и destination 1920×1080.
  • HOME, настройки, неподвижный мелкий текст и HDMI проверены визуально.
  • ADB подключается после перезагрузки; резервные копии хранятся вне телевизора.

Итог ремонта: сохранили родную панель, её плату и шлейф; адаптировали профиль донорской материнки, сняли два ограничения Android и исправили порядок каналов LVDS. Перепрошивка всего телевизора не потребовалась.

Файлы

Инструкция, скрипты и профили панели47 КБSHA-256 архива
← Все записи