Практические советы по сборке образа Android x86

Задач, для которых может потребоваться пересборка ядра и ОС Android в целом множество. Наgример, возможность запуска Android x86 внутри виртуальной машины VirtualBox позволит покопаться в настройках системы и не «утяжелять» само устройство, так же это хороший инструмент для отладки ОС. Разработчиков приложений порадует эмулятор с технологией Intel Hardware Accelerated Execution Manager…

Исходный код Android взят из официального репозитория проекта AOSP (Android Open Source Project), в качестве ядра использована адаптированная версия ядра Linux 2.6 от Intel.

Установка окружения для сборки

Параметры для сборки: 64-битная версия Linux. версия GCC 4.4 и выше, реализация Java от Oracle.

Установка дополнительных зависимостей для Ubuntu 12.04:
sudo -i
apt-get update
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-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386

Установка символьной ссылки для устранения конфликта имен:
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so


Загрузка дерева исходных кодов

Установка Repo


Repo - утилита управления репозиториями, упрощающая работу с Git для Android.

Установка, инициализация и настройка Repo:
• Убедитесь, что у вас есть директория bin в вашем домашнем каталоге и она прописана в PATH:
mkdir ~/bin
PATH=~/bin:$PATH

• Загрузите Repo скрипт и выставите права на выполнение:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo


Инициализация Repo клиента

После установки Repo настройте доступ к репозиториям исходных кодов Android:

• Создайте пустую директорию для исходных файлов и перейдите в нее. Например:
mkdir aosp
cd aosp

• Запустите скрипт repo init, чтобы обновить версию самого Repo.

repo init -u https://android.googlesource.com/platform/manifest

Команда подключает ветку master из дерева исходных кодов Android. Вы можете указать любую другую, используя ключ -b:
repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r6

Для просмотра всех доступных веток введите команду:
  • git --git-dir .repo/manifests/.git/ branch -a

Нас интересуют наиболее последние версии Android от Google:
• Jelly Bean: remotes/origin/android-4.1.1_r6
• Ice Cream Sandwich: remotes/origin/android-4.0.4_r2.1

Какую бы версию Вы не выбрали, все следующие шаги будут идентичны. Возьмем, к примеру, версию Jelly Bean (JB).
В случае успешной инициализации вы увидите сообщение о том, что Repo инициализирован в вашей директории и в ней появится папка .repo

Загрузка файлов

Чтобы загрузить исходные файлы из репозитория в вашу рабочую директорию, выполните команду:
repo sync -j 16

Начальная синхронизация может занять больше часа времени.

Сборка ядра

Android разработан прежде всего для touch-устройств и он не поддерживает мышь по умолчанию. Поэтому, в качестве примера, пересоберем ядро из исходников с включенной поддержкой мыши.
Создадим директорию для хранения исходников ядра:

mkdir ~/android_kernel
cd ~/android_kernel

Воспользуемся заранее подготовленной версией ядра от Intel:
wget http://software.intel.com/sites/landingpage/android/Intel_x86_sysimg_2.3.7_Source_Files.zip
unzip Intel_x86_sysimg_2.3.7_Source_Files.zip
tar -xvf kernel_sdk_x86.tar.gz

Перейдем в директорию ядра:
cd kernel


Теперь у нас есть исходники ядра. Нужно модифицировать конфигурационный файл и сделать пересборку. Для сокращения времени по настройке воспользуемся конфигурационным файлом, который подготовили для нас разработчики. Не забывайте указать архитектуру, для которой происходит сборка ядра, в нашем случае это x86.
cp arch/x86/configs/vbox_defconfig .config
make ARCH=x86 menuconfig


Через несколько секунд загрузится графическое меню настройки ядра. Стрелками «вверх», «вниз» Вы можете передвигаться по пунктам меню, «Enter» - чтобы зайти в подменю. Все точно так же, как с обычным ядром Linux.

Чтобы включить поддержку мыши
• Зайдите в «Device Drivers»
• Выберите «Input device Support»
• Отметьте «Mice»

Затем выйдите из меню конфигурации ядра. Это можно сделать с помощью нескольких нажатий на «Esc». Не забудьте сохранить настройки.
Сделав необходимые настройки ядра, соберем его. Это не займет много времени, особенно если вы используете многоядерную машину — можете указать опцию команды make: -j N, где N — число ядер (например, для написания статьи использовалась make -j 32).
make ARCH=x86 –j 32 


При успешной компиляции вы увидите сообщение:

Kernel: arch/x86/boot/bzImage is ready

Путь до нового ядра указан в последней строке.

Подмена ядра

Путь к ядру, которое будет использовано в сборке для VirtualBox, можно определить следующим образом:
grep "LOCAL_KERNEL :=" ~/aosp/build/target/board/vbox_x86/device.mk

Должно вывестись следующее:
LOCAL_KERNEL := prebuilt/android-x86/kernel/kernel-vbox

Скопируем bzImage по найденному пути:

cp ~/kernel/arch/x86/boot/bzImage ~/aosp/prebuilt/android-x86/kernel/kernel-vbox

Построение Android

Установим окружение для сборки:
cd ~/aosp
. ./build/envsetup.sh

Теперь все готово к тому, чтобы начать компиляцию исходников Android. Первым шагом необходимо указать цель для сборки:
  • lunch vbox_x86-eng

После выполнения команды вы увидите информацию о предстоящей сборке:

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.1.1
TARGET_PRODUCT=vbox_x86
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=x86
TARGET_ARCH_VARIANT=x86
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-2.6.32-131.0.15.el6.x86_64-x86_64-with-redhat-6.1-Santiago
HOST_BUILD_TYPE=release
BUILD_ID=JRO03R
OUT_DIR=out
============================================

Затем необходимо запустить сборку исходников командой make. Хорошим тоном считается сохранять лог сборки, это можно сделать с помощью утилиты tee.
make –j 16 | tee vbox_build.log


Процесс сборки может занять значительное время, в зависимости от мощности центрального процессора и объема оперативной памяти машины. На системе, которая использовалась для подготовки статьи, это заняло около часа. Рекомендуемое число потоков для сборки можно определить из расчета 2GB оперативной памяти на поток.
При успешной компиляции, последняя строка вывода будет содержать путь и размер образа:
Install system fs image: out/target/product/vbox_x86/system.img
out/target/product/vbox_x86/system.img+ total size is 268435456


Далее необходимо собрать загрузочный образ для VirtualBox:
make installer_vdi 

Если сборка прошла успешно, в консоли должна появиться запись:
Done with VirtualBox bootable installer image -[ out/target/product/vbox_x86/installer.vdi ]-


Настройка VirtualBox

Чтобы настроитьVirtualBox, необходимо создать новую виртуальную машину, назовем ее “Android_ICS”, выберем Linux в качестве операционной системы, а версию выставим Other, как наиболее подходящую для Android.

Следующий шаг – выделение оперативной памяти. Рекомендуется 512 мегабайт и больше. В нашем случае -гигабайт.

Настраиваем размер жесткого диска. Главное, чтобы после завершения настройки все жесткие диски VirtualBox были подключены к контроллеру IDE.

Установим загрузочный образ Android в качестве второго раздела нашей виртуальной машины.
При первом запуске виртуальной машины нам необходимо запустить установку Android. Во время старта нажмите F12, чтобы зайти в меню настроек BIOS. Выберете 2 “Primary Slave”, именно там и содержится установочный образ Android.

В случае успешной установки вы увидите «Done processing installer config». Иногда при первой установке могут возникнуть ошибки, просто запустите ее еще раз. Затем перезагрузите виртуальную машину в свой только что установленный Android.

Эмулятор Jelly Bean

Сборка эмулятора почти ничем не отличается от сборки версии для VirtualBox. Если у вас уже есть исходные коды, то приступайте к сборке с шага инициализации окружения. Процесс постройки эмулятора будет изложен с самого начала. Поэтому создадим отдельную директорию для Jelly Bean Emulator и повторим уже знакомые шаги.
mkdir ~/jb
cd ~/jb


Инициализация репозитория
repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r6

Загрузка исходных кодов
repo sync -j 16

Инициализация окружения
. ./build/envsetup.sh

Выбор сборки эмулятора
lunch full_x86-eng

В случае успеха вы увидите:
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.1.1
TARGET_PRODUCT=full_x86
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=x86
TARGET_ARCH_VARIANT=x86-atom
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-2.6.32-131.0.15.el6.x86_64-x86_64-with-redhat-6.1-Santiago
HOST_BUILD_TYPE=release
BUILD_ID=JRO03L
OUT_DIR=out
============================================

Запускаем сборку:
make –j 16 | tee emulator_build.log

Пока идет процесс компиляции, скопируем конфигурационный файл и соберем ядро для эмулятора.
cd kernel
cp arch/x86/configs/goldfish_defconfig .config
make ARCH=x86 -j16

Теперь сборка эмулятора завершена.
Самый простой способ запустить его:
emulator 


Например, можно запустить с только что собранным ядром, с разрешением 480x800, объемом оперативной памяти 512 мегабайт и включенным аппаратным ускорением графики.
emulator -kernel ~/kernel/arch/x86/boot/bzImage -skin WVGA800 -memory 512 -gpu on 

Более подробно о возможностях и настройках эмулятора можно прочитать здесь

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

Источник: habrahabr.ru





Вас также может заинтересовать:

Лего-робот побил рекорд человека по сборке кубика Рубика
Релиз установочного образа дистрибутива Arch Linux 2012.11.01
Релиз установочного образа дистрибутива Arch Linux 2012.12.01
Создание своего образа с чистым CentOS 5.9 в облаке Amazon
Motorola Milestone + Android 2.2 в России (Как я прошил Android 2.2 на Моторола Майлстоун)
Проект Android-x86 представил сборку Android 4 для платформы x86