
После долгого общения с Windows Mobile на HD2, а до этого еще и на Eten X500, захотелось чего-то новенького. И вот, ознакомившись с мануалами, мой кирпичик получил вторую жизнь.
Вдоволь наигравшись со всевозможными сборками Android, я так и не нашел золотой середины. В разных прошивках были свои минусы и плюсы. В основном все минусы сводились к невозможности обновить ядро, добавить поддержку расширенной батареи или удалить “ненужный” софт из-за использования сжатия. Все это и заставило меня разобраться в Android прошивкостроении.
Причины проблем
После попытки обновления ядра на разных прошивках, возникали трудности с работой EDGE/GPRS. Выяснить почему это происходит, удалось – не подгружались модули к ядру, отвечающие за GPRS/EDGE, TUN, FUSE, CIFS и nls_UTF8.
Т.к. я пользуюсь EU HD2, который несет на своем борту всего-то 512мб ПЗУ, приходится бороться за каждый мегабайт полезного места, удалять не используемые приложения и идти на разные ухищрения. Например: добавлять EXT2-4 раздел на флеш и монтировать его при старте системы и переносить туда приложения и кеш. Сжимать приложения и фреймворки (использовать squashed fs). Начнем по порядку.
Немного теории
Android прошивки для HD2 бывают двух видов:
1)Под CWM (zip)
2)Под DAF (img)
Подробнее остановлюсь на втором типе. Основное отличие этих двух вариантов в том, что CWM шьется с карты памяти, а DAF прошиваются с PC. Прошивка под DAF обычно состоит из двух файлов system.img и boot.img. В boot.img содержится ядро и скрипты инициализации. System.img содержит приложения (.apk), библиотеки (.so), модули ядра ( .ko) и пр. System.img и boot.img представляют из себя образы с файловой системой yaffs2, разработчик которой имеет неплохое чувство юмора. Но как говорится, тайна охраняет себя, постичь её можно только в духе и практике работы.
Дорога из 11 шагов
Все дальнейшие манипуляции проводил под Linux Ubuntu.
Утилиты и скрипты можно скачать здесь.
1) Подготовка инструментов.
Распаковываем архив Utils.zip в домашний каталог и выполняем следующие команды в терминале:
sudo mv Utils/mkyaffs2image /bin
sudo mv Utils/unyaffs /bin
sudo apt-get install squashfs-tools-4.0
mkdir Kitchen
cd Kitchen
2) Скачиваем прошивку – донор. В качестве примера будет использоваться прошивка prj 0.3.2. Ядро собирал для себя, с поддержкой расширенной батареи giv_0.30E2-4UCEB (на основе git + patch от arne182).
3) Копируем из архива прошивки файлы system.img и boot.img в Kitchen.
4) Запускаем скрипты распаковки
sh boot_extract
sh system_extract
По окончанию работы скриптов в каталоге Kitchen появится 2 папки system и boot.
Разберемся, что же находится в boot/init/.
logo.rle – splash screen появляющийся при начальной загрузке(после Malgdr).
init.rc и init.htcleo.rc – инициализация глобального окружения, сервисов, устройств, монтирование файловой системы, создание структуры каталогов, а также еще огромное количество интересных вещей.
bootcomplete.htcleo.rc – создание кеша и любые другие операции необходимые выполнять по окончании загрузки.
default.prop – настройки(debug, location и др)
backupdata.sh – название говорит за себя.
6) Распаковываем giv_0.30E2-4UCBE.zip и копируем zImage в boot/kernel, а модули system/lib/modules (соглашаемся на замену).
7) Нам понадобится возможность автозапуска своих скриптов, если мы хотим добавить возможность подгрузки модулей к ядру.
Открываем init.rc ищем
class_start default
, и строчкой выше добавляем start sysinit
и затем в самый низ service sysinit /system/bin/logwrapper /system/xbin/busybox run-parts /system/etc/init.d
disabled
oneshot
Переходим system/ect/ и создаем каталог init.d.
Создаем файл 00start с таким содержанием:
#!/system/bin/sh
# Print startup info
echo "Welcome to Android `getprop ro.build.version.release` / `getprop ro.modversion`";
echo "It’s
%habrauser% megarom ver 0.5“
Следующий скрипт 01modules:
#!/system/bin/sh
# Load MODULES
sleep 1
insmod /system/lib/modules/msm_rmnet.ko
insmod /system/lib/modules/tun.ko
insmod /system/lib/modules/cifs.ko
insmod /system/lib/modules/nls_utf8.ko
insmod /system/lib/modules/fuse.ko
echo "+++ RMNET / TUN / CIFS activated +++";
На этом этапе мы уже имеем разобранную прошивку, с возможностью автозапуска скриптов, и загрузки модулей ядра. Осталось избавиться от лишнего веса.
8) Переходим в каталог system.
Подкаталог app – содержит приложения (.apk и odex).
В prj 0.3.2 и некоторых других прошивках, app и framework для экономии места сжаты и монтируются при старте ОС. Поэтому для некоторых прошивок нужно дополнительная распаковка.
9) Переходим в терминал и выполняем:
cd system
unsquashfs app.sqfs
rm app.sqfs
10) Переходим в каталог squashfs-root. Здесь находятся приложения нужные и ненужные нам. Для себя я удалил (удалять обязательно apk и odex с одинаковыми названиями):
Stock, Stockwidget– виджет акции.
VoiceSearch – голосовой поиск,
TtsService – текст в голос,
Tweeter, Facebook, FriendStreem – работа с соц. сетями,
Teeter – игра.
Описание некоторых пакетов и последствия их удаления.
11) Теперь переходим к сборке. Запаковываем приложения и создаем образ прошивки
mksquashfs squashfs-root/ app.sqfs
rm –rf squashfs-root/
cd ..
sudo sh create_system_img.sh
sudo sh create_boot.sh
Все, сборка rom закончена, теперь можно попробовать прошить. По идее даже если сборка оказалась не удачной вы без проблем сможете откатиться на рабочую сборку, т.к. прошивка не затрагивает область bootloader и Malgdr. Но помните, что все вы делаете на свой страх и риск.
Удачных экспериментов!