2024. március 28., csütörtök

Gyorskeresés

DD mentés parancssorral, MTK plaformra: MT657x és MT658x

Írta: | Kulcsszavak: dd . disk dump . MTK . 657x . 658x . backup

[ ÚJ BEJEGYZÉS ]

A dd egy linux parancs, a disk dump rövidítése.
Segítségével bitről bitre lehet menteni teljes partíciókat (függetlenül a fajtájától, mint ntfs, ext2-3-4, fat16/32), vagy akár blokkeszközök részleteit is.

Jelen esetben az MTK platformra kihegyezett írás lesz.
Alakmazható MT6575, MT7677/T, MT6589/T, MT6582, MT6592 sorozatokhoz.
MT6595, 6752, 6732 esetén más módon alkalmazható!

Szükséges hozzá:
- adb kapcsolat számítógéppel, vagy terminal emulátor
- root jogosultság
- hexa számítás

Előnyei:
- nem feltétlenül szükséges hozzá számítógép
- bitről bitre ment
- relatíve gyors
- megadhatod, hogy milyen könyvtárba mentsen, milyen néven.

Hátrányai:
- picit nehézkes
- kell hozzá a root jog

A mentés:
Mivel számítógéppel egyszerűbb megcsinálni, ezért itt most ez kerül leírásra.
Válassz egy olyan módot a telefonon, ahol van abd elérés; ez lehet:
- recovery-ben
- factory mode-ban (ha be lehet lépni oda; van ugyanis olyan telefon, ahol ilyen mód nincs, pl . THL W6)
- normál módon működő telefonon az USB hibakeresés-t bekapcsolva

Kapcsold össze a számítógépet és a telefont usb kábellel.

Indíts el egy adb terminált (win esetén adb.exe shell; linuxnál ./adb shell)
Először is lekérjük a partíciókiosztást (Lenovo A820):

cat /proc/dumchar_info

Part_Name Size StartAddr Type MapTo
preloader 0x0000000000600000 0x0000000000000000 2 /dev/misc-sd
mbr 0x0000000000080000 0x0000000000000000 2 /dev/block/mmcblk0
ebr1 0x0000000000080000 0x0000000000080000 2 /dev/block/mmcblk0p1
pmt 0x0000000000400000 0x0000000000100000 2 /dev/block/mmcblk0
pro_info 0x0000000000300000 0x0000000000500000 2 /dev/block/mmcblk0
nvram 0x0000000000500000 0x0000000000800000 2 /dev/block/mmcblk0
protect_f 0x0000000000a00000 0x0000000000d00000 2 /dev/block/mmcblk0p2
protect_s 0x0000000000a00000 0x0000000001700000 2 /dev/block/mmcblk0p3
seccfg 0x0000000000020000 0x0000000002100000 2 /dev/block/mmcblk0
uboot 0x0000000000060000 0x0000000002120000 2 /dev/block/mmcblk0
bootimg 0x0000000000600000 0x0000000002180000 2 /dev/block/mmcblk0
recovery 0x0000000000600000 0x0000000002780000 2 /dev/block/mmcblk0
sec_ro 0x0000000000600000 0x0000000002d80000 2 /dev/block/mmcblk0p4
misc 0x0000000000080000 0x0000000003380000 2 /dev/block/mmcblk0
logo 0x0000000000300000 0x0000000003400000 2 /dev/block/mmcblk0
ebr2 0x0000000000080000 0x0000000003700000 2 /dev/block/mmcblk0
expdb 0x0000000000a00000 0x0000000003780000 2 /dev/block/mmcblk0
android 0x0000000025800000 0x0000000004180000 2 /dev/block/mmcblk0p5
cache 0x0000000008000000 0x0000000029980000 2 /dev/block/mmcblk0p6
usrdata 0x000000002a800000 0x0000000031980000 2 /dev/block/mmcblk0p7
fat 0x000000008b5a0000 0x000000005c180000 2 /dev/block/mmcblk0p8
bmtpool 0x0000000001500000 0x00000000ff9f00a8 2 /dev/block/mmcblk0
Part_Name:Partition name you should open;
Size:size of partition
StartAddr:Start Address of partition;
Type:Type of partition(MTD=1,EMMC=2)
MapTo:actual device you operate

Ez a kimenet lesz az alap.

Lehet látni, hogy ez megadja az, hogy az adott partíció (és/vagy a blokkeszköz egyes részei) hol helyezkednek el.
Sajnos a /dev/misc-sd részeket nem lehet a blokkeszközről levenni, ezek pedig jellemzően a
preloader
sdp_bl
(utóbbi az MT6589 esetén nem jellemző, inkább az MT657x sorozatnál fordul elő)
Ezek mentése így lehetséges (if: input file; of: output file):
su -
dd if=/dev/preloader of=/sdcard/dd-backup/preloader
dd if=/dev/dsp_bl of=/sdcard/dd-backup/dsp_bl

Itt van egy kis bökkenő, amit még nem sikerül kideríteni (ha esetleg valaki tud ebben segíteni, azt megköszönném!):
Látható, hogy a preloader hossza a dumchar_info szerint itt 6MB (6144kB), viszont a fenti módon dd-vel készült mentés csak 2MB, a flashtool-readback-kel mentett pedig valóban 6MB (és megint itt egy csavar, mégpedig az, hogy a tényleges tartalom egyik esetben sem éri el a 200kb-ot. Olyan 120kb utáni tartalom csak 00-kat tartalmaz hex editorban megnézve. A normálisan flash-elhető változtatok pedig nem egészen úgy néznek ki, mint a dd-s vagy flashtool-readback-es mentések, viszont működnek... ??? A dd-vel és flashtool-readback-kel készült preloade-t pedig nem tudtam visszaflashelni. ... ??? )

A további, blokkeszközön lévő állományokat az alábbi módon menthetjük.
dd if=/dev/block/mmcblk0 of=/<mentés helye>/<mentés neve>.img bs=<bit step> count=<hossz> skip=<kezdő cím>
ebből pedig a <mentés neve ésszerűen> legyen az az elnevezés
a bs, bit step az a következő adatokhoz tartozó “osztószám” lesz (gyakorlatilag ekkora méretű blokkokat fog másolni egyszerre). Érdemes ezt most az érthetőség kedvéért 1024-re állítani (1k).

A dumchar_info-ban lévő adatok jól mutatják, hogy pl. az EBR1 szakasz kezdeti címe 0x0000000000080000, hossza pedig 0x0000000000080000
Ebből az alábbiak szerint lesz nekünk kezelhető eredmény:
hex(80000) -> dec 524288 --> dec 524288/1024 --> 512
Ez miatt pedig a mentés az EBR1-re így fog kinézni:
dd if=/dev/block/mmcblk0 of=/storage/sdcard0/dd-backup/ebr1.img bs=1024 count=512 skip=512

Másik példa, a recovery legyen:
Part_Name Size StartAddr
recovery 0x0000000000600000 0x0000000002780000
Név Hossz Kezdő cím
dd if=/dev/block/mmcblk0 of=/storage/sdcard0/dd-backup/recovery.img bs=1024 count=6144 skip=40448

A visszaállítás:
itt a mentéskori skip érték kerül a seek helyére (hiszen a méret adott, csak a kezdőcímet kell megadni, és onnan kezdi visszarakni az imidzset.
dd if=/storage/sdcard0/dd-backup/recovery.img of=/dev/block/mmcblk0 bs=1024 seek=40448

Segédlet: a számoló táblázat.
[link]

Olvasnivaló: dd parancs

Hozzászólások

(#1) badbull1


badbull1
csendes tag

Üdv!

Ilyen mélységben mozgolódnék én is ill. most tanulgatom.
Ha a preloaderről meg tudsz valami újabbat funkciót ill. működést tekintve akkor az érdekelne.
Annyit amit olvasgattam e tekintetben hogy óvatosan!!! bánj vele.
Számomra kissé bátor vagy hogy funkció ismeret teljes ismerete nélkül próbálod dd ből visszatolni ... akár brick is lehet a vége.

(#2) cappa72 válasza badbull1 (#1) üzenetére


cappa72
nagyúr

Hát bizony szoktam bátor lenni. :K
Preloader-t még nem tettem vissza dd-vel, nvram-ot már igen.
Persze ami késik, az nem múlik, legfeljebb elmarad ;).

Selenia 5w-40 motorolaj eladó! Na meg 4db Ford Kuga TPMS szenzor, 12k-ért

(#3) badbull1 válasza cappa72 (#2) üzenetére


badbull1
csendes tag

Látható, hogy a preloader hossza a dumchar_info szerint itt 6MB (6144kB), viszont a fenti módon dd-vel készült mentés csak 2MB, a flashtool-readback-kel mentett pedig valóban 6MB ...

a flashtool-readback -et hogy csináltad ?
akku nélkül raktad pc -re ?

Ha jók a sejtéseim akkor ...
a dd-s preloadot ne i s erőltesd visszatenni ill. ha nem akku nélkül "off" ill. "client" módban olvastad vissza a preloadot akkor azzal se próbálkozz
ha megnézed eleve el van tolva a preloaddal a scatterban a partíció címzés
ha phone on -ban, dd vel próbáltad leszedni a preload méretű tartományt akkor nem azt szetted le hanem valsz. az mbr -el kezdődő valamid lett
a két címzés használata a telefon bootmódjától függ
ha a telód "kliens módban" bootol az emmc ben levő vezérlő csak akkor alkalmazza a valós címzést
egyéb esetben a címzés logikai és az mbr elejátől -től kezdődik

még egyszer : Ha a sejtésem jók ... de még utána kell olvasnom/kérdeznem nekem is részletesebben
de leírom hátha megmentelek egy téglától ... ;)

[ Szerkesztve ]

(#4) cappa72 válasza badbull1 (#3) üzenetére


cappa72
nagyúr

a flashtool-readback -et hogy csináltad ?
Leírás lapján

akku nélkül raktad pc -re ?
Igen.
Ugyanakkor meg kell jegyeznem, hogy fogom frissíteni az említerr readback leírást, mert a nagyobb méretű partíciókat akku nélkül nem akarja végigvinni. Jellemzően a data az, aminél akku nélkül elhasal a flashtool.

Persze még preloader-t nem raktam vissza dd-vel, mert nem volt rá szükség.

Azt temészetesen tudom, hogy a dumchar és a scatter kapcsolata pont a preloader+sdp_bl összértékével eltolódott adatokat tartalmaznak (rájöttem, eleinte csak néztem, hogy miért, de összevetettem őket, és megvilágosodtam.)

Selenia 5w-40 motorolaj eladó! Na meg 4db Ford Kuga TPMS szenzor, 12k-ért

(#5) cappa72 válasza badbull1 (#3) üzenetére


cappa72
nagyúr

Egy telefonnál sikerült a preloader és dsp_bl-t megfelelő módon megbütykölni.
Viszont majd azt még meg fogom tenni, hogy a mostanit újra lementem róla, hogy van-e változás, hiszen az elejét is megvágtam szegény preloadernek.

[ Szerkesztve ]

Selenia 5w-40 motorolaj eladó! Na meg 4db Ford Kuga TPMS szenzor, 12k-ért

(#6) tvamos


tvamos
nagyúr

Nem akar sikerulni feltelepiteni az ADB-t... :(

"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János

(#7) tvamos válasza tvamos (#6) üzenetére


tvamos
nagyúr

Bocsanat! Teves riasztas volt... (Rossz csomagot toltottem le, vagy mi.)

[ Szerkesztve ]

"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János

(#8) tvamos


tvamos
nagyúr

Esetleg abban tudnatok segiteni, miert mondja nekem ezt:
root@S650:/ # su -
root@S650:/ # dd if=/dev/preloader of=/sdcard/dd-backup/preloader
/sdcard/dd-backup/preloader: cannot open for write: No such file or directory
1|root@S650:/ # dd if=/dev/dsp_bl of=/sdcard/dd-backup/dsp_bl
/dev/dsp_bl: cannot open for read: No such file or directory

"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János

(#9) cappa72 válasza tvamos (#8) üzenetére


cappa72
nagyúr

Lehet, hogy nincs létrehozva az /sdcar/dd-backup könyvtár.
Először hozd létre:
mkdir /sdcard/dd-backup

A dsp_bl szerepel a /proc/dumchar_info fájlban?

Selenia 5w-40 motorolaj eladó! Na meg 4db Ford Kuga TPMS szenzor, 12k-ért

(#10) tvamos válasza cappa72 (#9) üzenetére


tvamos
nagyúr

Koszi! Valamelyest javutlt a helyzet:
root@S650:/ # dd if=/dev/preloader of=/sdcard/dd-backup/preloader
4096+0 records in
4096+0 records out
2097152 bytes transferred in 1.739 secs (1205952 bytes/sec)
root@S650:/ # dd if=/dev/dsp_bl of=/sdcard/dd-backup/dsp_bl
/dev/dsp_bl: cannot open for read: No such file or directory
Ez mit jelent?

"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.