preloader что это андроид
Android, из чего состоит прошивка ROM 
Сегодня я постараюсь объяснить, что такое прошивка популярным языком, рассчитанным на неискушенного пользователя.
Для начала давайте определимся с происхождением самого этого термина.
Итак, что такое прошивка, в изначальном понимании этого термина. Давным давно, когда вычислительные устройства были большими и некоторые их экземпляры занимали целые комнаты, их встроенная (постоянная) память изготавливалась весьма оригинальным образом.
Каждая ее ячейка состояла из небольшого кольца, выполненного из специального материала – феррита, который легко намагничивается. И в каждое кольцо продевалось две петельки провода, предназначенные для записи (намагничивания), стирания (размагничивания) и считывания информации из этого кольца. А информации в нем хранилось всего лишь один бит: 0 – когда кольцо размагничено и 1, когда намагничено. Знаете, сколько таких колец нужно, чтобы обеспечить устройству 1 гигабайт встроенной памяти? Я вам скажу: всего лишь 8 589 934 592 штуки.
И вот процесс продевания проводов в эти кольца при изготовлении постоянной памяти для старых устройств так и назывался – прошивка.
А теперь вернемся к нашим планшетам и смартфонам. Они, как и любой современный компьютер работают под управлением операционной системы (Windows, Linux, iOS, Android и т.п), которая полностью отвечает за их работу. Иными словами, если внутреннее железо компьютера – это его мозг, то операционная система – это его сознание, которое управляет компьютером.
Без операционной системы любой компьютер, планшет или смартфон – набор мертвого железа. И если на компьютер, операционную систему мы устанавливаем, записывая ее на его жесткий диск, то в планшете или смартфоне операционная система хранится в его внутренней памяти, занимая часть тех 4, 8, 16, 32 или даже 64 гигабайт, которые имеют современные устройства.
Вы наверное уже догадались, что именно эта процедура «установки» операционной системы на планшет или смартфон и называется прошивкой, поскольку система записывается (прошивается) в его постоянную, внутреннюю память.
Теперь вы понимаете, что выражение «сменить пошивку» на планшете или телефоне означает примерно то же самое, что «переустановить Виндовс» на компьютере.
Кроме того, и сам файл с операционной системой, которая записывается на устройство называют прошивкой. Так как начинка или «мозги» у каждого планшета или телефона разные, прошивка создается для каждого устройства отдельно. Прошивки бывают двух типов:
1. Официальные, выпущенные производителем устройства, которые или автоматически загружаются на планшет или телефон через интернет подключение (так называемые прошивки по «воздуху»). Их также чаще всего можно скачать на планшет с сайта производителя и установить вручную. Этот тип прошивок еще часто называют обновлением системы.
2. Самодельные прошивки, их еще называют «кастомные» или «альтернативные». Обычно это улучшенные или доработанные независимыми разработчиками официальные прошивки. К ним также относятся прошивки основанные на официальных версиях «чистой» операционной системы Android от компании Google, такие как CyanogenMod или MIUI.
Копаем глубже. Как работают механизмы прошивки, рутинга и восстановления Android
Содержание статьи
Тот, кто когда-либо прошивал свой смартфон или хотя бы разблокировал загрузчик, наверняка имел дело если не с инструментами командной строки, то хотя бы со специальными графическими приложениями для Windows, которые делают всю магию. Но как на самом деле происходит разблокировка загрузчика, установка новой прошивки или сброс до заводских настроек? Что скрыто, так сказать, под капотом?
Aboot, fastboot и tamper-бит
Если не брать в расчет небольшой код инициализации, располагающийся в ROM-памяти устройства и специфичный для каждого чипа, то загрузка Android начинается с aboot. Это стандартный загрузчик устройств на базе Android, разработкой которого занимается сама Google. Задача aboot — выполнить первичную инициализацию железа и передать управление либо коду, расположенному в разделе boot (это ядро Linux), либо, если юзер включил смартфон с зажатой клавишей увеличения (или уменьшения, где как) громкости, в recovery.
Ключевая особенность aboot в том, что это модульный загрузчик и к нему при сборке можно подключать разные сопрограммы, каждая из которых будет исполняться в отдельном потоке (что делает aboot миниатюрной ОС). Одна из таких сопрограмм — fastboot, реализация протокола и механизмов для записи разделов внутренней NAND-памяти. В среде энтузиастов fastboot обычно используется для установки кастомного recovery. Для этого достаточно включить смартфон с зажатыми клавишами управления громкостью (на большинстве смартфонов), затем с их же помощью выбрать в меню пункт Fastboot, подключить смартфон с помощью USB-кабеля к компу и выполнить такую команду (она входит в комплект Android SDK):
Причем recovery можно даже не прошивать, а запустить прямо с компа (эту функцию, кстати, использует инструмент CF-Auto-Root, но о нем позже):
Справка по командам fastboot
Xakep #200. Тайная жизнь Windows 10
Однако эти команды не сработают, если загрузчик залочен. Чтобы его разблокировать, на смартфонах линейки Nexus и OnePlus достаточно выполнить такую команду (все, что начинается с oem, — это команды, встроенные производителем смартфона):
Что делает эта команда? В нексусах она выполняет сброс до заводских настроек и записывает один бит в специальный раздел в памяти устройства, служащий индикатором разлочки для самого загрузчика. В Nexus 4 и 5 это раздел misc и адрес 16400, в других нексусах это может быть раздел param (Nexus 10) или даже aboot (Nexus 7/2013 и OnePlus One). Начиная с Nexus 6 и 9, Google навела в этом бардаке порядок и ввела понятие Persistent-раздела для хранения не зависящих от Android настроек. Имя этого раздела хранится в системной переменной ro.frp.pst, и его в любой момент можно получить с помощью такой команды (запускать на самом устройстве):
Как видно, все довольно просто, и, если говорить о нексусах, здесь «залоченный загрузчик» — это просто защита от дурака (собственно, как и должно быть в референсных смартфонах). Загрузчики в обычных смартфонах разработки Samsung, HTC, LG, Motorola и других серьезных контор защищены гораздо лучше, и с помощью команды oem unlock или записи бита по определенному адресу их не вскроешь. Сам бит записывается в недоступную пользователю память, а разблокировка возможна только с помощью цифрового ключа, полученного на сайте производителя (ну или взлома загрузчика, если это возможно).
И в нексусах, и в смартфонах других компаний при разблокировке загрузчика всегда устанавливается так называемый tamper-бит. Сервисные центры смотрят именно на него, решая, признать ли случай гарантийным: даже если впоследствии загрузчик был заблокирован, tamper-бит однозначно свидетельствует о факте разблокировки. Однако иногда этот бит можно сбросить. В нексусах все решается опять же простой записью бита по нужному адресу в нужный раздел, в других смартфонах это либо вообще невозможно сделать, либо приходится использовать специальные инструменты типа приложения Triangle Away (для Samsung’ов без KNOX).
Выясняем, установлен ли загрузчиком tamper-бит
Чтобы окончательно тебя запутать, скажу, что производители часто используют модульную архитектуру aboot для встраивания в него собственных средств прошивки и управления, работающих совместно с fastboot или даже вместо него. Наиболее яркий пример — это Odin в смартфонах Samsung. А некоторые производители идут еще дальше и вообще отказываются от aboot, заменяя его собственным или сторонним загрузчиком.
Исследуем таблицу разделов планшета на базе Rockchip 3066
С загрузчиками закончим и перейдем к следующему компоненту загрузки.
Раздел boot и ядро
Если во время включения устройства ты не зажимал клавишу увеличения громкости либо не перезагружал смартфон в режим recovery намеренно (например, с помощью расширенного меню перезагрузки в кастомных прошивках), на последнем этапе своей работы aboot загружает в память устройства ядро Linux и RAM-диск из раздела boot, а после этого передает управление ядру.
Благодаря простой структуре образ раздела boot (boot.img) довольно легко распаковать. Это можно сделать даже с помощью HEX-редактора, но проще воспользоваться инструментом imgtool. Пример для Linux (x86_64):
Запакованные ядро и RAM-диск окажутся в каталоге extracted, а содержимое RAM-диска — в подкаталоге ramdisk_ext. Это в идеале. На самом деле, как и в случае с загрузчиком, никакого стандарта для формата раздела boot нет, и производитель может проявить фантазию. Нередко ядро и RAM-диск располагаются на разных разделах. Такую конфигурацию можно найти в старых моделях Samsung и устройствах на базе Rockchip.
Тем не менее в 95% формат раздела boot стандартный, и если ты когда-либо прошивал на свой аппарат кастомное ядро, то наверняка внутри ZIP-архива с ядром был именно образ boot.img, так что вместе с ядром ты прошивал также и RAM-диск. Когда ты это делал, тебе приходилось быть осторожным, ведь RAM-диск стоковой прошивки отличается от RAM-диска того же CyanogenMod. Прошив ядро для AOSP в CyanogenMod, ты мог получить bootloop и много других неприятностей.
Чтобы обойти эту проблему, разработчик CyanogenMod и автор ClockworkMod Recovery Кушик Дутта (Koushik Dutta, или Koush) создал систему AnyKernel, которая позволяет устанавливать ядра отдельно от RAM-диска (путем пересборки раздела boot на лету). Сегодня ее используют многие разработчики кастомных ядер, но далеко не все. Так что перед прошивкой ядра рекомендую либо найти его версию для того кастома, который установлен у тебя, либо убедиться, что оно использует механизм AnyKernel.
Какое бы ядро ты ни выбрал, тебе в любом случае понадобится кастомный recovery для его установки.
Recovery, Edify и Aroma Installer
Обнаружив зажатую клавишу увеличения громкости, aboot делает почти то же самое, что и при обычной загрузке, но использует вместо boot раздел recovery. Разделы идентичны по своему формату и зачастую включают в себя одно и то же ядро, однако содержимое RAM-диска существенно отличается. Если в случае с разделом boot назначение RAM-диска — создать начальные условия для дальнейшей загрузки системы, то recovery — это мини-ОС, способная работать обособленно.
Кастомные recovery намного сложнее. Это уже не просто меню с фоновым рисунком, но целая операционная система, способная устанавливать какие угодно прошивки, делать бэкап, форматировать разделы и многое другое. Современные версии TWRP так и вообще поддерживают управление с помощью тач-интерфейса, сменные шкурки, полностью изменяющие внешний вид recovery, пароль для входа и эмулятор терминала вместе с экранной клавиатурой. Плюс ко всему кастомные recovery включают в себя BusyBox (набор утилит командной строки Linux) и сервер ADB, работающий с правами root. Так что режим recovery очень удобно использовать для отладки и таких операций, как, скажем, дамп разделов. Например, раздела boot (пример для чипов Qualcomm):
Но главная задача recovery — это, конечно же, установка прошивок. Точнее, она была бы главной задачей, если бы в recovery была такая функция. На самом деле все, что делает recovery, когда ты нажимаешь «Install ZIP. » и выбираешь прошивку, — распаковывает ZIP-файл (обычно в раздел cache) и запускает файл /META-INF/com/google/android/update-binary внутри него. Именно update-binary выполняет установку прошивки, руководствуясь инструкциями из файла updater-script (он лежит рядом).
Сами инструкции написаны на языке Edify, включающем в себя набор команд, которые могут понадобиться при установке: mount, unmount, package_extract_file, symlink, run_program и другие. Мы не будем обсуждать здесь все эти команды, они достаточно просты, и, чтобы ознакомиться с ними, достаточно распаковать любую прошивку и открыть updater-script в текстовом редакторе. Скажу лишь, что обычно такие файлы генерируются автоматически при сборке системы из исходников и только авторы узкоспециализированных прошивок (содержащих только ядро, например) пишут их самостоятельно.
Фрагмент updater-script из CyanogenMod 12.1
Recovery не накладывает никаких ограничений на файл update-binary — главное, чтобы его можно было запустить. Это дает производителям возможность использовать вместо него любое приложение, способное запуститься поверх ядра Linux. Совсем не обязательно, чтобы оно вообще выполняло установку прошивки. В рамках проекта Aroma Installer развивается вариант update-binary, который позволяет создателям кастомных прошивок реализовать графический инсталлятор с выбором тех или иных вариантов и опций установки.
Автор Aroma Installer также создал Aroma Filemanager — полноценный менеджер файлов со встроенным эмулятором терминала. Чтобы его запустить, необходимо перезагрузиться в recovery и «прошить» ZIP-файл. Естественно, никакая прошивка выполнена не будет, ведь update-binary внутри ZIP-файла — это только файловый менеджер, он не выполняет никаких операций установки.
Эмулятор терминала, встроенный в Aroma Filemanager
«Фиктивный» update-binary часто используется для распространения разного рода скриптов. Гораздо проще переименовать скрипт в update-binary, запаковать в ZIP-файл и попросить человека «прошить» его, чем объяснять, как запускать скрипты с помощью ADB. Именно так поступил osm0sis со своим скриптом разблокировки загрузчика аппаратов линейки Nexus. Если ты скачаешь его ZIP-файл и взглянешь внутрь, то найдешь updater-binary, внутри которого обычный sh-скрипт.
Root insecure adb
Чтобы иметь возможность выполнять операции с правами root (например, устанавливать софт или управлять сервисами), можно использовать разные приложения (команды), одна из которых носит имя su. Она позволяет получить права root или любого другого пользователя в системе, пароль которого тебе известен. И все благодаря специальному SUID-биту, который позволяет su работать с правами root, даже если оно было запущено обычным пользователем.
В Android с правами root работает исключительно сама система (и то далеко не вся), тогда как сервер ADB и приложения исполняются с правами непривилегированных пользователей (по одному пользователю Linux на каждое приложение, серьезно), а команды su нет вообще. Поэтому единственный способ получить права root в такой ситуации — воспользоваться уязвимостью в одном из системных компонентов, работающих с правами root. Таким образом можно не просто временно заполучить права root, но и использовать их, чтобы разместить в системе бинарник su (скопировать в /system/xbin, например) и поставить на него SETUID-бит. Именно так работают все наиболее популярные инструменты рутинга, от Super One Click до framaroot.
Второй вариант — прошить бинарник su с помощью кастомной консоли восстановления. Известный Android-разработчик Chainfire уже много лет занимается разработкой и поддержкой инструмента для управления root-доступом SuperSU, а также ZIP-архива, прошив который, ты получишь рутованный смартфон (при установке он копирует в систему su и приложение SuperSU.apk ). Кстати, инструменты типа Framaroot вместе с бинарником su также устанавливают SuperSU или его аналог SuperUser, чтобы пользователь мог управлять тем, каким приложениям следует давать права root, а каким нет.
SuperSU собственной персоной
Есть у Chainfire и другой интересный проект — CF-Auto-Root. Он тоже устанавливает в систему su и SuperSU, но делает это весьма оригинальным способом: без задействования recovery. Инструмент CF-Auto-Root существует в двух вариантах, для Odin и для fastboot, причем в последнем случае он представляет собой модифицированную версию recovery, которую не надо прошивать. Ее следует запускать с помощью описанной в начале статьи команды fastboot boot. Пример для Nexus 4:
Подавляющему большинству пользователей root уровня ядра никогда не понадобится. Однако его могут использовать некоторые скрипты и графические инструменты, работающие со смартфоном по ADB (яркий пример: PatchROM от MIUI). В CyanogenMod и многих других кастомных прошивках по умолчанию доступны все виды root (их можно выбрать в «Настройках для разработчиков»). Для получения root уровня ядра в других прошивках можно использовать приложение adbd Insecure за авторством все того же Chainfire.
Adbd Insecure и стоковая прошивка HTC
Выводы
Надеюсь, эта статья помогла тебе разобраться в том, как работают механизмы разблокировки, прошивки и восстановления Android. В целом в этом нет ничего сложного, и, поняв, как именно все это работает, ты избежишь многих проблем, связанных с разблокировкой и перепрошивкой устройства. И даже если они возникнут — теперь ты сможешь их решить без посторонней помощи.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Прелоадер, его создание и варианты оформления
Как сделать, оформить, установить и когда нужно использовать preloader
Прелоадер — это заглушка (анимационный или другой эффект), которая показывается прежде чем полностью загрузится страница сайта
В этой статье рассмотрим как его сделать, установить, оформить и самое главное, когда его нужно использовать, а когда нет.
Несмотря на то, что почти все зарубежные шаблоны используют прелоадеры, я противник их применения в таком виде как они подаются. А именно: у нас закрыт сайт, и что-то там прыгает, пока полностью не загрузится страница. Это потому что:
Но этот подход может пригодится для лендингов или главных страниц сайта, где очень много скриптов, фотографий, присутствует модный слайдер с HD фото и т.д. В этом случае, чтобы посетитель не видел сборку страницы и не пугался этому процессу, можно ее закрыть и показать прелоадер. Это полезно еще в том случае, когда некоторые скрипты активируются после полной загрузки страницы.
Но и тут не стоит забывать, что если вы грузите что то с другого сайта, который недоступен, прелоадер может висеть минутами.
Создавая прелоадер нужно помнить, что красивый анимационный эффект может весить очень много, и в итоге посетитель сайта будет ждать пока загрузится он, а потом еще ждать когда вместо него покажется нужная ему информация.
Создание прелоадера:
Создается и работает все просто: мы создаем фиксированный слой на весь экран, на нем размещаем картинку или блок анимации, а после полной загрузки страницы все это убираем.
Итак, парни. Поднимите руку, кто не знает, что такое прелоадер. Полагаю никто не купился, а если все же чья-то дрожащая рука мелькает, то предлагаю нажать на компе кнопку Reset и полюбоваться на самый настоящий прелоадер.
Для всех остальных, кто ухмыльнулся и проигнорировал мой вредный совет, я продолжу урок.
Удивительное дело, едва программист создал свою программу, как ему хочется внедрить в нее полосу загрузки. А вдруг, кто подумает, что она банально зависла, а не качает терабайт данных из сети Интернет! Знаете, как-то приятно осознавать, что пользователь любуется ползущей полоской, а не проклинает криворуких создателей. Поэтому, давайте приступим к уроку и разберемся с этим самым прелоадером.
Теоретический ликбез
Прелоадер работает в тесной связке с загрузчиком, который в Blend4Web реализуется в виде функции load из модуля data. Обычно структура загрузчика выглядит так:
Здесь функция load генерирует два события, где первое вызывается после окончании загрузки файла, а второе постоянно возвращает числовой результат процесса. Поэтому, основная работа с прелоадером концентрируется именно в обработчике события preloader_cb.
Прелоадер за две секунды
Не верите? Нам понадобятся только эти две команды:
Простая «полоска» за две секунды.
С их помощью можно очень быстро и без труда создать простейшую полоску загрузки. Вот рабочий пример:
Включаем «форсаж»
Разработчики предусмотрели некоторые опции, которые помогут разнообразить стандартную палитру прелоадера.
Всего несколько опций и экран «расцвёл».
Для этого достаточно определить цвета в функции create_preloader():
Режим эксперта
Лучшего результата можно достичь, если сделать свой собственный прелоадер.
Экран загрузки из игры «Сказ о Пятигоре».
Несколько месяцев назад разработчики Blend4Web заявили о релизе браузерной игры «Сказ о Пятигоре». Исходники её открыты и доступны в дистрибутиве SDK. Так что вы можете не только наслаждаться интересным геймплеем и красочностью игры сделанной на Blend4Web, но и познакомиться с внутренней «кухней».
Отличным примером создания собственного прелоадера может служить соответствующий код в Пятигоре.
Основой его является всё та же схема загрузки, приведенная выше. Однако здесь не используются функции модуля preloader. Смысл заключается во взаимодействии кода на JavaScript с HTML и CSS. Давайте рассмотрим, как это работает.
Канвас приложения и экран загрузки могут быть отдельными html-элементами. Собственно, так и сделано в Пятигоре. Это позволяет с легкостью управлять ими через JavaScript:
Здесь, элемент «main_canvas_container» — канвас приложения, а «preloader_cont» отвечает за экран загрузки.
Конечно, стиль веб-страницы лучше всего описывать в файле CSS. Я не стану вдаваться в подробности этого процесса, а просто приведу соответствующий кусок кода, взятый из Пятигора:
Здесь описывается каждый графический элемент используемый в построении экрана загрузки. Обратите внимание на опцию visibility у блока #preloader_cont. Именно с его помощью можно управлять показом экрана загрузки.
Перед выполнением загрузки активируется экран прелоадера. Функция getElementById() возвращает нужный html-элемент у которого изменяется свойство стиля visibility (см. листинг CSS).
Так как функция preloader_cb возвращает процентное значение от выполненного действия, то этим можно воспользоваться, чтобы перерисовывать соответствующие области экрана.
В примере ниже, изменяется свойство width у стиля, описывающего полосу загрузки. Первоначальное значение его равно нулю, которое, в соответствии с переменной percentage, динамически изменяется. Таким же способом корректируется числовое значение результата работы.
Обратите внимание, что после завершения загрузки потребуется скрыть html-элемент preloader_cont.
Это всего-лишь пример создания собственного прелоадера. Не забывайте, что используя Blend4Web, к вашим услугам остаются все возможности современных браузерных технологий: HTML5, CSS3, jQuery (дополните этот список сами). В этом и проявляется гибкость и мощь нашего любимого фреймворка. Удачи в создании крутых прелоадеров!
Cm2 и затёртый preloader.
dervish
GreyDog
dervish, хорошо. Вы в чем-то правы. Попробую на досуге, с разными процессорами.
Я говорил (и сейчас говорю) только о RAM тесте. Когда нужно узнать конечный адрес для снятия бекапа с какого-нибудь нонейма. Без галочки на прелоадере, флештул просто не даст этого сделать, поэтому приходится выбирать первый под руки попавшийся. И всегда работало. И работает.
Т.е. делая тест памяти для любого девайса на MT6572, я выбираю первую же прошивку из папки. Это Lenovo A319.
badxxxboy
uploads
Operation : Check / Read Info [ v1.51 ]
[AP] : Initial info read Ok!
Brand : Lenovo
ProdName : S820_ROW
ProdModel : Lenovo S820_ROW
Device : S820_ROW
AndroidVer: 4.2.1
MTKxCPU : MT6589
MTKxPRJ : ALPS.JB2.MP.V1
SECURITY :
IMEI_SW [1] : 8628080279****
IMEI_SW [2] : 8628080279****
BTMAC Addr : 98FFD0832932
WiFi MAC : 98FFD0822932
EXTRA :
LCD [0] : r61308_hd720_dsi_vdo_yassy
LCD [1] : nt35590_hd720_dsi_cmd_cmi
LCD [2] : nt35590_hd720_dsi_cmd_yassy
LCD Res : 1280×720
TOUCH [0] : ft5206
CAM [0] : ov12830_mipi_raw
CAM [1] : ov2659_raw
MODEM : mt6589_md1_hspa_gemini_skypa_swarovski_row
LOCALE : en_US es_ES zh_CN zh_TW ru_RU pt_BR fr_FR de_DE tr_TR it_IT in_ID ms_MY vi_VN ar_EG th_TH ldpi hdpi mdpi pt_PT nl_NL el_GR hu_HU tl_PH ro_RO cs_CZ hdpi xhdpi
Done!
Elapsed: 00:00:18
Reconnect Power/Cable!
Operation : HW Test [ v1.51 ]
[eMMC] : MODE : SQ-WR
[PASSED] : eMMC RW Check #1 Ok!
[eMMC] : MODE : RA-WR
[PASSED] : eMMC RW Check #2 Ok!
[eMMC RO CHECK] : eMMC Ok! READ-WRITE Passed!
[DRAM] : ADDRESS BUS test
[PASSED] : Bus Count : 0x1D
[DRAM] : DATA BUS test
[PASSED] : Bus Count : 0x1F
[DRAM] : PATTERN test
[PASSED] : PATTERN Ok
[DRAM] : INCDEC test
[PASSED] : INCDEC Ok
Done!
Elapsed: 00:02:45
Reconnect Power/Cable!
Operation : Check / Read Info [ v1.51 ]
[DA_ERROR] : DRAM Configure failed!
ErroCode : 0x2003
EMICFG_NOT_FOUND
Firmware selected, but it NOT compatible!
Boot Error!
Operation Failed
Elapsed: 00:00:26
Reconnect Power/Cable!
Operation : Init Preloader [ v1.51 ]
[DA_ERROR] : DRAM Configure failed!
ErroCode : 0x2003
EMICFG_NOT_FOUND
Firmware selected, but it NOT compatible!
Boot Error!