Как собрать прошивку Android из исходников. Компилим Cyanogenmod 9.

Для начала определимся, что для этого нужно, дабы не вводить в заблуждение читателей:

  1. Нужен ПК с 64-битной Ubuntu (ну или любой другой Linux ОС). Изначально когда я увидел подобное заявление в сети, мне показалось, что это все … Почитав же немного форумов, оказалось, что для сборки 4-й версии Androida (и любой другой модификации данной версии, например, CM9) необходима установка дополнительных библиотек, которые существуют только для 64-битных систем.
  2. Нужен высокоскоростной интернет. Для сборки прошивки из исходников — необходимы сами исходники, а это порядка 10 ГБайт информации (и это в сжатом виде, после распаковки 12-14 ГБайт места на ПК).
  3. Много терпения и самое главное ЖЕЛАНИЕ! Лично у меня рабочую прошивку получилось собрать через месяц после первой попытки. Идем далее.



Инструкция по сборке прошивки Android Cyanogenmod 9 из исходников.
1. Логинимся под Ubuntu, открываем терминал и устанавливаем необходимы библиотеки:
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev:i386 g++-multilib mingw32 openjdk-6-jdk pngcrush schedtool tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
2. Создаем необходимые директории на ПК:
mkdir -p ~/bin
 - название не менять (!)

mkdir -p ~/android/system
 - тут можно создать любую директорию, лично для вашего удобства, например, не system, а cyanogenmod

3. Устанавливаем репозиторий, для загрузки исходников прошивки: 
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo chmod a+x ~/bin/repo

ВАЖНО! Для вступления изменений в силу перезагружаем ПК.

4. Загружаем исходники cyanogenmod 9:
cd ~/android/system/
 - переходим в ранее созданную папку для исходников

repo init -u git://github.com/CyanogenMod/android.git -b ics
repo sync -j16
- загружаем исходники

Набираемся терпения, загрузка исходников дело длительное. Лично у меня при наличии 80 Мбит/с на «внешний мир» загрузка исходников длится порядка 4 часов.
ВАЖНО! Если во время загрузки произошел обрыв сессии, не расстраиваемся и снова выполняем команду загрузки — загрузка продолжится с места обрыва:
repo sync -j16

5. Далее возможны два варианта развития наших действий:
а) девайс для которого мы собираем прошивку официально поддерживается cyanogenmod-м (в качестве примера будем собирать прошивку для Samsung Galaxy S II);
б) девайc для которого мы собираем прошивку официально НЕ поддерживается cyanogenmod-м (в качестве примера будем собирать прошивку для Huawei U8100/8110/8120).

а.1) Копируем проприетарные файлы. Дело в том, что хотя мы и собираем прошивку «с нуля», но есть библиотеки, которые нельзя собрать из исходников, по причине того, что поставщик данного «железа» не предоставил их (=)). Для этого подключаем рабочий девайс Samsung Galaxy S II с последней официальной прошивкой «на борту» к ПК при помощи usb-шнура и выполняем в терминале:
cd ~/android/system/device/samsung/galaxys2/ ./extract-files.sh

а.2) Загружаем RomManager. Часть ПО, используемая в прошивках СМ, не собирается из исходников, а загружается в уже собранном виде. Именно таким ПО является RomManager и Terminal Emulator. Для загрузки данного ПО:
 ~/android/system/vendor/cm/get-prebuilts

а.3) Собираем прошивку. Финальный этап. Для этого в терминале выполняем:
. build/envsetup.sh && brunch galaxys2
- вместо galaxys2 используется другое название, в случае сборки прошивки для другого девайса.

б.1) Загружаем «дерево устройства» для нашего девайса. «Дерево устройства» это набор конфигурационных файлов с настройками для определенного девайса. Если девайс официально поддерживается, то данное «дерево устройства» уже есть в ранее загруженных нами исходниках. Если нет, то его необходимо загрузить из стороннего источника. Самый оптимальный вариант, это GitHub — самый большой веб-сервис для хостинга проектов и их совместной разработки. В данном примере, поскольку мы создаем прошивку для huawei u81хх, то качаем дерево устройства тут. Полученный архив распаковываем в ранее скачанные нами исходники, по пути:
~android/system/device/huawei/u8120
(папку huawei создаем самостоятельно, в нее распаковываем наше «дерево устройства» и переименовываем в u8120).

б.2) Кроме «дерева устройства» нам необходимы исходники ядра для прошивки (если же в «дереве устройства» уже есть ядро, данный пункт можно пропустить). Детально о сборке ядра, можно прочитать в статье «Как собрать ядро Android«. Кроме того, готовые исходники ядра можно поискать на GitHub-е. Далее, смотрим в файле BoardConfig.mk «дерева файлов» строчку # Kernel (ну или что-то подобное со словом Kernel). Опция TARGET_KERNEL_SOURCE чуть ниже строки # Kernel указывает на путь к исходникам ядра. Путь kernel/u8120_kernel указывает на то, что исходники ядра лежат в папке kernel/u8120_kernel, ранее загруженных исходников CM9. Кроме исходников ядра, нам нужен config файл для сборки ядра. config файл должен располагаться по пути arch/arm/config исходников ядра, и называться как указано в строке TARGET_KERNEL_CONFIG файла BoardConfig.mk «дерева файлов».

б.3) Копируем проприетарные файлы. О них более детально я рассказывал выше. Подключаем девайc Huawei u8120 к ПК при помощи usb-шнура и выполняем в терминале
cd ~/android/system/device/huawei/u8120/ ./extract-files.sh

Кроме того, возможен вариант извлечения проприетарных файлов из архива прошивки, а не с рабочего девайса. Это возможно при помощи скрипта unzip-files.sh (если таковой имеется в «дереве файлов»), но об этом подробнее в случае необходимости (=)).

б.4) Загружаем готовое ПО для прошивки (RomManager и Terminal Emulator, подробнее в п. а.2). Выполняем в терминале:
 ~/android/system/vendor/cm/get-prebuilts

б.5) Собираем прошивку:
 . build/envsetup.sh && brunch u8120 
 - u8120 — название папки «дерева файлов».

6. В лучшем случае, сборка прошивки по времени занимает порядка 4-6 часов, в зависимости от ПК. Лично на моем 2-х ядернике, с ядром по 1,6 ГГц и 2 гигами оперативки трачу на данный процесс 4-5 часов.