Pull to refresh

Собираем свою прошивку для HTC HD2

image Наверное нет такого коммуникатора, который бы мог похвастаться такими возможностями выбора ОС, как HTC HD2. В вашем распоряжении Ubuntu, Android, WindowsMobile 6.5, WindowsPhone 7 и в скором будущем MeGoo (ведутся работы по портированию).
После долгого общения с 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. Но помните, что все вы делаете на свой страх и риск.
Удачных экспериментов!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.