Как сделать дамп памяти samsung
Многие начинающие ромоделы Android или гики не знают как снять образ с Android. В данной статье подробно рассказано как узнать нужные вам /dev/block, как снять дампы с них, разобрать их или в последствие восстановиться.
Необходимо для снятия образа
- Скачайте и установите на ПК фирменную программу сайта ADB RUN (если в курсе, что такое adb или установлено Android SDK, то устанавливать не нужно);
- Android смартфон или планшет должен быть c Root правами Подробно о Root Android:
- Активировать Отладка по USB; если вдруг не установлены;
- USB кабель.
Инструкция как снять образ с Android
- Подключите устройство Android к ПК
- Запустите программу ADB RUN и перейдите в меню (a) Adb
Узнаем /dev/block разделов
Вариант 1
Данный способ самый простой, но к сожалению узнать, где находиться ядро не возможно.
Для того чтобы узнать /dev/block/ вводим команду:
adb shell mount
Получаем список, где видим список с нашими разделами и к каким /dev/block/ они примонтированы
Вариант 2
Подключаем Android к компьютеру в adb вводим:
Получаем весь список блоков.
Снятие образа Android с выбранного раздела
И так когда мы уже знаем где находятся какие разделы, можно приступать к снятию образа Android (дампа) с выбранного раздела. Перед тем как начать убедитесь что у вас достаточно много свободной памяти на карте памяти!
- Для того чтобы снять образ необходимо в ADB RUN зайти в меню (7) Manual Command > (1) Adb
- Залогиниться в терминале под Root -ом:
3. Набрать linux команду для снятия дампа:
dd if=/dev/block/XXXXX of=/sdcard/NAME_razdel.img
Процедура снятия может занять определенное время, от 1 минуты до 15, в это время лучше не дергать ваш Android!
[Обновление]
В новых версиях ADB RUN появилась возможность быстро снять образ каждый раз не набирая столь длинные команды. Все что вам нужно это знать имя блока.
Когда вы уже знаете необходимый блок, перейдите в ADB RUN:
- С главного меню в раздел Backup -> Backup dev/block
- Выбираем Backup
- Указываем последние данные с блока (данные после block/)
- Ждем пока снимется образ (не трогать Android)
Восстановление раздела из созданного образа Android (дампа раздела)
Когда вам будет необходимо выполнить восстановление из ранее созданного образа, нужно сделать вот, что:
Прописать следующую команду:
dd if=/sdcard/NAME_razdel.img of=/dev/block/XXXX
Процедура восстановления может занять определенное время, от 1 минуты до 30 в это время лучше не дергать ваш Android!
[Обновление]
Особенно актуально для тех кто не удачно выполнил S-OFF (или планирует выполнить) или неудачно прошил кастомную прошивку, либо после не удачных экспериментов!
Для устройств Sony, HTC, Xiaomi и других устройств на которых есть режим Fastboot могут выполнить восстановление следующим образом после ранее обязательного снятия boot.img (zImage) и system.img (factoryfs.img) скопируйте данные образы на ПК:
- Переведите Android в режим fastboot (bootloader) и подключить к ПК;
- Файлы boot.img и system.img переместить в папку C:/adb_run/bin;
- Запустить ADB RUN и перейти в пункт (a) ADB;
- Набрать следующие команды (подробно о Fastboot):
fastboot flash boot boot.img
fastboot flash system system.img
Система будет восстановлена в исходное состояние! Можете продолжать эксперименты!
На этом все! Подписывайтесь и Оставайтесь с сайтом Android +1! Удачи!
Как снять дамп разделов system, kernel, data, zImage на Андроид. Многие начинающие ромоделы Android или гики не знают как снять образ с Android. В данной статье подробно рассказано как узнать нужные вам /dev/block , как снять дампы с них, разобрать их или в последствие восстановиться.
Для тех кто не много не понял о чем речь. В данной статье будет подробно рассказано как снять текущее состояние с разделов Android — system, data, efs, preload, cache или выдрать ядро (zImage / boot.img). С какой целью расписываться здесь не будет , так как это уже другая история.
Необходимо для снятия образа
1. Скачайте и установите на ПК фирменную программу сайта ADB RUN (если в курсе, что такое adb или установлено Android SDK, то устанавливать не нужно)
2. Android смартфон или планшет должен быть c Root правами
Подробно о Root Android:
4. Установить драйвера если вдруг не установлены
5. MicroUSB кабель
Инструкция как снять образ с Андроид
1. Подключите устройство Android к ПК
2. Запустите программу ADB RUN и перейдите в меню (7) Manual Command > (1) Adb
Узнаем /dev/block разделов
Что такое /dev/block/? /dev/block/ — это «диски» на которых находятся разделы system, data, cache
Вариант 1
Данный способ самый простой, но к сожалению узнать где находиться ядро не возможно.
Для того чтобы узнать /dev/block/ вводим команду
Получаем список где видим список с нашими разделами и к каким /dev/block/ они примонтированы
Вариант 2
Данный способ более сложный, но за то вы точно будете знать абсолютно все ваши разделы!
Вначале лучше воспользоваться файловым менеджером Android с Root доступом например как:
После того как установили перейдите по пути
Далее вам нужно найти папку by-name, она находиться в одной из под папок в platform
Например для некоторых устройств Samsung это выглядит так:
Для устройств на Tegra 3:
Для устройств на Omap:
Для некоторых Mediatek:
Для некоторых устройств Sony:
После того как выяснили где находиться папка by-name в программу ADB RUN набираем команду
где xxxxxxxx - точный путь до папки by-name
[Обновление]
В новых версиях программы ADB RUN (с версии 3.4x.xx) узнать все разделы стало гораздо проще! Все что вам необходимо это:
- запустить ADB RUN
- Перейти в раздел Memory and Partitions -> Partitions /dev/block/
- Попробовать один из методов узнать ваши блоки
Снятие образа Android с выбранного раздела
И так когда мы уже знаем где находятся какие разделы, можно приступать к снятию образа Android (дампа) с выбранного раздела. Перед тем как начать убедитесь что у вас достаточно много свободной памяти на карте памяти!
1. Для того чтобы снять образ необходимо в ADB RUN зайти в меню (7) Manual Command > (1) Adb
2. Залогиниться в терминале под Root -ом
3. Набрать команду для снятия дампа
где XXXXXXXXX - раздел с которого вы снимаете
где NAME_razdel.img — имя которое вы присвоите при снятие образа с выборного раздела (давать имена лучше также как они указаны, если data то data)
Процедура снятия может занять определенное время, от 1 минуты до 15, в это время лучше не дергать ваш Android!
[Обновление]
В новых версиях ADB RUN появилась возможность быстро снять образ каждый раз не набирая столь длинные команды. Все что вам нужно это знать имя блока.
Когда вы уже знаете необходимый блок перейдите в ADB RUN:
Восстановление раздела из созданного образа Android (дампа раздела)
Когда вам будет необходимо выполнить восстановление из ранее созданного образа, нужно сделать вот, что:
Убедитесь что образ все еще находиться в разделе /sdcard — так как бекап создавался именно в этот раздел, либо переместите его обратно.
Прописать следующую команду:
где XXXXXXXXX - раздел на которой вы заливаете образ
где NAME_razdel.img — имя образа выборного раздела (давать имена лучше также как они указаны, если data то data)
Процедура восстановления может занять определенное время, от 1 минуты до 15, в это время лучше не дергать ваш Android!
[Обновление]
Особенно актуально для тех кто не удачно выполнил S-OFF (или планирует выполнить) или неудачно прошил кастомную прошивку, либо после не удачных экспериментов!Для устройств Sony, HTC, Xiaomi и других устройств на которых есть режим Fastboot
могут выполнить восстановление следующим образом после ранее обязательного снятия boot.img (zImage) и system.img (factoryfs.img) обязательно скопируйте данные файлы на ПК:
1. Переведите Android в режим fastboot (bootloader) и подключить к ПК
2. Файлы boot.img и system.img переместить в папку C:/adb/progbin
3. Запустить ADB RUN и перейти в пункт Manual -> ADB
4. Набрать следующие команды (подробно о Fastboot)
Система будет восстановлена в исходное состояние! Можете продолжать эксперименты!
Итак, что же там «течет»? Давайте разберемся.
Простой пример
С помощью OQL запускаем простой запрос, который выводит все инстансы класса Activity:
В памяти висит 7 инстансов Activity. Это в 7 раз больше, чем нужно. Давайте разберемся, почему сборщик мусора не смог удалить отработавшие объекты из памяти. Откроем кратчайший граф ссылок на один из Activity:
На скриншоте видно, что на Activity ссылается this$0. Это неявная ссылка из анонимного класса на внешний класс. В Java любой анонимный класс всегда имеет неявную ссылку на внешний класс, даже если вы никогда не обращаетесь к внешним полям или методам. Java не идеальна, а жизнь — это боль. Такие дела, котаны.
Решение с использованием статического класса
Давайте попробуем решить нашу проблему, избавившись от ссылки this$0. Для этого переделаем анонимный класс в статический:
Запускаем, пару раз поворачиваем телефон и собираем дамп памяти.
Снова больше одной Activity? Давайте посмотрим, почему сборщик мусора не смог их удалить.
Обратите внимание на самый низ графа ссылок: Activity сохранен в ссылке mContext из mTextView внутри класса DoneRunnable. Очевидно, что использование статического класса самого по себе недостаточно, чтобы избежать утечки памяти. Нам нужно сделать кое-что еще.
Решение с использованием статического класса и WeakReference
Продолжим последовательный метод избавления от ссылки на TextView, которую мы нашли в ходе изучения дампов памяти.
Обратите внимание, что мы сохраняем ссылку на TextView в WeakReference. Использование WeakReference требует особой аккуратности: такая ссылка в любой момент может обнулиться. Поэтому сначала сохраняем ссылку в локальную переменную и работаем только с последней, проверив ее на null.
Запускаем, поворачиваем и собираем дамп памяти.
Мы добились желаемого! Только один Activity в памяти. Проблема решена.
Для использования данного подхода нам необходимо:
- использовать статический внутренний или внешний класс;
- использовать WeakReference для всех объектов, на которые мы ссылаемся.
Хорошо, что есть решения получше.
Запустим, повернем и снимем дамп памяти.
Прекрасно! Только один класс Activity.
Этот метод намного лучше предыдущего: количество сопутствующего кода минимально, риски допустить ошибку намного ниже. Одна беда — не забыть бы вызвать очистку в методах onDestroy или там, где вам нужно почистить память.
У нас в запасе есть еще один метод, который, возможно, понравится вам намного больше.
Решение с использованием WeakHandler
Команда Badoo написала свой Handler — WeakHandler. Это класс, который ведет себя совершенно как Handler, но исключает утечки памяти.
Он использует мягкие и жесткие ссылки для избежания утечек памяти. Принцип его работы мы опишем немного позже, а пока давайте взглянем на код:
Очень похоже на оригинальный код, не так ли? Лишь одна маленькая деталь: вместо использования android.os.Handler мы использовали WeakHandler. Давайте запустим, повернем телефон несколько раз и снимем дамп памяти.
Наконец-то! Код чист как слеза и память не течет.
Если вам понравился этот метод, то вот хорошая новость: использовать WeakHandler очень просто.
Добавьте maven-зависимость в ваш проект:
Импортируйте WeakHandler в вашем коде:
Принцип работы WeakHandler
Для простоты объяснения мы покажем простенькую диаграмму, демонстрирующую разницу между помещением анонимного Runnable в простой Handler и в WeakHandler:
Выводы
Использование postDelayed в Android не так просто, как кажется: нужно совершать дополнительные действия, чтобы память не текла. Для этого можно применять следующие методы:
Заранее подготовить папки в корне диска ( раздела ) на ПК.
В именах папок и пути к ним не должно быть ничего кроме латиницы, цифр и нижнего дефиса.
В данном случае, как пример, взят смартфон Lenovo S1L ( Mediatek MT6753 ).
По аналогии ниже описанных действий Вам нужно брать данные со скаттер-файла своего смартфона ( прошивки ) и так же на своём гаджете использовать Terminal Emulator for Android для вычисления размера полного дампа.
Для исполнения данной команды в этом эмуляторе терминала рут-права не требуются.
Размер полного дампа на устройстве с процессором МТК вычисляется так ( открыть спойлер ).
Запустить приложение Terminal Emulator for Android на Вашем гаджете.
Ввести команду cat /proc/partitions
Вводить команду нужно точно так же, как она написана здесь строчкой выше - с одним пробелом после cat и далее с теми же слешами без пропусков и лишних символов.
Приложение отобразит все разделы с памяти устройства количеством блоков в разделе ( один блок = 1024 Байта ).
В строчке mmcblk0 отображена вся память целиком.
Значение со строчки mmcblk0 умножаем на 1024 и получаем размер полного дампа в Байтах.
Переводим полученное значение размера из Dec в Hex и получаем нужное значение для ввода в поле "Length" окна Flash Tool.
На смартфоне Lenovo S1L значение строчки mmcblk0 показало равным 15267840.
15267840 х 1024 = 15634268160 (Dec) = 0x3A3E00000 (Hex).
Для вычислений и перевода из Dec в Hex вполне подойдёт калькулятор с Windows на ПК.
В открытом калькуляторе на вкладке "Вид" выбрать "Программист" - калькулятор переключится в программный вид и автоматом будет выбран режим Dec ( десятичные ).
В этом режиме производим умножение.
Далее при полученном результате выбираем Hex ( шестнадцатиричные ).
Калькулятор переведёт значение из Dec в Hex.
Вот это значение (Hex) и есть нужный Вам тот размер полного дампа с Вашего гаджета, который Вы будете указывать в дальнейшем в окне Flash Tool.
На ПК запустить SP Flash Tool ( SP_Flash_Tool_exe_Windows_v5.1548.00.000 или более поздняя версия ).
1. В папке с программой Flash Tool правым кликом по значку flash tool вызвать контекстное меню.
2. Запустить Flash Tool левым кликом по "Запуск от имени администратора". Если Вы на ПК под учётной записью администратора, то можно и просто двойным кликом по значку flash tool запустить программу.
3. При запуске Flash Tool в первый раз вам выдаст оповещение об отсутствии агента и скаттер-файла в программе. Просто нажмите на "ОК" и откроется стартовое окно программы Flash Tool.
4. Нажать на кнопку "Download Agent".
5. Выбрать папку с программой Flash Tool.
6. В папке выбрать файл "DA_SWSEC.bin".
7. Нажать на кнопку "Открыть".
8. Нажать кнопку "Scatter-loading".
9. Выбрать папку, где находится скаттер-файл с той прошивки, на которой у Вас в данный момент Ваш гаджет.
10. В папке выбрать сам scatter-файл ( выглядит как "MT6753_Android_scatter" с номером Вашего процессора МТК ). Можно выбрать либо из папки с заводской прошивкой для своего аппарата под SP Flash Tool, либо как отдельно сохранённый скаттер-файл. В моём примере скаттер-файл отдельно сохранён в заранее подготовленной папке без всех остальных файлов для установки прошивки с ПК.
11. Нажать на кнопку "Открыть".
12. В окне Flash Tool появится список разделов ( с полными путями к файлам или нет - не имеет значения ). Перейти на вкладку "Readback".
13. На вкладке Readback нажать кнопку Add.В списке ниже появится новая строчка.
14. Сделать двойной клик мыши по строчке. Программа предложит выбрать путь и ввести имя файла для сохранения.
15. Указать на компьютере папку где резервная копия полного дампа будет хранится до момента потребности в ней.
16. Задать имя, при этом обязательно оставляем начальные ROM_ в имени и используем только латиницу, цифры и нижний дефис. Дабы в будущем не ломать голову, вспоминая нужные данные старт адреса и длины, я их прописываю в имени через нижний дефис ( пробел, кириллица или иные знаки в имени не допустимы ).
17. Нажать на кнопку "Сохранить".
18. Следом появится окно Readback block start address. Убедиться, что стоит пункт "Hex".
19. В пункте Region выбрать: EMMC_USER (MT6592 и выше).
В строке Start Address ввести нулевое значение 0x0.
В строке Length ввести Вами ранее вычисленное значение размера полного дампа и преведённого в Hex ( в моём примере это значение 0x3A3E00000 ).
20. Нажать на кнопку "ОК".
21. Проверить и удостовериться, что введены правильные значения во всех столбцах.
22. Нажать на кнопку "Read Back".
Далее после нажатия на "Read Back" аккуратно, одним разом без перетыканий подсоединяем выключенный гаджет к ПК по USB и тут же оставляем гаджет без перекладываний, переворачиваний и тому подобных физических воздействий как на него, так и на ПК.
Процесс сливания дампа начнётся сразу же после подсоединения гаджета по USB.
И лучше на время процесса сливания дампа с гаджета отлучитесь от ПК ( попейте чайку минут 20 - 25 ).
На гаджетах с не съёмными аккумуляторами может присутствовать кнопка "reset", как например на смартфоне Lenovo P780.
Такая кнопка служит аналогом вытаскивания-вставки аккумулятора.
В этом случае нажмите эту кнопку на пару секунд и отпустите её перед подсоединением к ПК.
Дальнейшие действия с 23-го по 29-е будут производиться без Вашего участия :
23. Сразу после подсоединения выключенного гаджета по USB к ПК и успешного срабатывания драйверов в Диспетчере устройств на ПК должен определиться подсоединённый выключенный гаджет, как MediaTek Preloader USB VCOM (Android) (COMx) ( в моём случае как COM4 ) и так же отразиться в нижнем ряду окна Flash Tool.
24. Пробежит красная полоса "Download DA 100%".
25. В окне Flash Tool слева внизу под картинкой отобразится информация по чипу с Вашего гаджета.
26. В нижнем ряду окна Flash Tool (слева направо) начнётся отсчёт размера слитого дампа в Мб и далее после 1000 Мб в Гб, скорость сливания в Мб/сек, текущее время, объём уже слитого дампа в процентах и постепенное заполнение шкалы синим цветом.
27. По окончании сливания дампа шкала будет заполнена синим цветом полностью, там же на шкале надпись достигнет "Read back 100%".
28. Появится небольшое окошко "Read back Ok".
29. Flash Tool автоматически программно отключит подсоединённый гаджет, в Диспетчере устройств на ПК исчезнет строчка "MediaTek Preloader USB VCOM (Android) (COMx)".
30. Теперь можно закрыть программу Flash Tool и отсоединить гаджет от ПК. Дабы посмотреть что у Вас получилось - откройте папку со слитым дампом, правый клик на файле, вкладка "Свойства". Там в скобках отображён реальный размер слитого дампа.
Советую сразу же создать проверочный файл хеш-сумм MD5 для того, чтобы в будущем Вы смогли убедиться в целостности слитого дампа, заново создав файл хеш-сумм MD5 и сравнив его с прежним. Для создания файла хеш-сумм MD5 я использую на ПК утилиту FileMenu Tools - посмотреть инструкцию по созданию файла хеш-сумм и скачать утилиту можно по ссылке здесь (спойлер 2 и 4 )
Внимание ! На новых процессорах МТК от MT67xx и позже ( а смартфон S1L как раз на процессоре MT6753 ) для последующего успешного восстановления со слитого полного дампа необходимо отдельно переписывать разделы tee1 и tee2 на устройство либо отдельно слитым дампом с этих разделов, либо в программе Flash Tool в режиме "Download Only" ( при наличии пакета прошивки для установки с ПК ).
После записи одного только слитого полного дампа на устройство на процессорах МТ67хх, оно у Вас не включится.
Мы рассмотрим здесь вариант, когда допустим, что нет у нас пакета прошивки для установки с ПК на наше устройство.
Следовательно нам необходимо слить кусок дампа с разделов tee1 и tee2.
А для этого нам нужны Start Address и Length.
Следовать нижеописанному ( открыть спойлер ).
И так же по аналогии всех действий сливания полного дампа, следом, отсоединив выключенный смартфон от ПК после сливания полного дампа, приступаем к сливанию куска дампа с разделов tee1 и tee2 суммарно, начиная вводить полученные значения Start Addres и Length на шаге 16 и далее ( выше по скриншотам ).
Запустить тот же Terminal Emulator for Android на Вашем гаджете.
Ввести команду cat /proc/emmc
Вводить команду нужно точно так же, как она написана здесь строчкой выше - с одним пробелом после cat и далее с теми же слешами без пропусков и лишних символов.
Приложение отобразит все разделы с памяти устройства в секторах, как стартовый адрес каждого раздела ( Start Addres ), так и размер занятого пространства в каждом разделе ( nr_sects ).
Чтобы узнать реальные значения в (Hex) необходимо выведенные на экран значения умножать на 200 в том же (Hex).
Итак, нам нужны данные старт адреса и длины обоих разделов tee1 и tee2 в одном куске дампа.
Старт адрес - понятно, тут мы берём данные с экрана со столбика Start Address и строки tee1 - это 00030000 = 0x30000.
Умножаем ( в Hex) 0x30000 на 200 и получаем значение 0x6000000.
Sart Address : 0x6000000
Далее, чтобы наш кусок дампа включал в себя полностью два раздела tee1 и tee2, мы должны взять за окончание дампа стартовый адрес с последующего за разделом tee2 раздела fpr, то есть 00035000 = 0x35000.
Так же (в Hex) умножаем 0x35000 на 200 и получаем значение 0x6A00000.
Теперь вычитаем разницу между началом и концом куска дампа :
0x6A00000 - 0x6000000 = 0xA00000
Вот эта разница и есть длина дампа разделов tee1 и tee2.
Length : 0xA00000
Итого.
Sart Address : 0x6000000
Length : 0xA00000
Для просмотра скаттер-файла рекомендуется Notepad++ . В качестве зеркала версия: Notepad++ 6.6.9
Ну, и в заключение, здесь под спойлером видеоролик всего, что описано выше ( сливание полного дампа и куска дампа tee1+tee2, а так же создание и сохранение контрольных файлов хеш-сумм слитых дампов ).
Для нормальной видимости всего шрифта в видеоролике выберите в просмотре качество 720р.
Ниже видеоролик записи слитого дампа обратно на смартфон ( восстановление с состояния полного окирпичивания )
Читайте также: