Что файл прошивки. Кастомный Android: делаем свою прошивку из стоковой, не копаясь в исходниках

21 февраля 2014 в 22:39

Распаковка, редактирование и упаковка прошивок видеорегистраторов и IP камер от Xiong Mai

  • Настройка Linux

Предыстория

Не так давно приобрёл на Aliexpress IP камеру (чип Hi3516 платформа 53H20L) и 16-канальный гибридный видеорегистратор (чип Hi3521 платформа MBD6508E). Оба выполнены на чипсете от HiSilicon, так что проблем с совместимостью между собой не испытывают.
Разумеется, не обошлось и без глюков. Первый, и самый главный - у камеры криво работал WiFi - нельзя было подключиться к сети, если ключ был задан в HEX виде, а также периодически возникала проблема со шлюзом по умолчанию.

Прошивка оказалась старая, ещё июньская. Раздобыл несколько свежих прошивок и попробовал. Некоторые оказались глючными, но одна заработала нормально.
Возникла другая проблема - изменился пароль по умолчанию для telnet подключения. Этого я не стерпел и стал искать способы вернуть его обратно.
Сразу предупрежу, что данный способ опробован на видеорегистраторах и камерах на чипах HiSilicon, но должен сработать и с другой платформой, так как китайцы широко используют загрузчик U-boot.

Распаковка

Инструкция по распаковке довольно подробно расписана в , но вот процесс упаковки нигде не описан, что и побудило меня написать этот пост.
Расписываю по шагам, чтобы ничего не упустить:
Ставим Linux, я выбрал ubuntu.
Проверяем тип файла прошивки:
root@xc:~/firmware# file General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin: Zip archive data, at least v2.0 to extract
Распаковываем:
root@xc:~/firmware# unzip General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin Archive: General_HZXM_IPC_HI3516C_53H20L_V4.02.R11.20131108_ALL.bin inflating: Install inflating: u-boot-all.bin.img inflating: web-x.cramfs.img inflating: custom-x.cramfs.img inflating: user-x.cramfs.img inflating: romfs-x.cramfs.img inflating: logo-x.cramfs.img inflating: InstallDesc
Смотрим содержимое Install:
{ "Commands" : [ "burn custom-x.cramfs.img custom", "burn romfs-x.cramfs.img romfs", "burn user-x.cramfs.img user", "burn logo-x.cramfs.img logo", "burn web-x.cramfs.img web" ], "Devices" : [ [ "53H20L", "1.00" ] ] }
InstallDesc:
"UpgradeCommand" : [ { "Command" : "Burn", "FileName" : "u-boot-all.bin.img" }, { "Command" : "Burn", "FileName" : "custom-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "romfs-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "user-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "web-x.cramfs.img" }, { "Command" : "Burn", "FileName" : "logo-x.cramfs.img" } ], "Hardware" : "53H20L", "Vendor" : "General" }
Слово u-boot-all наводит на мысль, что файлы img являются образами загрузчика U-boot, поэтому ставим соответствующий пакет:
root@xc:~/firmware# apt-get install u-boot-tools
Смотрим, что за файлы у нас были в архиве:
root@xc:~/firmware# file u-boot-all.bin.img u-boot-all.bin.img: u-boot legacy uImage, linux, Linux/ARM, Firmware Image (gzip), 524288 bytes, Fri Nov 8 05:15:49 2013, Load Address: 0x00000000, Entry Point: 0x00080000, Header CRC: 0x8A551AA8, Data CRC: 0x8290AD90 root@xc:~/firmware# file romfs-x.cramfs.img romfs-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, OS Kernel Image (gzip), 4100096 bytes, Fri Nov 8 05:16:04 2013, Load Address: 0x00080000, Entry Point: 0x00580000, Header CRC: 0xD16AC90F, Data CRC: 0x54CDD868 root@xc:~/firmware# file user-x.cramfs.img user-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, OS Kernel Image (gzip), 7602112 bytes, Fri Nov 8 05:16:02 2013, Load Address: 0x00580000, Entry Point: 0x00CC0000, Header CRC: 0x106C19AD, Data CRC: 0x6D54ADA7 root@xc:~/firmware# file web-x.cramfs.img web-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, Standalone Program (gzip), 1572800 bytes, Fri Nov 8 05:15:51 2013, Load Address: 0x00CC0000, Entry Point: 0x00E40000, Header CRC: 0x87611FE5, Data CRC: 0x6BD90EBD root@xc:~/firmware# file custom-x.cramfs.img custom-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, Standalone Program (gzip), 262080 bytes, Fri Nov 8 05:15:49 2013, Load Address: 0x00E40000, Entry Point: 0x00E80000, Header CRC: 0xF7C82692, Data CRC: 0x5A27F74C root@xc:~/firmware# file logo-x.cramfs.img logo-x.cramfs.img: u-boot legacy uImage, linux, Linux/ARM, Standalone Program (gzip), 262080 bytes, Fri Nov 8 05:15:47 2013, Load Address: 0x00E80000, Entry Point: 0x00EC0000, Header CRC: 0x4FE4A821, Data CRC: 0xF6671BD1
Прошу обратить внимание на два параметра Load Address и Entry Point. Я при первой сборке забыл их указать, они по умолчанию стали нулями, а это адрес загрузчика, который оказался затёрт после прошивки! Из-за этого я потратил лишний час на восстановление - пришлось снимать с улицы камеру, разбирать, и восстанавливать прошивку на программаторе. (Хотя камеру разбирал всё же не зря - добавил в кожух пакетик силикагеля, чтобы убрать возможную влагу из воздуха.)

Теперь небольшое пояснение: образ.img из данной прошивки является несколько изменённым образом файловой системы cramfs. Вот можно почитать поподробнее. Чтобы привести образ к нормальному виду, нужно отрезать 64 байта заголовка.
root@xc:~/firmware# dd bs=1 skip=64 if=logo-x.cramfs.img of=logo-x.cramfs 262080+0 записей получено 262080+0 записей отправлено скопировано 262080 байт (262 kB), 0,891322 c, 294 kB/c
Для остальных файлов команды аналогичные.
Смотрим, что получилось:
root@xc:~/firmware# file logo-x.cramfs logo-x.cramfs: Linux Compressed ROM File System data, little endian size 28672 version #2 sorted_dirs CRC 0xe29e6340, edition 0, 199 blocks, 2 files
Уже похоже на cramfs. Для работы с образами cramfs установим или обновим соответствующий пакет:
root@xc:~/firmware# apt-get install cramfsprogs
Распаковываем образы:
root@xc:~/firmware# cramfsck -x logo logo-x.cramfs root@xc:~/firmware# cramfsck -x user user.cramfs root@xc:~/firmware# cramfsck -x romfs romfs-x.cramfs root@xc:~/firmware# cramfsck -x web web-x.cramfs root@xc:~/firmware# cramfsck -x custom custom-x.cramfs
Каталоги я не создаю, они создадутся автоматически.
Загрузчик так не распаковать, это не образ cramfs, но его и не надо трогать.

Что внутри

Быстренько пробегусь по содержимому каждого файла внутри архива прошивки:
  • InstallDesc - описывает действия, которые нужно произвести с этими файлами при обновлении прошивки, install-скрипт.
  • logo-x.cramfs.img - картинка в формате 800x600 с логотипом изготовителя, которая появляется при загрузке аппарата.
  • romfs-x.cramfs.img - собственно сама операционная система linux под архитектуру ARM
  • u-boot-all.bin.img - загрузчик U-boot
  • custom-x.cramfs.img - содержит наименование платформы и дополнительные настройки
  • user-x.cramfs.img - прикладной софт, в том числе Sofia - сама программа видеорегистратора
  • web-x.cramfs.img - картинки веб-интерфейса, web.cab - плагин для Internet Explorer с локализацией, логотипы производителя.
Нас интересует romfs-x.cramfs.img, так как именно там присутствует файл passwd, в котором хранится пароль. Вот его содержимое, желающие могут попробовать сбрутить:
root:$1$RYIwEiRA$d5iRRVQ5ZeRTrJwGjRy.B0:0:0:root:/:/bin/sh
Я же просто сгенерил новый хеш на сайте и поменял его в файле.

Собираем обратно

После сделанных изменений нужно всё запаковать обратно:
root@xc:~/firmware# mkcramfs romfs romfs-x.cramfs Directory data: 3624 bytes Everything: 4004 kilobytes Super block: 76 bytes CRC: 28c62b9b
Помните, я заострял внимание на значениях Load Address и Entry Point? Самое время о них вспомнить и добавить в команду.
Создаём образ U-boot:
root@xc:~/firmware# mkimage -A arm -O linux -T ramdisk -n "linux" -e 0x00580000 -a 0x00080000 -d romfs-x.cramfs romfs-x.cramfs.img Image Name: linux Created: Fri Feb 21 14:27:38 2014 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 4100096 Bytes = 4004.00 kB = 3.91 MB Load Address: 00080000 Entry Point: 00580000
Кстати, чтобы обновить один модуль не обязательно прошивать всю прошивку, достаточно положить только нужный, и отредактировать файлы Install и InstallDesc, оставив только нужные строчки.
Складываем полученные файлы в отдельный каталог, пусть это будет new. Даём команду:
root@xc:~/new# zip -D -X firmware.bin * adding: Install (deflated 22%) adding: InstallDesc (deflated 30%) adding: romfs-x.cramfs.img (deflated 0%)
Всё, прошивка готова. Осталось только прошить её через web-интерфейс через пункт update

Предостережение

Выполняя рекомендации из этой статьи, вы делаете на ваш страх и риск. Автор не несет ответственности за ваши действия. Допустив ошибку при модификации прошивки вы легко можете получить кирпич, который можно будет восстановить только на программаторе. Поэтому, если не уверены в своих действиях, не делайте этого.

Существует несколько способов того, чем открыть bin файл, и в данном материале эти программы представлены в формате ТОП 5.

Бывают самые разнообразные типы таких файлов, имеющие в себе разное содержимое.

Например, в системных папках компьютера могут найтись десятки документов с таким разрешением.

Особенности

Что же это за формат. Говоря коротко, такое сочетание букв – это начало слова «binary». Это говорит о том, что все данные в таком файле сохранены в двоичном формате. И это все, то есть такой тип документа совершенно ничего не говорит о его содержимом, ведь оно может быть самым разным.

Такие документы не несут никакого самостоятельного значения. В общем случае – это дополнительный программный инструмент, необходимый для выполнения той или иной команды на устройстве. Эти материалы не рассчитаны на какие-либо изменения и даже просмотр (по крайней мере, рядовым пользователем, а не разработчиком программы).

На современных компьютерах, чаще всего, файлы такого формата относятся к одному из следующих типов:

  • Образ DVD-диска или CD-диска. В этом случае он хранится в директории рядом с документом формата cue. В комплексе они представляют собой образ диска, напоминающий iso;
  • Документ, содержащий данные об архиве игры. Такой находится в корневой директории диска с игрой и отвечает за порядок воспроизведения последовательностей;
  • Ресурсные данные от компьютера в сжатом виде. Это наиболее значимый тип документа, находящийся в одной из корневых директорий жестокого диска. Его удаление или изменение может привести к сбоям в работе системы;
  • Исполняемые файлы систем типа Юникс;
  • Данные прошивки роутера;
  • Игровые данные для приставок Сега, Нинтендо и других.

Так как типы данных с этим расширением очень разнообразны, то и открывать их нужно различными методами.

<Рис.1 Файл>

Стоит ли открывать?

В большинстве случаев, открывать такие файлы бессмысленно или даже опасно. Они не несут в себе специфической информации (за исключением случая с образами видеофайлов), а только вспомогательные данные в форме кодов и ключей. Это содержимое зависит от того, для чего предназначался документ, в какой программе и он был создан и многого другого.

Потому, если вы не являетесь разработчиком, то вносить изменения в такие файлы нельзя. Это приведет к полному нарушению функционирования программы, для которой он был создан, так как нарушить порядок выполнения в ней операций. Также, данные содержащиеся в bin, ничего не скажут рядовому пользователю об особенностях программы или игры.

Как открыть файл?

Как было сказано выше, это зависит от того, о каком типе файлов идет речь. Онлайн-ресурсов для этого в настоящее время не разработано. Кроме того, в Windows нет базовых утилит для открытия таких документов, а значит, для открытия их придется скачивать и устанавливать дополнительный софт.

5 место. Блокнот

Как не странно, но открыть такой документ иногда помогает простой Блокнот. Он является, по сути, универсальным способом открыть практически любые данные в текстовом формате. Для того чтобы проделать это, следуйте алгоритму:

  • Кликните по файлу правой кнопкой мыши;
  • В выпавшем меню нажмите на строчку «Открыть с помощью»;
  • В появившемся списке программ для открытия файла укажите Блокнот;
  • После этого файл откроется, представляя систему кодов, ключей и последовательностей в текстовом формате;
  • Часто результат выглядит как кодировка – множество иероглифов и непонятных символов, но нередко в этой информации можно найти и нужную, представленную цифрами и латинскими буквами;
  • Если вы знаете, какие изменения нужно внести, то внесите их и закройте Блокнот с сохранением файла (однако, перед внесением изменений сохранить изначальную копию);
  • Если вы не уверены в том, что нужно менять, лучше ничего не трогать.

Большим преимуществом такого способа является то, что не требуется скачивать никаких дополнительных программ. Ведь Блокнот есть изначально на каждом компьютере.

Недостаток же способа в том, что он работает далеко не всегда и не со всеми типами bin. Он бывает эффективен лишь примерно в 20% случаев.

<Рис. 2 Блокнот>

4 место. Nero

Вообще, подойдет любая программа, связанная с записью дисков и работой с образами. В этом топе мы указываем именно Nero, так как в настоящее время она является наиболее популярной в данном сегменте. Идеально подходит в случае, когда bin является видеофайлом.

Как же определить, что bin – это образ DVD-диска? Руководствоваться здесь нужно его размером. Большие и очень большие по объему файлы, чаще всего, являются файлами образов.

Nero – хорошая, функциональная программа, которая реализуется бесплатно. Она работает со множеством «сложных» форматов данных. Софт постоянно обновляется, выходят новые версии, что позволяет ему более или менее стабильно работать с разными форматами.

Чтобы открыть файл, проделайте следующее:

  • Запустите программу;
  • В верхнем левом углу в шапке меню найдите кнопку «Запись данных»;
  • Укажите файл, который хотите открыть;
  • Или просто перетяните его мышью в рабочее пространство программы;
  • После этого информация, имеющаяся в файле, отобразится автоматически;
  • Далее можно делать то, что необходимо, например, записать образ на диск.

Тем не менее, данный способ все равно не является универсальным. Программа иногда дает сбои и не может открывать некоторые типы bin.

<Рис. 3 Nero>

3 место. Daemon Tools

Этот больше всего подходит для игровых bin. То есть, если обнаружились такие данные в диске с игрой или в папке с ней, то открывать их лучше через этот софт. Программа имеет бесплатный пробный период с практически неограниченным функционалом и стабильно работает.

Для того чтобы открыть bin, проделайте следующий алгоритм действий:

  • Скачайте программу Daemon Tools версии, подходящей для вашего компьютера;
  • Установите программу, следуя указаниям мастера установки;
  • Запустите программу;
  • В левом верхнем углу главного окна программы, в шапке меню, найдите кнопку Файл;
  • Нажмите на нее и выбирайте Открыть в развернувшемся меню;
  • После нажатия кнопки Открыть, запустится стандартный Проводник Windows;
  • Через него укажите путь к файлу, который вы хотите открыть;
  • После этого в главном окне программы отобразится содержимое файла.

При необходимости, вы можете не только ознакомиться с ним, но и внести изменения.

Программа работает гораздо стабильнее всех, перечисленных выше. Она поддерживает bin многих типов и позволяет корректно отображать их содержимое.

<Рис. 4 Daemon Tools>

2 место.Ultra ISO

Отличается от предыдущих программ топа наиболее стабильной работой. Кроме того, способна отображать содержимое большего числа типов bin. Благодаря постоянным обновлениям, работает стабильно и не дает сбоев почти никогда.

Кроме того, она не требовательна к ресурсам компьютера, не создает значительной нагрузки на «железо». Распространяется бесплатно и имеется во многих видах, для разных версий программного обеспечения компьютера.

Принцип работы в этой программе похож на все остальные:

  • Скачайте и установите данный софт, следуя указаниям Мастера установки;
  • Запустите программу и в левом верхнем углу главного окна найдите кнопку Файл;
  • Нажмите на нее и в выпавшем меню укажите Открыть;
  • В открывшемся Проводнике Виндовс укажите путь до файла, который вы хотите открыть;
  • Как и в программах, описанных выше, на экране отобразится содержимое рассматриваемого bin.

Хотя принцип работы такой программы не отличается от предыдущих, ее скачать предпочтительнее. Так как она работает почти с любыми типами bin.

<Рис. 5 UltraISO>

1 место. Оригинальный софт

Под оригинальным софтом в данном случае понимается та программа, для которой был разработан файл. Если речь идет о небольшом bin, появившемся после подключения к ПК телефона или фотоаппарата, то речь идет о файле драйвера.

В этом случае открыть его можно с помощью программного обеспечения, идущего в комплекте с подключенным устройством.

<Рис. 6 Оригинальный софт>

Если вы не знаете, чем открыть bin файл, то шансов узнать это не так уж и много. Если в файле bin при просмотре текстовым редактором не удалось прочитать название программы, для которой он предназначен, то придется перепробовать их все. Корректно открыть bin файл может только программа, для которой он предназначен. Файл bin формата может быть просто файлом с любыми данными, прошивкой BIOS, архивом игры или даже образом диска.

Начнем с того, что тебе нужен Linux. В Windows ты сможешь только разобрать прошивку, но собрать обратно уже не получится по чисто техническим причинам. Теперь о прошивке. Обычно они распространяются в виде ZIP-архивов, прошиваемых через кастомные рекавери. Именно один из них нам и понадобится для опытов. Начинать путь ромодела я рекомендую с какой-нибудь максимально приближенной к AOSP кастомной прошивки, потому что в ней зачастую проще разобраться, чем в стоке.

  1. Распаковываем архив с прошивкой в любую папку.
  2. Качаем скрипт по ссылке и разархивируем в любую папку.
  3. Запускаем файл ext (если будет ругаться на отсутствие Java, просто пропусти, нажав y ; Java нужна только для запаковки).
  4. Теперь выбираем распаковку, нажав кнопку 1, а затем Enter.
  5. Новая папка с именем extract_* появится рядом с файлом ext и папкой tools . Копируем в нее файлы system.new.dat и system.transfer.list .
  6. После копирования файлов нажимаем Enter и ждем. Через некоторое время нужно будет опять нажать Enter, ввести пароль администратора и еще раз тапнуть Enter.
  7. Готово. Содержимое system в папке extract_*/output .

Ручной способ

Распаковываем архив с прошивкой в любую папку (например, в rom):

$ mkdir ~/rom $ unzip путь_до_архива -d ~/rom/

Скачиваем нужные нам инструменты в эту папку:

$ cd ~/rom $ wget https://github.com/xpirt/sdat2img/raw/master/sdat2img.py

Запускаем скрипт:

$ chmod +x sdat2img.py $ ./sdat2img.py system.transfer.list system.new.dat system.img

Он преобразует файл system.new.dat в raw-образ с именем system.img . Монтируем образ к подпапке mnt:

$ mkdir mnt $ sudo mount -t ext4 -o loop system.img ~/rom/mnt

Структура каталогов 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, начнем вносить изменения.

Удаляем и добавляем приложения

Все предустановленные программы можно найти в двух папках:

  • /system/app/;
  • /system/priv-app/.

Друг от друга они отличаются привилегиями доступа. Если программы из 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 p 1 0 part0 p 0 0 part1

Назначение этих строк интуитивно понятно: 1920 × 1080 - разрешение картинки, 60 - число кадров в секунду. Part0 и part1 указывают на папки, из которых будет воспроизводиться анимация, и последовательность воспроизведения. Вообще, может быть как одна часть, так и несколько (три и больше).

Изображения, находящиеся в папках part, пронумерованы пятью цифрами в порядке воспроизведения: 00000.png , 00001.png , 00002.png … Эти изображения можно поменять на свои, тем самым создав оригинальную анимацию. А можно просто удалить файл bootanimation.zip . Тогда девайс будет показывать анимацию из стандартного Android. Или воспользоваться уже готовой коллекцией анимаций на 4PDA .

Изменяем звуковое оформление

Фактически все звуки, которые воспроизводит система, хранятся в папке /system/media/audio . Внутри нее ты найдешь следующие папки:

  • alarms - мелодии будильника;
  • notifications - звуки уведомлений;
  • ringtones - мелодии звонка;
  • ui - системные звуки, например низкий заряд батареи, фокусировка камеры, выбор элементов интерфейса.

В alarms, notifications, ringtones можно накидать сколько угодно любых мелодий. Взять их можно, например, здесь:

  • стандартные мелодии из разных телефонов и смартфонов Nokia ;

И маленький лайфхак: удаление файлов из папки ui приведет не к сбоям и ошибкам, а к исчезновению системных звуков. Поэтому ты можешь легко отключить звук создания снимка с камеры, снятия скриншота, просто потерев содержащие эти звуки файлы (их имена интуитивно понятны).

Добавляем шрифты

Шрифты хранятся в fonts . Найти архивы с файлами шрифтов можно на 4PDA и XDA . Для установки достаточно скопировать с заменой ttf-файлы из архива в папку fonts .

Меняем системные настройки (build.prop)

В образе system есть интересный файлик build.prop , содержащий множество полезной информации о железе устройства и настройках, устанавливаемых по умолчанию, для различных стоковых приложений. Справедливости ради замечу, что это не всегда так. Например, в Gigaset ME и ME Pro build.prop разделен на две части. В одной части содержатся настройки для 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 в прошивку выполняется так:

  1. Распаковываем ZIP-архив GApps с помощью любого архиватора.
  2. Переходим в папку Core.
  3. Видим множество архивов с расширением.tar.lz . Извлекаем с помощью lzip.
  4. После распаковки копируем файлы из папок в соответствующие папки в system. Что куда кидать, нетрудно догадаться по структуре каталогов в архиве. Например, configupdater (со скриншота) нужно кидать в папку priv-app .
  5. Переходим в папку GApps (находится рядом с Core) и проделываем пункты 3 и 4 для файлов в ней.
  6. Все, мы интегрировали GApps в нашу прошивку!

Свободное место

Необходимо понимать, что место для установки прошивок ограниченно. Нельзя установить прошивку, размер которой перевешивает размер раздела system устройства. Посмотреть его значение можно, используя :

$ adb shell df /system

Второй вариант: поставить на устройство терминал и набрать команду

$ df /system

Размер раздела в байтах можно узнать, установив на смартфон BusyBox и выполнив в терминале команду

$ busybox df -B 1 /system

Или то же самое с помощью ADB:

$ adb shell busybox df -B 1 /system

Место, занимаемое прошивкой, будет приблизительно равно размеру 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 . Скачиваем нужные нам инструменты:

$ wget https://github.com/xpirt/img2sdat/raw/master/img2sdat.py $ wget https://github.com/xpirt/img2sdat/raw/master/blockimgdiff.py $ wget https://github.com/xpirt/img2sdat/raw/master/common.py $ wget https://github.com/xpirt/img2sdat/raw/master/rangelib.py $ wget https://github.com/xpirt/img2sdat/raw/master/sparse_img.py $ sudo apt-get install android-tools-fsutils

Преобразовываем нашу папку обратно в RAW-образ. Назовем его system_new.img:

$ sudo make_ext4fs -T 0 -S file_contexts -l 1073741824 -a system system_new.img output/

1073741824 меняем на размер раздела system в байтах. Желательно даже сделать его чуть меньше. Делаем из RAW-образа sparse-образ:

$ img2simg system_new.img system_snew.img

Преобразуем наш образ в system.transfer.list и system.new.dat , которые и нужно кидать в архив с прошивкой, но сначала удалим старые файлы:

$ rm -rf system.transfer.list $ rm -rf system.new.dat $ rm -rf system.patch.dat $ chmod +x img2sdat.py $ ./img2sdat.py system_snew.img

Отделим файлы прошивки от лишней шелухи (файлов, которые мы загружали для работы. Для этого удобно пользоваться архивом с прошивкой). Удалили? Теперь нужно запаковать прошивку в ZIP-архив (любым архиватором).

Осталось подписать архив. Сделать это можно как на самом Android с помощью ZipSigner , так и на ПК (потребуется установленная Java):

$ wget https://github.com/appium/sign/raw/master/dist/sign.jar $ java -jar файл.zip

Подводные камни

Во время сборки system.new.dat ты можешь столкнуться с несколькими проблемами, вызванными постоянными изменениями в механизмах формирования прошивок Android. Описанный выше способ должен хорошо сработать в случае основанной на Android 5.1 прошивки, в более новых могут возникнуть сложности, так что потребуется использовать другие версии инструментов сборки. К сожалению, мы не можем описать все нюансы сборки, поэтому, возможно, придется погуглить.

Установка

Для установки кастомной прошивки необходим кастомный рекавери TWRP, позволяющий устанавливать неподписанные или подписанные тестовым ключом прошивки (именно такую мы создали). В журнале мы неоднократно описывали процесс его установки, да и в ветках форума, посвященных твоему устройству, обычно есть достаточно информации для того, чтобы это сделать.

TWRP

Выводы

Эта статья описывает лишь верхушку огромного айсберга под названием «модификация прошивок». «Серьезные» прошивки не только дополняют ядро и саму прошивку со стоковыми приложениями множеством функций (которые зачастую вырваны из других ядер и прошивок), организовывая или даже меняя принципы их взаимодействия, но и вполне могут кардинально менять принципы работы ОС. Правда, такая поделка - это уже не Android, а отдельная ОС, даже если Play-сервисы получится туда поставить (кстати, такие действия, мягко говоря, не поощряются Google). Ну и не забываем: все оболочки от производителей - TouchWiz, ZenUI, HTC Sense и так далее - всего лишь обычные кастомы, максимально привязанные к железу устройства и друг к другу.

Все прошивки для планшетов на процессоре Allwinner имеют один и тот же формат img (IMAGEWTY).

После долгих поисков я все-таки нашел программу, которая позволяет разобрать и собрать прошивку для планшетов на базе Allwinner. Называется она unPacker

Перейдем непосредственно к разборке файла прошивки.

Разборка IMG файла

Для разборки потребуется:

  • Файл самой прошивки
  • Программа unPacker, которую можно скачать (Для Allwinner a31s можно использовать imgRePacker)

Скачиваем архив и распаковываем. Запускаем программу unPacker.exe

Перетаскиваем в это окно наш файл и ждем распаковки.

После окончания распаковки появится новая папка название «прошивки.img.dump»

В папке out есть файл system.fex -это файл с системными файлами(папка system) . Он то нам и нужен.

Редактирование файла system.fex

Для редактирования этого файла нужна nix система и утилита для конвертации, которую можно скачать

Создаем в домашней директории папку в которой будем редактировать нашу прошивку. Назовем ее например NEW. Теперь распаковываем файлы из архива ext4_utils.zip в папку NEW. Запускаем терминал и набираем

Программа скомпилируется и мы получим инструмент для редактирования Sim2img. Теперь кладем в папку NEW наш файл system.fex и переименовываем его в sytsem.img

Вводим в терминале

./simg2img system.img output.img

Теперь у нас есть файл output.img . Теперь создаем папку например с названием sys

И монтируем туда наш файл output

sudo mount output.img sys

Теперь в папке sys находятся файлы, которые можно редактировать. Например можно внести изменения в файл build.prop, которые улучшат работу системы.

После редактирования начинаем сборку

./mkuserimg.sh -s sys/ ./factoryfs_custom.img ext4 ./temp 512M

Полученный файл factoryfs_custom переименовываем в system.fex.iso

примечание: можно аналогично редактировать и другие файлы образов (boot и bootloader)

Сборка

Теперь что бы собрать отредактированные файлы в необходимый для прошивки формат, нужно файл system.fex.iso поместить с заменой в папку (на Windows) _iso и перетащить папку

Необходимо прошить Android c помощью FastBoot, но не знаете как? В данной статье дается детальная инструкция по использованию утилиты FastBoot и как ей пользоваться чтобы прошить Android девайс.

Данная инструкция полностью расскажет как пользоваться FastBoot! Если же вы не знаете как устанавливать архивные обновления то вам необходима статья - Clockwordmod - что это такое. Инструкция по CWM recovery с картинками

Скачивание и установка FastBoot

Прежде прошить Android c помощью FastBoot, необходимо его скачать и установить на необходимый компьютер.

1. Скачать утилиту FastBoot можно с официальной программой Android SDK (большой вес)

почему ADB RUN лучше

Запуск

Если скачали Отдельно Fastboot

После того как Вы скачали и установили FastBoot, откройте на ПК программу «Командная строка »

и введите команды для перехода в папку с утилитой Fastboot (если установили отдельно FastBoot )

cd /
cd adb

Если скачали ADB RUN

Если ваш выбор пал на программу ADB RUN, то запустите ее и выберите в меню Manual -> ADB

Файлы которые необходимо прошить должны находится в одной папке с утилитой Fastboot

Инструкция по командам как прошить Android c помощью FastBoot

Очень важно писать команды и файлы прошивок так как они указаны!

Если у вас команда указана

fastboot flash cache NazvaniAFiLe.img

то нужно писать именно так, но ни как иначе. Другими словами важен регистр букв иначе вы получите ошибку cannot load ‘image’ - нет такого файла.

Команды перезагрузки в режим прошивки (bootloader)

fastboot reboot-bootloader

Команда «видит» ли ПК ваш Android

Возьмите в привычку проверять перед тем как что-то делать в Fastboot если соединение между компьютером и Android:

Проверка «видит ли» ПК ваш Android

fastboot devices

Данную команду выполнять когда устройство уже в режиме прошивке (bootloader)

Команды разблокировки и блокировки загрузчика Nexus

Разлочить bootloader для Nexus

fastboot oem unlock

Залочить bootloader для Nexus

fastboot oem lock

Команда узнать версию bootloader

Покажет установленую на Android номер версии бутлоадер

fastboot getvar version-bootloader

Команды форматирования раздела

Перед тем как прошить какой либо раздел в Android, вначале его необходимо отформатировать для того чтобы не возникло проблем в работе

fastboot erase Imya_razdela - стереть раздел: boot, radio, recovery, system, userdata и другие

Стирает раздел Кеш (Cache)

fastboot erase cache

Стирает раздел Дата (Data)

fastboot erase userdata

Стирает раздел Систем (System)

fastboot erase system

Стирает раздел Recovery

fastboot erase recovery

Команды для прошивки раздела

После того как выполнили форматирование раздела или разделов, можете приступить к прошивке

fastboot flash Imya_razdela imya_file.img - прошивка выбранного раздела: boot, radio, recovery, system, userdata и другие

Прошить раздел системы (System)

fastboot flash system imya.img

Прошить раздел кеш (Cache)

fastboot flash cache imya.img

Прошить раздел дата (Data)

fastboot flash userdata imya.img

Прошить раздел Recovery

fastboot flash recovery imya.img

Установка анимации включения (прошивка раздела с анимацией)

fastboot flash splash1 splash.img

Прошить все разделы (boot, recovery и system)

fastboot flashall

Вместо imya.img - необходимо прописывать имя файла которые вы собираетесь прошить

Команда для установки update.zip

Прошивает на Android архив-обновление в формате update.zip или архив ZIP с IMG образами различных разделов

fastboot update имя_файла.zip

Для устройств Sony

Проверка подключения устройства Sony, если ответ 0.3 устройство, то тогда подключено

fastboot.exe -i 0x0fce getvar version

Разблокировка bootloader

fastboot.exe -i 0x0fce oem unlock 0xПолученый_Ключ

Более детальная информация по разблокировке Bootloader Sony - Как разблокировать Bootloader Sony

Ошибка Waiting for Device

Если у вас долгое время в командном окне горит надпись waiting for device - значит:

  • Не установлен или некорректно установлен драйвер - переустановить или установить
  • Устройство Android не в режиме Bootloader - перевести
  • Некорректное подключение к USB порту - использовать задние порты USB 2.0 компьютера, не использовать USB хабы

Интернет