Skip to main content
  1. Posts/
  2. blog.dsinf.net/

Wprowadzenia słów kilka do RS-232 w telewizorach LG

·1254 words·6 mins
blog.dsinf.net embedded flatron m2280df lg linux rom rs-232
Daniel Skowroński
Author
Daniel Skowroński

Pewien czas stał i czekał na decyzję o serwisie przez głupi eksperyment ze zmienieniem nieznanej wartości w menu debugowania - LG Flatron serii Mxx80DF. Wprowadzenia słów kilka do RS-232 w telewizorach LG.

Zastanawiałem się od czego zacząć. I zacznę nie od początku - LGMOD NIE jest dla sprzętu LG serii Flatron.
A teraz po kolei. W każdej instrukcji do telewizora z portem RS-232 dołożony jest opis konfiguracji gniazda i kody sterujące - bardzo praktyczne kiedy chcemy napisać makra, o których kiedyś pisałem - np. czujnik światła i mamy wzorcowy wyświetlacz.
Aby się podłączyć poza kablem potrzebujemy jeszcze programu do sterowania terminalem - klasyczny PuTTY - także na Linuksa ( http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html), TeraTerm ( http://logmett.com/index.php?/download/tera-term-477-freeware.html), czy Linuksowy CuteCOM ( http://cutecom.sourceforge.net/).

Czas na kilka słów o łączeniu się z portem szeregowym.
Po pierwsze telewizory LG (jak prawie każde urządzenie) mają “chłopczyka”, czyli piny, a nie gniazdo. A większość adapterów na USB też - potrzeba nam przelotki dziewczyna-dziewczynka, które bywają droższe od adapterów. Warto pogrzebać w domu albo popytać w starych serwerowniach bo były wykorzystywane do modemów, ale kolejna uwaga - są szerokie (25 pinowe) i wąskie (9 pinowe).
Ustawienia transmisji:

  • baudrate - prędkość: 9600 bodów dla sterowania i debugowania, (115200 bodów do bootloadera),
  • liczba bitów danych - 8,
  • liczba bitów stopu - 1,
  • kontrola parzystości (parity) - brak,
  • kontrola przepływu - flow control - brak!

Podstawowe sterowanie opisane w instrukcji nie jest zbytnio ekscytujące - ot to samo co możemy “wyklikać” pilotem. Debugowanie oferuje nam wiele możliwości. Podgląd wiadomości debugowania uzyskujemy po prostu wysyłając klawisz F9 - jest to istotne bo menu i odpowiedzi trybu debugowania staną się wówczas widoczne, ale także wszelkie informacje o błędach, takie jak dramatyczne

043.509:MICOM   ] 
 ERROR I2C Read port:0x4 addr:0x90

Ale póki wiemy co robimy to raczej nie powinniśmy tego zobaczyć.
Aby dostać się do samego trybu debugowania potrzebne będzie nam hasło, które nie jest specjalnie wymyślne - jest to

PEŁNY_MODEL_TELEWIZORAelqjrm
np. M2280DF-PZMelqjrm

istotne jest użycie całej nazwy (w moim wypadku PZM w odróżnieniu od PZ oznacza jedynie fakt, że mam subwoofer), elqjrm to tajna fraza.
Istnieją 4 sposoby jego wpisania:

1: <HASŁO>dd
2: d<HASŁO>
3: d<HASŁO>debugd
4:

Listę poleceń można uzyskać przez komendę help lub sam znak zapytania .

Drzwi do zepsucia telewizora zostały uchylone, czas je otworzyć i uwolnić pingwina - dostać się do powłoki systemu. To dosyć delikatna operacja i bardzo zależna od platformy.
Ogólnie platformy, czyli procesory o jakie oparto LG są trzy - Saturn 6, Saturn 7 i Broadcom. Nie spotkałem się z kompleksową listą modeli i procesorów, ale włoskie wersje instrukcji, które posiadają dodatkowe strony ze schematem logicznym telewizorów mogą pomóc. W ogólności platformy te następowały po sobie; w moim monitorze z 2010 jest Saturn 6.
Oto kilka metod jak dostać się do shella (a konkretniej busyboxa):

Saturn6: call debug_os_shell+0xac
Saturn7: call debug_os_shell+0xb0
Broadcom: call debug_os_shell+0x90

Inne metody i dokładne wskazówki na http://openlgtv.org.ru/wiki/index.php/Debug_mode_connection#Busybox_shell_access
Najwaniejszą rzeczą będzie wykonanie backupu za pomocą skryptu powloki i podpiętego nośnika USB zformatowanego jako FAT32! do pierwszego (ewentualnie jedynego) złącza z tyłu:

#najpierw sprawdź, czy dysk zamontował się w /mnt/usb1/Drive1, np.
ls -al  /mnt/usb1/Drive1
#jeśli nie to powinien być urządzeniem /dev/sda1, wówczas
mount /dev/sda1 /mnt/usb1/Drive1

#backup
for i in `cat /proc/mtd | grep -v erasesize | awk '{gsub(/[":]/,"");print $1 "_" $4}'`; do echo \
Backup of $i ...; cat /dev/`echo $i | awk '{gsub(/_/," ");print $1}'` > /mnt/usb1/Drive1/$i; done

#odpmontowanie - sync bardzo ważny
sync
umount /dev/sda1

Powstałe pliki razem z odnalezionym w czeluściach internetu oprogramowaniem w formie pliku EPK (a najlepiej dodatkowo narzędziami na Linuksa pozwalającymi skonwertować je do obrazu dysku w postaci raw - mirror najnowszej wersji pod artykułem lub na http://openlgtv.org.ru/wiki/index.php/Firmware_unpack_tools) wypada wypalić na płytę i trzymać w bezpiecznym miejscu, ażeby nie mieć potem problemu.

Drzwi otwarte - chyba czas je wyważyć razem z futryną i kawałkiem muru 😉 Bootloader we wszystych modelach poza SmartTV nie powinien być zaszyfrowany.
Pierwsza zmiana to inny baudrate - 115200bps. Wyłączamy telewizor, wpinamy kabel, odpalamy program i w czasie gdy włącza się urządzenie (po wciśnięciu włącznika rzecz jasna) przesyłamy po terminalu jedno z poniższych aż do uzyskania

mstar #
lub saturn7 #

 

  • przytrzymanie klawisza Escape
  • wciśnięcie Ctrl+C
  • umieszczenie losowych danych - najpraktyczniej z /dev/urandom cat /dev/urandom > /dev/ttyUSB0

 

Wszystkie bootloadery Saturn mają taki sam rozkład komend:

mstar # help
?       - alias for 'help'
appxip  - copy to ram for appxip
base    - print or set address offset
bbm     - nand bad block management
bootm   - boot application image from memory
bootp   - boot image via network using BootP/TFTP protocol
cmp     - memory compare
cp      - memory copy
cp2ram  - copy to ram for partition name
crc32   - checksum calculation
dcache  - enable or disable data cache
defaultenv - set default env
go      - start application at address 'addr'
help    - print online help
load    - downlaod image file, and write on flash
loadz   - downlaod image file using zmodem, and write on flash
loop    - infinite loop on address range
md      - memory display
mm      - memory modify (auto-incrementing)
mtdinfo - edit or add or remove mtdinfo
mtest   - simple RAM test
mw      - memory write (fill)
nand    - NAND sub-system
nboot   - boot from NAND device
nm      - memory modify (constant address)
nvmdbg  - eeprom test progrm
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
rarpboot- boot image via network using RARP/TFTP protocol
reboot  - Perform RESET of the CPU
reset   - Perform RESET of the CPU
rs      - downlaod image file,though zmodem
run     - run commands in an environment variable
rz      - downlaod image file,though zmodem
saveenv - save environment variables to persistent storage
setboot - set boot type(root filesystem)
setenv  - set environment variables #przydatne do zmiany parametrów jądra
silent  - silent all or nothing
swu     - downlaod epk image file, and write on flash
swuz    - downlaod epk image file, and write on flash #docelowa metoda pobierania EPK przez zmodem
tftpboot- boot image via network using TFTP protocol
usb     - USB sub-system
version - print monitor version
xip     - copy to ram for xip

Jak widać mimo, że model nie ma Ethernetu to ma pinga w menedżerze rozruchu… Ale jeśli nasz model łapie się pod LGMOD (lista na http://openlgtv.org.ru/wiki/index.php/Achievements, warto zapoznać się z uwagami - http://openlgtv.org.ru/wiki/index.php/LGMOD) to na USB można podpiąć adapter i ze starego, taniego telewizorka wystawiać FTP 😉

Ratowanie sprzętu
Cóż, zdarza się przestawić niewiadomo co - nie ma co panikować. Jeśli zrobiliśmy backup, albo mamy oryginalny EPK to po problemie, chyba, że bootloader nie odpowiada. Co warto zauważyć, to fakt, że migająca dioda power włączana jest przez rodzaj BIOSu, a wyłączana lub jej miganie zatrzymywane przez zabootowany do końca system operacyjny.

W razie dziwnych reakcji konsoli warto odciąć zasialnie całkowicie, pozmieniać baudrate (ale zacząć od 115200 dla bootloadera), sprawdzić, czy kabel jest OK. Jeśli wszytsko zawiedzie najlepszym posunięciem jest podpięcie się do konsoli debugowania, czyli zwykłego trybu, włączenie wiadomosći debuggera (zwykle F9) i aktywowanie w Puttym opcji logowania do pliku.
Dwa świetne fora na których społeczość jestt ciągle aktywna: http://openlgtv.org.ru/forum/index.php i http://www.lg-hack.info/.

Wskazówki końcowe

 

  • Najlepiej włączyć logowanie do pliku na stałe w naszym kliencie portu szeregowego - zawsze będzie łatwiej sprawdzić co się stało (zwłaszcza, gdy konsola jest zalewana ciągłym komunikatem o błędach pamięci)
  • W wielu menu są opcje niezlinkowane z niczym (gdzieś natknąłem się na if you really want this you can make it
  • Zmiana adresowań pamięci to funkcja o której lepiej się trzymać z dala, chyba, że wiemy co robimy i chemy np. rysować po ekranie
  • Najlpeije zrobić backup i ściągnąć oryginalne oprogramowanie zawczasu

 

Szczegóły na temat formatu EPK: http://openlgtv.org.ru/wiki/index.php/EPK_file_format

 

ROM dla Flatrona M80 (np. M2280DF) -> EPK__LG_FLATRON.zip