Instruktaż/Tutorial Ratowanie kamerek 1.3mpix (Longse, ala EPCAM, ...)

kaugustyn

Moderator
Q's Excellence
27 Styczeń 2014
62
32
18
QNAP
TS-x79 Pro
Ethernet
10 GbE
Ponieważ udało mi się uwalić kemerkę 1.3mpix opartą o układ HI3815, postawnowiłem trochę podłubać i udało mi się ją przywrócić do pierwotnego stanu.
Poniżej w miaę kompletny tutorial jak odratowć taką kamerkę po wgraniu złego softu. Może też pomóc na inne przypadłości :)

Potrzebne będą :
  1. Ogólna wiedza z zakresu : linux,sieć,posługiwanie się lutownicą
  2. serwer TFTP ( popularny TFTPD32 lub TFTPD64 by Philippe Jounin, strona domowa TFTPD32 : an opensource IPv6 ready TFTP server/service for windows : TFTP server )
  3. kawałek oprogramowania do podzielenia pliku binarnego - kamera ma ograniczony zasób pamięci i nie pomieści na raz największego pliku, trzeba go podzielić. można to zrobić na kilka sposobów, np : split -b 5242880 mtdblock3. Ja dzieliłem swój plik w programie TotalCommander.
  4. konwerter RS232 - USB, mój na zdjęciu to popularny FTDI. Pamiętamy, że kamera korzysta z poziomu logiki 3.3v, jeżeli podłączymy RS232 w standardzie 5v możemy spalić układ HI3518 i będzie po zabawie.
Aby odratować uwaloną kamerkę, w pierwszej kolejności musimy wykonać "backup" oprogramowania z działającej sztuki. Czyli :

Weryfikujemy gdzie leży i jak jest zorganizowana pamięć MTD

Z poziomu systemu linux :

telnet IP_Kamery
user : root
pass : admin

Bash:
cat /proc/mtd
Wynik :
Kod:
dev:    size  erasesize  name
mtd0: 00100000 00010000 "boot"
mtd1: 00200000 00010000 "kernel"
mtd2: 00300000 00010000 "system"
mtd3: 00a00000 00010000 "application"

... lub:
Bash:
dmesg | more
Wynik :
Kod:
.... (wycięte)
4 cmdlinepart partitions found on MTD device hi_sfc
Creating 4 MTD partitions on "hi_sfc":
0x000000000000-0x000000100000 : "boot"
0x000000100000-0x000000300000 : "kernel"
0x000000300000-0x000000600000 : "system"
0x000000600000-0x000001000000 : "application"

Z poziomu subsytemu Uboot via port szeregowy
Kod:
U-Boot 2010.06 (Apr 11 2014 - 11:19:40)

DRAM:  256 MiB
NAND:  Special Nand id table Version 1.35
Nand ID: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
No NAND device found!!!
0 MiB
Check spi flash controller v350... Found
Spi(cs1) ID: 0xC2 0x20 0x19 0xC2 0x20 0x19
Spi(cs1): Block:64KB Chip:32MB Name:"MX25L25635E/735E/635F"
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
32768 KiB hi_sfc at 0:0 is now current device

## Booting kernel from Legacy Image at 82000000 ...
   Image Name:   Linux-3.0.8
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2063464 Bytes = 2 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Loading Kernel Image ... OK
OK

Starting kernel ...
.....
4 cmdlinepart partitions found on MTD device hi_sfc
Creating 4 MTD partitions on "hi_sfc":
0x000000000000-0x000000100000 : "boot"
0x000000100000-0x000000300000 : "kernel"
0x000000300000-0x000000600000 : "system"
0x000000600000-0x000001000000 : "application"

Tutaj widzimy że mamy 4 partycje, z któych trzeba wykonać kopię. Robimy ją z poziomu systemu HiLinux na sprawnej kamerze :
Bash:
#montujemy system plików jako ReadOnly - unikamy potencjalnych problemów z konsystencją danych
mount -o remount,ro /
#kopia partycji
dd if=/dev/mtdblock0 of=/mnt/nfs/mtdblock0 bs=65536
dd if=/dev/mtdblock1 of=/mnt/nfs/mtdblock1 bs=65536
dd if=/dev/mtdblock2 of=/mnt/nfs/mtdblock2 bs=65536
dd if=/dev/mtdblock3 of=/mnt/nfs/mtdblock3 bs=65536
#powrót do pierwotnego stanu
mount -o remount,rw /

Gdzie lokalizacja /mnt/nfs to jakikolwiek zasób sieciowy dostępny via NFS. Obsługa NFS jest wbudowana w kamerę więc nie będzie problemu z montowaniem. Dla przykładu montujemy folder hicam z serwera QNAP_NAS:
Bash:
mkdir /mnt/nfs
mount -t nfs -o nolock QNAP_NAS:/hicam /mnt/nfs

Teraz zaczynamy zabawę z uwaloną kamerką. Nie gwarantuję że każada kamera da się podnieść w ten sposób, ale zdecydwana większość tych, które zostały zaktualizowane złym softem na pewno. Należy też mieć na uwadze, że jeżeli uwalimy coś w partycji 0, która zawiera boot-code, to możemy uwalić kamerkę na amen, więc jeżli nie ma takiej wyraźniej potrzeby to kopiowanie mtdblock0 można sobie odpuścić.

W pierwszej kolejności musimy spreparować plik mtdblock3, ponieważ jest on za duży żeby go w jednym kroku wgrać do pamięci kamerki. W tum celu można z poziomu jakiegokolowek systemu linux wykonać polecenie :
Bash:
split -b 5242880 mtdblock3

Można rówież wykonać to z poziomu programu TotalCommander, tak jak ja to zrobiłem, można poszukać innego oprogramowania które to zrobi. Najważniejsze jest to, aby plik podzileić binarnie zakładajć split po 5242880 bajtach.

W następnym kroku musimy przygotować serwer TFTP, który będzie nam serwował pliki do kamerki. Aby to zrobić, uruchamiamy na przykład program tftpd32, w opcjach wskazujemy folder domowy dla plików, po czym kopiujemy do tego folderu pliki mtdblock0 mtdblock1 mtdblock2 mtdblock3.01 mtdblock3.02

Teraz zabawa z lutownicą. Dotego musimy kamerkę rozebrać, odkręcając wieczko z szybą, 4 śrubki które trzymają kamerkę w obudowie, oraz 4 śrubki które trzymają ring IR na kołkach dystansowych.

Zdjęcie poniżej pokazuje złącze RS na płytce kamerki, w prawym dolnym rogu trzy ocynowane pola na krawędzi

20151211_145540.png

Przygotowujemy podłączenie do portu RS232 lutując 3 kabelki :
20151211_145817.png

Te na zdjęciu powyżej to
czarny - GND
biały - TX
szary - RX
podłączenie do konwertera RS232 robimy oczywiście po krzyżu : TX z kamery do RX na konwererze i to samo z drugą parą. U mnie wygląda to tak :
20151211_153239.png

Po poprawnym podłączeniu uruchamiamy dowolny program terminala, ja używam najnowszej wersji TeraTerm. Port szeregowy ustawiamy na 115200 8n1. Jeżeli źle ustawimy paramerty portu szeregowego, to zamiast poniższego zobaczymy przepiękne "krzaczki" :) Jeżeli ustawimy wszystko ok, to po włączeniu zasilania kamery powinniśmy dostać taki widok :

Bash:
U-Boot 2010.06 (Apr 11 2014 - 11:19:40)

DRAM:  256 MiB
NAND:  Special Nand id table Version 1.35
Nand ID: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
No NAND device found!!!
0 MiB
Check spi flash controller v350... Found
Spi(cs1) ID: 0xC2 0x20 0x19 0xC2 0x20 0x19
Spi(cs1): Block:64KB Chip:32MB Name:"MX25L25635E/735E/635F"
In:    serial
Out:   serial
Err:   serial

W momencie kiedy zobaczymy "Hit any key to stop autoboot: 2" naciskamy dowolny klawisz aby przerwać proces dalszego bootowania.
dostajemy prompt jak poniżej :
Kod:
herospeed #

Teraz kolej na konfigurację tftp dostępnego poprzez oprogramowanie u-boot.
serverip - adres IP serwera TFTP na którym mamy kopię plików ze sprawnej kamerki
ipaddr - tymczasowy adres IP naszej kamerki, uwaga - nie będzie można go zapingować, tak ma być.

Bash:
setenv serverip 192.168.100.20
setenv ipaddr 192.168.100.251

Przygotowanie pamięci
Bash:
sf probe 0

A poniżej cała magia - kopiujemy via tftp kilejno pliki do pamięci kamerki, później kasujemy odpowiedni blok MTD i nadpisujemy go naszymi danymi

Bash:
tftp mtdblock0
sf erase 0 0x100000
sf write 0x80008000 0 0x100000

sf erase 0x100000 0x200000
tftp mtdblock1
sf write 0x80008000 0x100000 0x200000

sf erase 0x300000 0x300000
tftp mtdblock2
sf write 0x80008000 0x300000 0x300000

sf erase 0x600000 0xa00000
tftp mtdblock3.001
sf write 0x80008000 0x600000 0x500000
ftp mtdblock3.002
sf write 0x80008000 0xb00000 0x500000

Jeżeli wszystko poszło ok. to po restarcie kamerka podnosi się. UWAGA - paramerty kamery bedą takie same jak tej, z której robiliśmy kopię MTD.

To chyba na tyle :) życzę udanej zabawy :D
 
Dzięki za instrukcje. Postępując wg opisu udało mi się uratować uwaloną kamerkę 1.3mpix. Brawo dla autora.

Jedna uwaga dla potomnych - w wierszu 16 powinno być: tftp mtdblock3.002
 
Oki spróbuję sklecić coś w wolnej chwili, jak nie film to może uzupełnię (za zgodą autora instrukcji) opis o konfigurację programów TFTP i TeraTerm.
W załączeniu pliki mtdblock0 mtdblock1 mtdblock2 mtdblock3.01 mtdblock3.02 do kamerki 1.3Mpix 3518C+IMX238
 

Załączniki

  • Wsad do Kam 1.3M 3518C+IMX238.zip
    16 MB · Wyświetleń: 97
  • Lubię to
Reakcje: kazmirz i kaktus
[QUOTE = "Urth пост: 96282, член: 1342"] Oki опитаме да монтирам нещо в свободното си време, тъй като няма видео може да се допълват (със съгласието на инструкции на автора) описание на конфигурационните програми по ППФТ и TeraTerm.
прикачени файлове mtdblock0 mtdblock1 mtdblock2 mtdblock3.01 mtdblock3.02 камери 1.3Mpix до + 3518C IMX238 [/ цитат]
здрасти
Dzięki za instrukcje. Postępując wg opisu udało mi się uratować uwaloną kamerkę 1.3mpix. :eek:klaski: dla autora.
Dzięki za instrukcje. Postępując wg opisu udało mi się uratować uwaloną kamerkę 1.3mpix. :eek:klaski: dla autora.
Oki spróbuję sklecić coś w wolnej chwili, jak nie film to może uzupełnię (za zgodą autora instrukcji) opis o konfigurację programów TFTP i TeraTerm.
W załączeniu pliki mtdblock0 mtdblock1 mtdblock2 mtdblock3.01 mtdblock3.02 do kamerki 1.3Mpix 3518C+IMX238
hi