Какой файл прошивки отвечает за камеру
Нельзя портировать прошивки, например с MT6575 на MT6577. И базовая, и стоковая прошивка должны быть для одного процессора.
Обе прошивки должны быть одной версии ОС
Собственно сама инструкция:
Берем рабочую прошивку для своего устройства (БАЗА);
Берем портируемую прошивку для кастомного рекавери (ПОРТ).
В ПОРТ c заменой скидываем папки из БАЗЫ :
/system/vendor
/system/lib/hw
/system/lib/modules
и файлы
/system/etc/vold.fstab
/system/etc/vold.fstab.nand
system/usr/keylayout/generic.kl
boot.img
assert(package_extract_file("boot.img", "/tmp/boot.img"),
write_raw_image("/tmp/boot.img", "bootimg"),
delete("/tmp/boot.img"));
дописываем их в конец скрипта.
Прошивка получится в папке ПОРТА. Теперь все это нужно запаковать с обычным сжатием в zip (Если вы распаковывали). И обязательно подписать.
Если в вашей прошивке после портирования что-то не работает, не факт, что после манипуляций, приведенных ниже, это заработает. Но попробовать стоит :yes2: .
Здесь написано, какие бинарники и либы отвечают за работу разных модулей(GPS, Bluetooth, Wi-Fi, радио и т.д.) Попробуйте позаменять их тоже.
*Из БАЗЫ в ПОРТ
Не работает GSM, 3G - меняем папку /system/etc/firmware
Не работает Wi-Fi - меняем файлы /system/bin/p2p_supplicant ; /system/bin/wpa_supplicant
Не работает камера - меняем /system/lib/libcameracustom.so
Проблемы со звуком - меняем /system/lib/libaudiosetting.so
Не работает радио - заменяем system/lib/libaudiosetting.so и libfmcust.so
Слышны хрипы/звуковые артефакты заменяем system/lib/soundfx
Не работают аппаратные клавиши меняем папку system/usr/keylayout
*Решение некоторых проблем (дополнение)
Не ловит связь-с папки system/etc/firmware вытаскиваем modem.img,если после этого не сеть все же не работает то берем с папки system/lib/modules файлы ccci.ko , ccci_plat.ko
Проблема с клавишей домой,не работает как задумано-с папки system/usr/keylayout берем файл Generic.kl и mtk-tpd.kl
Не работает wi fi-с папки system/lib/modules/ берем эти файлы mtk_stp_wmt.ko и mtk_wmt_wifi.ko ,затем идем в META-INF/com/google/android/updater-script ищем симлинк symlink(“/system/lib/modules/wlan_mt6620.ko и меняем значение на 6628 если у вас такой чип,если не знаете какой у вас чип,идем в базу и в build.prop ищем в строке wlan
Если проблемы с bluetooth то с папки берем файл system/lib/modules/mtk_stp_bt.ko если не работает то меняем эти два файла system/lib/libbluetooth_mtk.so
system/lib/libbluetoothem_mtk.so
Не работает радио - меняем system/lib/modules/mtk_fm_priv.ko и system/lib/modules/mtk_fm_drv.ko , если не работает, то меняем эти файлы
system/lib/libfmar1000.so
system/lib/libfmcust.so
system/lib/libfmjni.so
system/lib/libfmmt6616.so
system/lib/libfmmt6620.so
system/lib/libfmmt6626.so
system/lib/libfmmt6628.so
Если все же не работает меняем FMradio.apk
Не работает камера-с папки system/lib/hw/ меняем этот файл camera.default.so,если не помогает,то с папки system/lib меняем:
- libcamalgo.so
libcamera_client.so
libcameracustom.so
libcameraprofile.so
libcameraservice.so
не работает видеозапись меняем эти файлы libmhal и libMTKOmx в папке system/lib
Проблема с GPS- меняем эти файлы system/xbin/libmnlp и mnld
Черный экран,медленная анимация,медленный автоповорот-меняем этот файл hwcomposer.mt6577.so в папке system/lib/hw - замечание от Andrey567
Не работает компас, датчик приближения или что-то из этой оперы, меняем system/lib/hw/sensors.default.so
Несколько лет назад такие операции, как рутинг, прошивка и тюнинг Android-смартфона, требовали достаточно глубоких знаний, специальных инструментов, совместимых только с настольной Windows, и массу терпения. Сегодня все стало намного проще и все эти действия можно выполнить с помощью специального софта для смартфона, доступного прямо в Google Play.
Введение
Обычно установка альтернативной прошивки на девственно чистый смартфон выглядит примерно так: сначала ты находишь в Google информацию по рутингу своей модели смартфона, затем обзаводишься необходимыми инструментами (Android SDK, adb, fastboot, скрипты), подключаешь смартфон к компу и пытаешься как можно точнее выполнить инструкции. Если все удалось, ты получаешь root и, в некоторых случаях, в довесок кастомную консоль восстановления.
Далее следует установить прошивку. Для этого ты вновь погружаешься в интернет и, спустя полчаса хождения по форумам и чтения информации о совместимости, находишь и скачиваешь zip-архив с прошивкой. Снова подключаешь смартфон к компу и скидываешь на него прошивку. Затем ты выключаешь смартфон, включаешь его, зажав кнопки уменьшения громкости и включения, и получаешь доступ к консоли восстановления. Пять минут походив по меню с помощью клавиш громкости, ты находишь свою прошивку на карте памяти и даешь команду на установку.
После окончания установки ты перезагружаешь смартфон и молишься, чтобы все получилось. Когда на экране появляется рабочий стол, ты с облегчением выдыхаешь и тут же вспоминаешь, что забыл скачать и установить приложения Google и ядро. Что ж, для этого ты еще полчаса проводишь в интернете, находишь искомые zip’ы, скидываешь их на карту памяти, дальше консоль восстановления, тыканье по меню, ожидание со скрещенными пальцами, и вот оно, рабочий стол… блин, надо было устанавливать другую прошивку…
Знакомая картина? Если да, то эта статья для тебя. Из нее ты узнаешь, как проделать все то же самое за десять минут, подключив смартфон к компу только один раз на две минуты.
Что ты хочешь и что ты получишь?
Итак, предположим, что ты держишь в руках совершенно новый смартфон. Твоя задача — установить на него CyanogenMod (как вариант — AOKP, ParanoidAndroid или популярный SuperVasyaAndroidModPlus) и ядро franco.kernel. И тот и другой распространяются в прошиваемых через консоль восстановления zip-файлах. Однако обычная конcоль их не примет из-за кривой цифровой подписи («не производителя это подпись, прощайте»). Поэтому тебе нужна кастомная консоль восстановления, которая не обращает внимания на цифровые подписи. Это может быть ClockworkMod или TWRP.
Бесплатная версия franco.updater не умеет ничего, кроме установки и обновления ядра
Другие статьи в выпуске:
Но! Чтобы установить кастомную консоль восстановления, нужны права записи во внутреннюю память смартфона, то есть нужен root. А root в «не Nexus» устройствах всегда получают с помощью взлома защиты Android. Итого в целом картина действий выглядит так: получение root -> установка консоли восстановления -> прошивка CyanogenMod -> прошивка приложений Google -> прошивка ядра -> перезагрузка -> радость. Давай посмотрим, как все это сделать.
В CyanogenMod есть собственный механизм OTA-обновления прошивки
Перво-наперво нам нужен root. Сразу скажу, что это единственная задача, для решения которой придется подключить смартфон к компу. Здесь уж ничего не поделаешь, система безопасности Android не позволит сделать это Android-приложению. С другой стороны, плеваться тоже не стоит, так как все делается очень быстро и безболезненно. Общий алгоритм действий выглядит так:
По заявлению украинских разработчиков, iRoot действует в отношении любого смартфона под управлением Android 2.3–4.2.2, а не только устройств от Huawei, как можно было подумать, скачав и запустив приложение. После завершения работы и нескольких перезагрузок на смартфоне должно появиться приложение SuperUser и, конечно же, root-доступ, который откроет нам путь для установки рекавери и прошивок.
iRoot — получаем root в один клик
Установка Recovery
Установить кастомную консоль восстановления между тем очень просто. Для этого в маркете есть куча приложений, но я бы рекомендовал использовать Recovery-Tools, ROM Manager или TWRP Manager. Первая предназначена исключительно для установки рекавери и, по сути, состоит всего из двух кнопок: «Flash Clockworkmod Recovery» и «Flash TWRP Recovery». После нажатия одной из них будет установлена та или иная консоль восстановления. В принципе, неважно, какую из них устанавливать, отличие разве что в том, что TWRP удобнее управлять пальцем, но и эта функция нам безразлична — самостоятельно рыться в их настройках мы не будем, а положимся на специальный софт.
ROM Manager предлагает нам установить ClockworkMod Recovery
По идее, Recovery-Tools должна сама определить модель смартфона и скачать правильный архив с консолью, однако этот механизм срабатывает не всегда, да и база данных неполная. Поэтому как запасной вариант можно использовать ROM Manager, предназначенный исключительно для установки ClockworkMod, но зато включающий в себя исчерпывающую базу устройств. Опять же все, что нужно сделать, — это нажать на кнопку Recovery Setup -> ClockworkMod Recovery, подтвердить модель телефона и дождаться окончания установки.
TWRP-Manager: простой и удобный способ управления TWRP Recovery
Если же и этот метод не сработал, то стоит обратить внимание на модель своего смартфона и убедиться, не китайская ли это поделка. Само собой разумеется, супердешевые китайские телефоны нельзя прошить таким образом. Никто их в базу вносить не будет, а заниматься поддержкой тем более. Поэтому в отношении китайцев придется применять старый дедовский способ ручной установки (да и то тебе сильно повезет, если на него вообще что-то будет портировано).
Recovery-Tools: простой и удобный способ установки рекавери
Установка прошивки
Теперь, когда смартфон оснащен кастомной консолью восстановления, он готов принять любую доступную для данной модели прошивку и проглотить ее, не поперхнувшись. Самостоятельно искать прошивки мы, конечно же, не станем. Мы автоматизируем этот процесс с помощью приложения GooManager. Для тех, кто не в курсе: еще с самого начала распространения кастомных прошивок в Сети появился сайт. Изначально на нем размещался проприетарный гугловский софт (типа Gmail или маркета), который авторы кастомных прошивок не могли использовать из-за лицензионных ограничений, но затем он превратился в открытый репозиторий всевозможных прошивок, а еще через некоторое время появилось приложение GooManager, позволяющее автоматически устанавливать как прошивки, так и гугловские приложения.
Это приложение замечательно тем, что дает выбор из доступных прошивок, основываясь на модели смартфона. В результате нам не придется ни самостоятельно искать прошивки, ни бояться за то, что какая-то из них может криво встать. В общем и целом алгоритм работы с приложением выглядит так: «Запуск -> Browse Compatible ROMs -> выбор прошивки по имени (например, aokp или cm) -> выбор версии -> Begin Download -> Order & flash selected -> Flash». И это все, прошивка будет скачана, а затем установлена автоматически. Смартфон при этом перезагрузится.
Отмечу также, что по умолчанию GooManager не делает вайп перед установкой прошивки, однако он это умеет. Поэтому каждый раз при кардинальной смене прошивки, то есть именно замене одной на другую, а не обновлении, в последнем окне (которое появляется после нажатия «Order & flash selected») следует ставить флажок напротив опции «Wipe data (factory reset)». Так ты избежишь возможных проблем с загрузкой и работой новой прошивки.
GooManager собственной персоной
Установка ядра
Кроме кастомной прошивки, мы также можем поставить кастомное ядро. О том, что это такое, мы уже подробно рассказывали в одном из предыдущих номеров. Если в двух словах, то кастомное ядро может дать более тонкий контроль над смартфоном, поднять его производительность и сохранить заряд батареи, однако здесь все далеко не так просто, как с прошивками, и без детального ознакомления с темой я бы не рекомендовал прошивать кастомное ядро и ограничиться тем, которое идет в комплекте с прошивкой.
Если же решение об установке ядра принято, то самое время заглянуть в Google Play. Для многих популярных кастомных ядер в свое время были разработаны специальные утилиты для управления и обновления, с помощью которых установить ядро можно так же легко, как запустить почтовый клиент. Три известных утилиты из этого списка:
- franco.Kernel updater — «обновлятор» и конфигуратор одного из самых известных ядер для девайсов линейки Nexus (поддерживаются Samsung Galaxy Nexus, LG Nexus 4, Asus Google Nexus 7 и Samsung Nexus 10). Бесплатная версия умеет только устанавливать и обновлять ядро, но большего нам и не нужно;
- Trinity Kernel Toolbox — аналогичное решение для ядра Trinity, поддерживающего все те же Nexus-устройства, а также Samsung Galaxy Note II и Galaxy S III. Помимо функции установки, также включает в себя инструменты управления всеми функциями ядра и стоит 114 рублей;
- GLaDOS Control — практически копия предыдущего приложения, но в этот раз для, прямо скажем, не самого популярного ядра GlaDOS (Galaxy Nexus и Nexus 7). Включает в себя полный комплект для тюнинга и автоматическую обновлялку. Стоит 81 рубль.
Все эти приложения позволяют без лишних телодвижений установить одно из трех ядер. Но если деньги тратить не хочется или ты выбрал ядро, для которого просто нет управляющего приложения, то можно выйти из ситуации, скачав ядро прямо на телефон, а затем прошив его с помощью все того же GooManager. Делается это так:
- Идем на xda или 4pda, находим свой девайс, выбираем ядро (да, придется покопаться в многочисленных тредах) и скачиваем его на телефон. Обычно ядро весит 5–10 Мб, поэтому ждать придется недолго и стоить это будет копейки (если нет Wi-Fi).
- Устанавливаем и запускаем любой файловый менеджер, переходим в каталог Download на карте памяти, находим архив с ядром и копируем его в каталог goomanager, опять же в корне карты памяти.
- Запускаем GooManager, жмем на пункт Flash ROMs, ставим галочку напротив архива с ядром, жмем кнопку «Order & flash selected», а на следующем экране, ничего не меняя, нажимаем кнопку «Flash».
Обновление прошивки, ядра и gapps
К этому моменту у тебя уже должны быть кастомная консоль восстановления, кастомная прошивка, приложения Google и кастомное ядро; фул-хаус, все, что только нужно. Однако долго на этом всем мы не просидим, и вскоре уже выйдут новые версии прошивок, основанные на новой версии Android, еще более быстрые ядра и еще более фичастые консоли восстановления. Короче говоря, нужно обновляться. Но как?
Для обновления также предусмотрены свои собственные инструменты, но перед тем, как перейти к их обзору, поясню несколько специфичных моментов:
- Консоль восстановления можно обновлять когда угодно и как угодно. Она находится в отдельном разделе, поэтому, даже угробив этот раздел, ты не угробишь Android. Обновлять можно с помощью все тех же Recovery-Tools, ROM Manager и TWRP Manager.
- Ядро тоже находится в отдельном разделе, и его можно обновлять/менять когда угодно и как угодно, главное — учитывать совместимость с версиями Android и типами прошивок. Способы описаны выше.
- Обновляется прошивка без всяких вайпов, однако, если было установлено кастомное ядро, его придется переустановить. Переустановка приложений Google не требуется.
- Переход на другую прошивку производится с полным вайпом (factory reset) и последующей доустановкой приложений Google и ядра. Все данные, кроме файлов на карте памяти, будут потеряны (этого можно избежать, сделав бэкап с помощью Helium или Titanium Backup).
Теперь о том, как выполнять обновление. Рекавери и ядро обновляются с помощью специализированного софта либо, в случае использования редкого ядра, самостоятельного скачивания и прошивки вручную, как показано в предыдущем разделе. Обновлять прошивки можно разными способами. Если прошивка была установлена с помощью GooManager, то при появлении новой версии в репозитории goo.im тебе придет уведомление, нажав на которое можно скачать и установить новую версию. Никаких данных и приложений ты при этом не потеряешь, останется переустановить только ядро.
В CyanogenMod есть собственный механизм обновления, который также автоматически предупредит тебя о выходе новой версии и предложит скачать ее и установить. По умолчанию он работает только со стабильными версиями прошивки, но его можно переконфигурировать, так что предупреждения будут приходить и после выхода ночных сборок. Для этого идем в «Настройки -> О телефоне -> Обновление CyanogenMod». В опции «Проверка обновлений» выбираем «Ежедневно», в опции «Тип обновления» — «Новые версии (Включая ночные сборки)».
Единственная проблема такого метода обновления в том, что каждая прошивка будет весить около 200 Мб — накладно, если производить обновления каждый день или несколько раз в неделю. Поэтому я бы рекомендовал использовать инструмент CyanDelta, который позволяет выкачивать только патчи с измененными компонентами прошивки вместо всего архива целиком. При использовании этого инструмента каждое обновление будет весить всего 2–10 Мб, так что для выкачивания подойдет даже сотовая сеть. Пользоваться очень просто: после первого запуска софтина предложит загрузить всю прошивку целиком (на нее в дальнейшем будут накладываться патчи), после чего повиснет в фоне и будет уведомлять о появлении обновлений.
CyanDelta позволяет скачать новую версию Android, потратив всего 3 Мб трафика
Бэкап
Обычно бэкап Nandroid выполняется вручную прямо из меню кастомного рекавери, однако мы воспользуемся приложением Online Nandroid Backup, которое создает резервную копию системы прямо во время ее работы. Приложение это бесплатное и доступно в Google Play. После установки оно установит скрипт бэкапа (это, кстати, придется делать после каждого обновления прошивки) и предложит выполнить первоначальную настройку, которая сводится к выбору способа автогенерации имени бэкапа (по умолчанию текущее время), а также выбору формата бэкапа. Обычный Clockworkmod-формат универсален и будет совместим с любым кастомным рекавери, однако если на смартфоне установлен именно ClockworkMod, то в опции Backup Mode лучше выбрать CWM Incremental. В этом случае каждая новая резервная копия будет содержать только отличия от предыдущей, из-за чего потеряется совместимость с TWRP, но удастся сохранить солидный кусок свободного места на карте памяти.
![Nandroid Manager позволяет вытащить из бэкапа практически любые данные](nandroid-manager1.jpg, nandroid-manager2.jpg)
![Online Nandroid Backup: делаем резервную копию прямо во время работы смартфона](online-nandroid1.jpg, online-nandroid2.jpg)
В прошивке AOKP есть масса скрытых настроек, активировать которые можно, установив бесплатное приложение AOKP.co.
TWRP Manager позволяет выполнять практически все операции TWRP Recovery прямо из Android: установка прошивок, вайп, бэкап и восстановление, перезагрузка в разных режимах.
Выводы
Сегодня процесс прошивки и кастомизации смартфона под управлением Android — это уже не тот зубодробительный квест, каким он был во времена первых версий Android. Как ты смог заметить, все делается очень просто, без чтения длинных мануалов и поиска совместимых прошивок. Но даже в том случае, если что-то пойдет не так, если ты окажешься столь невезучим, что запорешь не только установленный Android, но и консоль восстановления, boot-сектор все равно останется на месте и ты сможешь вернуть свой смартфон к жизни, подключив его к компу и воспользовавшись фирменными инструментами прошивки от производителя.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Наверняка у тебя как у пользователя Android возникало желание сделать операционную систему лучше, добавить полезное, убрать лишнее и поделиться своим творением с обществом. Сборка собственной прошивки из исходников — сложный процесс, требующий глубоких знаний предмета, однако никто не запрещает взять стандартную прошивку смартфона и адаптировать ее под свои нужды. Это не так уж и сложно сделать.
Начнем с того, что тебе нужен Linux. В Windows ты сможешь только разобрать прошивку, но собрать обратно уже не получится по чисто техническим причинам. Теперь о прошивке. Обычно они распространяются в виде ZIP-архивов, прошиваемых через кастомные рекавери. Именно один из них нам и понадобится для опытов. Начинать путь ромодела я рекомендую с какой-нибудь максимально приближенной к AOSP кастомной прошивки, потому что в ней зачастую проще разобраться, чем в стоке.
Нужный ZIP можно найти на XDA Developers или 4PDA. Но имей в виду, что нужна прошивка конкретно для твоей модели аппарата, — у того же Galaxy S7 есть несколько модификаций для разных рынков, не всегда совместимых между собой.
Структура ZIP-файла с прошивкой
После загрузки распакуем архив с помощью любого архиватора. Внутри будет следующий набор файлов и папок:
- META-INF — папка с метаинформацией о прошивке (сертификат автора, манифест со списком файлов, их контрольными суммами), скриптом обновления (updater-script) и инсталлятором (update-binary), который выполняет команды скрипта по монтированию разделов, копированию файлов и другим действиям с NAND-памятью;
- boot.img — образ с ядром и RAM-диском (он прошивается в раздел boot);
- system.new.dat — это, грубо говоря, и есть сама прошивка, а точнее образ раздела system, содержащий операционную систему Android за вычетом ядра;
- system.transfer.list — содержит список команд, которые необходимо выполнить, чтобы поблочно скопировать содержимое system.new.dat в раздел system при установке прошивки;
- system.patch.dat — используется для OTA-обновлений, то есть выборочного внесения изменений в прошивку; если прошивка «полная», он имеет нулевой размер.
Рекомендуем почитать:
Распаковываем system.new.dat
Файлы system.new.dat и system.transfer.list представляют для нас наибольший интерес. Точнее, не они, а содержащаяся в них система. Но добраться до нее не так просто.
Скрипт
Самые ленивые могут разобрать прошивку с помощью скрипта System_Extractor-Linux.
- Распаковываем архив с прошивкой в любую папку.
- Качаем скрипт по ссылке и разархивируем в любую папку.
- Запускаем файл ext (если будет ругаться на отсутствие Java, просто пропусти, нажав y ; Java нужна только для запаковки).
- Теперь выбираем распаковку, нажав кнопку 1, а затем Enter.
- Новая папка с именем extract_* появится рядом с файлом ext и папкой tools . Копируем в нее файлы system.new.dat и system.transfer.list .
- После копирования файлов нажимаем Enter и ждем. Через некоторое время нужно будет опять нажать Enter, ввести пароль администратора и еще раз тапнуть Enter.
- Готово. Содержимое system в папке extract_*/output .
Ручной способ
Распаковываем архив с прошивкой в любую папку (например, в rom ):
Скачиваем нужные нам инструменты в эту папку:
Он преобразует файл system.new.dat в raw-образ с именем system.img . Монтируем образ к подпапке mnt :
Содержимое образа system
Структура каталогов Android
После распаковки system появится следующая каталоговая структура:
- app — предустановленные приложения со стандартными привилегиями;
- priv-app — предустановленные приложения с повышенными привилегиями, в том числе некоторые компоненты системы;
- bin — бинарные файлы формата ELF, аналог каталогов /bin и /usr/bin в Linux. Содержит различные системные компоненты, используемые более высокоуровневыми компонентами системы;
- etc — файлы настроек. Полный аналог /etc в Linux, используемый, однако, только теми самыми системными компонентами. Приложения Android хранят индивидуальные настройки в каталогах /data/data/ ;
- fonts — шрифты. По умолчанию содержит только фирменные шрифты Roboto;
- framework — библиотеки Java-классов, используемых системой и приложениями. Тут же лежит файл framework-res.apk , содержащий полное описание интерфейса операционной системы, включая все графические файлы;
- lib и lib64 — Linux-библиотеки, используемые низкоуровневыми компонентами системы. Аналог каталогов /lib и /usr/lib в Linux, включая такие стандартные библиотеки, как libc, libz, libssl. На устройствах с архитектурой ARMv7 и ниже каталог lib64 будет отсутствовать;
- media — медиафайлы: рингтоны, звуки уведомлений, звуки интерфейса и анимация загрузки ОС;
- tts — файлы, необходимые синтезатору речи;
- usr — каталог, который обычно содержит файлы, необходимые для работы приложений из каталога bin. По сути, аналог /usr/share ;
- vendor — файлы, поставляемые производителем устройства. Обычно содержит бинарный firmware для различных железных компонентов, например модуля Wi-Fi;
- xbin — необязательный каталог; кастомные прошивки используют его для хранения таких вещей, как интерпретатор bash, SSH, PowerTOP, BusyBox, и других полезных инструментов;
- build.prop — файл, содержащий информацию о сборке, а также различные низкоуровневые настройки;
- addon.d — содержит скрипты, запускаемые после установки прошивки. Сюда же GApps прописывают свой скрипт, благодаря которому возрождаются после переустановки прошивки.
Ознакомившись с базовой структурой Android, начнем вносить изменения.
Удаляем и добавляем приложения
Все предустановленные программы можно найти в двух папках:
Друг от друга они отличаются привилегиями доступа. Если программы из app имеют такие же полномочия, как сторонние программы (например, установленные из Play Store), то приложения из priv-app могут использовать привилегированные API (права privileged). Подробнее об этом можно узнать из нашей статьи.
Для предустановки приложения в прошивку просто кинь ее APK-файл в /system/app/ . Можно, конечно, создать отдельную папку, но в нашем случае в этом нет смысла, потому что папка служит для хранения библиотек и odex-файлов, которых у нас попросту нет. Для удаления просто удали папку с ним.
Можно пойти дальше и поменять стоковые приложения на аналоги. К примеру, для замены календаря удаляем папку Calendar и копируем в /system/app наш любимый com.rpagyc.simplecalendar.apk . А можно и не копировать. Тогда прошивка будет без календаря.
Главное, помни: стоковые программы могут быть связаны между собой. Поэтому удаление одной проги вполне может привести к полной неработоспособности другой (к примеру, CalendarProvider и Calendar: удалив первый, ты сделаешь неработоспособным не только стоковый, но и любой другой календарь). К счастью, в чистых AOSP-прошивках взаимосвязей не так много.
Меняем анимацию загрузки
Анимация хранится в виде PNG-картинок, упакованных в архив /system/media/bootanimation.zip без сжатия. Внутри архива находятся:
- desc.txt — файл, описывающий анимацию;
- part0 — папка с файлами анимаций, которые воспроизводятся первыми;
- part1 — папка с файлами анимаций, которые воспроизводятся вторыми;
- .
- part? — крайняя папка, изображения с которой воспроизводятся в конце.
Файл desc.txt может содержать нечто вроде
Назначение этих строк интуитивно понятно: 1920 × 1080 — разрешение картинки, 60 — число кадров в секунду. Part0 и part1 указывают на папки, из которых будет воспроизводиться анимация, и последовательность воспроизведения. Вообще, может быть как одна часть, так и несколько (три и больше).
Изображения, находящиеся в папках part, пронумерованы пятью цифрами в порядке воспроизведения: 00000.jpg , 00001.jpg , 00002.jpg . Эти изображения можно поменять на свои, тем самым создав оригинальную анимацию. А можно просто удалить файл bootanimation.zip . Тогда девайс будет показывать анимацию из стандартного Android. Или воспользоваться уже готовой коллекцией анимаций на 4PDA.
Четыре части в bootanimation.zip для LineageOS
Изменяем звуковое оформление
Фактически все звуки, которые воспроизводит система, хранятся в папке /system/media/audio . Внутри нее ты найдешь следующие папки:
- alarms — мелодии будильника;
- notifications — звуки уведомлений;
- ringtones — мелодии звонка;
- ui — системные звуки, например низкий заряд батареи, фокусировка камеры, выбор элементов интерфейса.
В alarms, notifications, ringtones можно накидать сколько угодно любых мелодий. Взять их можно, например, здесь:
И маленький лайфхак: удаление файлов из папки ui приведет не к сбоям и ошибкам, а к исчезновению системных звуков. Поэтому ты можешь легко отключить звук создания снимка с камеры, снятия скриншота, просто потерев содержащие эти звуки файлы (их имена интуитивно понятны).
Добавляем шрифты
Шрифты хранятся в fonts . Найти архивы с файлами шрифтов можно на 4PDA и XDA. Для установки достаточно скопировать с заменой ttf-файлы из архива в папку fonts .
Меняем системные настройки (build.prop)
В образе system есть интересный файлик build.prop , содержащий множество полезной информации о железе устройства и настройках, устанавливаемых по умолчанию, для различных стоковых приложений. Справедливости ради замечу, что это не всегда так. Например, в Gigaset ME и ME Pro build.prop разделен на две части. В одной части содержатся настройки для Gigaset ME, а для ME Pro некоторые строки продублированы, но ключи (название смартфона и так далее) в них другие. Это было сделано, чтобы обеспечить более-менее корректную работоспособность одной и той же прошивки на разных аппаратах.
Дополнительный файл для Gigaset ME и ME Pro
Build.prop содержит (или может содержать) огромное количество настроек. Некоторые из них ничего не меняют, некоторые улучшают одно за счет ухудшения другого, но есть те, которые действительно полезны:
- ro.product.model и ro.product.manufacturer — модель смартфона и имя производителя. С помощью замены этих строк можно заставить Play Store думать, будто у тебя другой смартфон, что откроет доступ к большему количеству софта. Для всяких малоизвестных китайских смартфонов эти строчки могут стать спасительными;
- hw.qemu.mainkeys — принимает только два значения: 0 — показать наэкранные клавиши навигации, 1 — не показывать кнопки. Отсутствие строки соответствует 0;
- debug.sf.nobootanimation — значение 1 отключает анимацию загрузки, что немного поднимает ее скорость. Установка 0 или удаление строки возвращает анимацию на место;
- ro.telephony.default_network — говорит системе, в какой режим должна быть переключена мобильная сеть при загрузке;
- ro.sf.lcd_density — DPI дисплея, наиболее точное значение для дисплея можно посчитать через удобный сайт. Но никто не запрещает поставить и большее или меньшее значение по своему вкусу: более высокие значения делают элементы интерфейса крупнее, низкие — меньше;
- ro.config.vc_call_vol_steps — количество шагов громкости во время разговора (по умолчанию 8);
- ro.config.media_vol_steps — количество шагов громкости мультимедиа (по умолчанию 15).
Внедряем в прошивку Google Apps
Почти всегда кастомные прошивки поставляются без сервисов Google и магазина приложений. Разработчики предлагают нам установить их отдельно с помощью пакета GApps. Однако его можно интегрировать прямо в прошивку.
Для начала необходимо скачать пакет GApps. Я рекомендую брать архивы Open GApps. Выбираешь версию Android, архитектуру процессора и вариант комплектации (Pico, Nano, Stock. ), который определяет, сколько различных приложений Google содержит архив. Я рекомендую скачать версию Pico. Она содержит только Play Store и набор необходимых для его работы библиотек.
Интеграция GApps в прошивку выполняется так:
- Распаковываем ZIP-архив GApps с помощью любого архиватора.
- Переходим в папку Core.
- Видим множество архивов с расширением .tar.lz . Извлекаем с помощью lzip.
- После распаковки копируем файлы из папок в соответствующие папки в system. Что куда кидать, нетрудно догадаться по структуре каталогов в архиве. Например, configupdater (со скриншота) нужно кидать в папку priv-app .
- Переходим в папку GApps (находится рядом с Core) и проделываем пункты 3 и 4 для файлов в ней.
- Все, мы интегрировали GApps в нашу прошивку!
Свободное место
Необходимо понимать, что место для установки прошивок ограниченно. Нельзя установить прошивку, размер которой перевешивает размер раздела system устройства. Посмотреть его значение можно, используя ADB:
Инфа о разделе system
Второй вариант: поставить на устройство терминал и набрать команду
Размер раздела в байтах можно узнать, установив на смартфон BusyBox и выполнив в терминале команду
Или то же самое с помощью ADB:
Место, занимаемое прошивкой, будет приблизительно равно размеру system в распакованном виде. Вообще, при создании прошивки необходимо учитывать, что юзер также может прошить поверх нее различные модификации (SuperSU, Xposed) или перенести приложения в раздел system. Например, минимальный пакет приложений Google (Pico) требует минимум 150 Мбайт дополнительного пространства для установки.
При необходимости размер файла прошивки можно уменьшить, удалив не только ненужные программы из /system/app ( /system/priv-app ) и звуки вызова из system/media/audio и bootanimation.zip , но и:
- /system/tts/lang_pico — языки примитивного голосового движка Pico TTS, голосовой движок Google это не затронет;
- /system/usr/srec/config/ — офлайн-языки. Можно будет скачать потом онлайн, если понадобится.
Сборка
После внесения изменений нужно собрать все обратно. Сначала запакуем раздел system в system.new.dat . Скачиваем нужные нам инструменты:
Преобразовываем нашу папку обратно в RAW-образ. Назовем его system_new.img :
1073741824 меняем на размер раздела system в байтах. Желательно даже сделать его чуть меньше. Делаем из RAW-образа sparse-образ:
Преобразуем наш образ в system.transfer.list и system.new.dat , которые и нужно кидать в архив с прошивкой, но сначала удалим старые файлы:
Отделим файлы прошивки от лишней шелухи (файлов, которые мы загружали для работы. Для этого удобно пользоваться архивом с прошивкой). Удалили? Теперь нужно запаковать прошивку в ZIP-архив (любым архиватором).
Осталось подписать архив. Сделать это можно как на самом Android с помощью ZipSigner, так и на ПК (потребуется установленная Java):
Подводные камни
Во время сборки system.new.dat ты можешь столкнуться с несколькими проблемами, вызванными постоянными изменениями в механизмах формирования прошивок Android. Описанный выше способ должен хорошо сработать в случае основанной на Android 5.1 прошивки, в более новых могут возникнуть сложности, так что потребуется использовать другие версии инструментов сборки. К сожалению, мы не можем описать все нюансы сборки, поэтому, возможно, придется погуглить.
Установка
Для установки кастомной прошивки необходим кастомный рекавери TWRP, позволяющий устанавливать неподписанные или подписанные тестовым ключом прошивки (именно такую мы создали). В журнале мы неоднократно описывали процесс его установки, да и в ветках форума, посвященных твоему устройству, обычно есть достаточно информации для того, чтобы это сделать.
Выводы
Эта статья описывает лишь верхушку огромного айсберга под названием «модификация прошивок». «Серьезные» прошивки не только дополняют ядро и саму прошивку со стоковыми приложениями множеством функций (которые зачастую вырваны из других ядер и прошивок), организовывая или даже меняя принципы их взаимодействия, но и вполне могут кардинально менять принципы работы ОС. Правда, такая поделка — это уже не Android, а отдельная ОС, даже если Play-сервисы получится туда поставить (кстати, такие действия, мягко говоря, не поощряются Google). Ну и не забываем: все оболочки от производителей — TouchWiz, ZenUI, HTC Sense и так далее — всего лишь обычные кастомы, максимально привязанные к железу устройства и друг к другу.
IP камеры представляют из себя достаточно сложное устройство, управляемой микропрограммой на основе Linux. Как и в любых программах, она может содержать ошибки или уязвимости, которыми могут воспользоваться злоумышленники. Для устранения таких ошибок, а также для добавления новых функций, производитель выпускает обновления прошивок, которые можно самостоятельно установить.
Для обновления прошивки сначала потребуется узнать её версию и дату:
Для этого с помощью программы CMS подключаетесь к камере/регистратору, открываете свойства и заходите в настройки (Device config):
Там выбираете "Информация" -> "Версия" (Setting->Info->Version). Нас интересует Версия системы (System) - это цифры, обведённые красным. Первые три цифры определяют конкретного сборщика оборудования (Вендора), а оставшиеся пять - это и есть версия прошивки. При скачивании прошивки нужно выбирать файл с теми же цифрами. Дата прошивки (Build Date) означает дату её выпуска, по этим данным можно ориентироваться, на сколько старое ПО установлено в камере.
Для установки скачанной прошивки нужно зайти в пункт "Обновление" (Upgrade)
Выбрать пункт "Директория" (Browse), выбрать файл новой прошивки и нажать кнопку "Обновить" (Upgrade). После чего начнётся сам процесс обновления. Обычно это занимает около минуты, после чего ещё одну минуту камера перезагружается. В конце обновление должна появиться табличка "Обновление успешно". Поздравляю, ваша камера/регистратор теперь имеют свежую программу.
Если появилась табличка "Обновление неудачно", скорее всего вы пытались установить неподходящую прошивку, ещё раз проверьте версию из пункта "Версия" и скачанной прошивки. Ещё такое может произойти, если вы пытаетесь обновить оборудование от другого производителя (первые три цифры отличаются от 000). В некоторых случаях, производители защищают подмену ПО в своих продуктах, указывая в настройках прошивки дополнительный пункт Vendor, тогда обычные версии (General) ПО уже не могут быть установлены без правки InstallDesc. Однако этот вопрос уже выходит за рамки данной статьи. Если вас интересует подобный вопрос, обратитесь в поддержку любым доступным способом.
Эта история началась больше года назад, когда в организацию были закуплены несколько относительно дешёвых китайских IP-камер Falcon Eye FE-MTR300 P2P, чтобы между сотрудниками и посетителями не происходило никаких эксцессов под присмотром большого брата.
Не сказать, чтобы всё было хорошо… Всё было средне. И нам показалось, что обновление ПО камер сможет что-то улучшить. Оказалось, что некоторые модели Falcon Eye, Tenvis, Foscam и, возможно, ещё каких-то фирм практически совпадают. Где-то кнопочки поудобнее, где-то интерфейс русский есть. И мы решились!
Обновили ПО камер на схожую модель от Tenvis TR3818. Потом почитали ещё и решили, что можно обновиться и на более крутую прошиву от другой камеры.
После обновления камера приказала долго жить. Проверки моторов при включении не происходило, динамики не шуршали, светодиод не мигал. Горел только светодиод на LAN интерфейсе, да при включении уходил одинокий широковещательный пакетик.
После такого казуса остальные камеры были развешаны по местам, а «кирпич» переселился жить к нам. Время от времени происходили попытки его реанимировать. Камера была разобрана, найдены площадки, куда можно подпаяться для доступа через консоль.
(там под проводами маркировка 3.3V, GND, TX, RX)
(платы камеры в сборе)
Пришлось взять USB-TTL преобразователь.
(есть контакт)
Подключаемся к консоли через putty или HyperTerminal и видим следующее:
U-Boot 1.1.3 (Aug 26 2014 - 17:15:00)
Board: Ralink APSoC DRAM: 16 MB
relocate_code Pointer at: 80fb0000
spi_wait_nsec: 42
spi device id: c2 20 17 c2 20 (2017c220)
find flash: MX25L6405D
raspi_read: from:2b000 len:1000
.raspi_read: from:2b000 len:1000
.============================================
Ralink UBoot Version: 3.6.0.0
--------------------------------------------
ASIC 5350_MP (Port5None)
DRAM_CONF_FROM: Boot-Strapping
DRAM_TYPE: SDRAM
DRAM_SIZE: 128 Mbits
DRAM_WIDTH: 16 bits
DRAM_TOTAL_WIDTH: 16 bits
TOTAL_MEMORY_SIZE: 16 MBytes
Flash component: 8 MBytes NOR Flash
Date:Aug 26 2014 Time:17:15:00
============================================
icache: sets:256, ways:4, linesz:32 ,total:32768
dcache: sets:128, ways:4, linesz:32 ,total:16384
netboot_common, argc= 3
NetLoop,call eth_init !
Trying Eth0 (10/100-M)
Waitting for RX_DMA_BUSY status Start. done
Header Payload scatter function is Disable !!
ETH_STATE_ACTIVE!!
Using Eth0 (10/100-M) device
TFTP from server 51.204.51.204; our IP address is 192.168.1.5
Filename 'xx.img'.
TIMEOUT_COUNT=10,Load address: 0x80100000
Loading: ====================broadcast get file
T ====================broadcast get file
could not get file, cancel update
ret = 1
Please choose the operation:
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Entr boot command line interface.
7: Load Boot Loader code then write to Flash via Serial.
9: Load Boot Loader code then write to Flash via TFTP.
You choosed 3
0
Набравшись сил, мы совершили ещё один подход. Пришлось потратить нервы на то, чтобы понять, что именно в нашем случае RX преобразователя надо подключить к RX камеры, а TX к TX. Или маркировку неправильно нанесли или одно из двух. Камера начала реагировать на выбор пунктов меню, но это никак не объясняло природу магических чисел.
Тогда была скачана прошивка для Tenvis TR3818 и несколько прошивок для похожих камер, настроен tftp-сервер и выбран пункт номер 4, вход в командный интерфейс. Собственно, по ? нам выдаёт список возможных команд, где мы находим tftpboot — который загружает файл с tftp в память и bootm — который загружает приложение из памяти.
Порядок действий следующий:
- загружаем прошивку в камеру через tftpboot
- запускаем командой bootm
- Смотрим на результат, обдумываем.
И спасибо Вам! Если бы не желание порадовать хабр, возможно эта камера ещё долго бы стояла у нас в отделе.
Читайте также: