- Сборка собственной Android-прошивки, часть 1/3
- Разработка Android-прошивок — настройка рабочего окружения
- Требования
- Сборочный инструментарий
- CCACHE
- Собираем свой Android для BeagleBoard
- Инициализация репозитория
- Сборка загрузчика
- Сборка ядра
- Сборка файловой системы
- Конфигурирование системы
- Установка и загрузка
- Строим Android x86
- Установка окружения для сборки
- Загрузка дерева исходных кодов
- Загрузка файлов
- Сборка ядра
- Построение Android
- Настройка VirtualBox
- Эмулятор Jelly Bean
Сборка собственной Android-прошивки, часть 1/3
Оригинал: How to build Android ROM Part 1/3
Автор: Masc
Дата публикации: 6 марта 2017 г.
Перевод: А.Панин
Дата перевода: 28 марта 2017 г.
Разработка Android-прошивок — настройка рабочего окружения
Нередко мобильные устройства поставляются с неоптимизированными прошивками от производителя, которые после непродолжительного использования начинают работать медленно и нестабильно. Многие сталкивающиеся с таким поведением прошивок люди ищут стандартные решения в сети, при этом некоторые из них собирают собственные прошивки для своих устройств.
Это первая из трех статей серии, в которой я постараюсь описать максимально понятным языком процесс самостоятельной сборки Android-прошивки для вашего устройства.
Если вы хотите собирать Android-прошивки, вам понадобится установленный на компьютере Linux-дистрибутив, ну а если вы не можете выделить отдельный компьютер для этих целей, вы вполне можете обойтись виртуальной машиной с Linux-системой.
Я буду использовать дружелюбную систему Ubuntu 16.04, что рекомендую и вам.
Требования
- Дистрибутив Linux
- Как минимум 200 ГБ свободного пространства на жестком диске или твердотельном накопителе
- Мощный компьютер с как минимум 4 ГБ оперативной памяти и производительным четырехядерным центральным процессором
- Качественное соединение с сетью Интернет на скорости как минимум 600 КБ/с
Если у вас есть все необходимое, можно начинать работу.
Все приведенные в данной статье команды должны исполняться с помощью приложения Терминал и, разумеется, я не буду повторять это после каждой команды.
Если в вашей системе не установлена виртуальная машина Java, вы можете выполнить следующую команду для ее установки вместе со всеми библиотеками:
Сборочный инструментарий
Выполните следующую команду для установки сборочного инструментария (ее исполнение может занять достаточно много времени в зависимости от скорости вашего Интернет-соединения):
Не догадываетесь, что это такое? Ну, это важный инструмент, необходимый для соединения с серверами и загрузки исходных кодов, которые понадобятся впоследствии. Его название происходит от слова «репозиторий», обозначающего централизованное хранилище определенных ресурсов. В нашем случае в этом хранилище хранятся исходные коды всех программных компонентов, которые будут компилироваться и добавляться в создаваемую прошивку.
Выполните следующую команду для для установки описанного инструмента в свою систему:
CCACHE
Это полезная утилита, которая используется для кэширования бинарных файлов и позволяет сократить время компиляции (примерно на 50%).
Для ее инициализации следует выполнить следующую команду:
Разумеется, вместо приведенного значения вы должны указать количество свободных гигабайт на своем жестком диске.
Для ознакомления с статистикой кэширования следует использовать следующую команду:
Для удаления файлов кэша — следующую команду:
Настройка рабочего окружения почти закончена — осталось открыть файл bash.rc:
Теперь следует перейти к последней строке этого файла и вставить в него следующие строки:
Наконец, следует закрыть текстовый редактор и выполнить следующую команду для применения изменений:
Пришло время перезагрузить систему.
А это две следующие статьи серии, описывающие процесс сборки прошивки!
Источник
Собираем свой Android для BeagleBoard
В этой статье, я хочу рассказать о процессе сборки Android, для контроллеров ARM. Надеюсь что для кого то эта статья окажется полезной, не только разработчику но и не искушённому пользователю. В основном конечно, хотелось бы показать как происходит сам процесс сборки, операционной системы для мобильных устройств. В качестве «подопытного кролика» я выбрал BeagleBoard-xM.
Это одна из отладочных плат, которые, как нельзя лучше подходят для подобных целей. кроме всего прочего она обладает HDMI и S-VIDEO выходами, для того что бы «пощупать» результат. А так же 4-я USB портами, которых вполне хватает для подключения клавиатуры, мышки и т.п. В своих экспериментах, я использовал BeadaFrame купленную на eBay, однако это условие абсолютно не принципиально, так как подойдёт любой «телевизор».
И так, грузиться наша плата будет с microSD, а для сборки Android нам понадобится Linux машина, например c Ubuntu 13.04-AMD x64, вполне можно использовать виртуальную машину, однако рекомендую убедиться в том что виртуальной машине доступно MMC устройство, т.е. сама microSD карточка, а для начала нам понадобится установить следующие пакеты:
Для нашего Android понадобится собрать три основные вещи:
- само ядро операционной системы, по сути, — это бинарный файл, который будет загружать загрузчик.
- загрузчик, в нашем случае — это будет u-boot, хотя можно использовать и x-loader.
- файловая система
А для работы создадим какую ни будь рабочую директорию, например: /home/ubuntu/Adroid/
и сразу добавим эту директорию в пути:
Если на Вашей виртуальной машине, не был установлен git, то придётся это сделать:
Инициализация репозитория
Теперь нам нужно получить исходный код самого Android, из которого, в дальнейшем, мы будем собирать само ядро операционной системы и файловую систему. Для этого внутри рабочей директории /home/ubuntu/Adroid, выполним следующую команду:
В результате мы получили файл androidrepo, с помощью которого мы и будем работать с репозиторием. Для этого назначим права исполняемого файла для androidrepo.
Далее, внутри наше рабочей директории, создаём каталог для исходного кода:
и инициируем репозиторий:
После успешной инициации, выполняем синхронизацию с репозиторием
Синхронизация — это достаточно долгий процесс, поскольку содержит ни только исподники ядра, но и файловую систему а так же компилятор с помощью которого и будет собираться и загрузчик, и само ядро.
По окончанию синхронизации, мы должны увидеть информацию об успешной синхронизации, что то вроде этого:
Syncing work tree: 100% (261/261), done.
Теперь, перед сборкой нам нужно настроить путь к компилятору, которым мы будем собирать и ядро и загрузчик. Сам компилятор находится внутри самого репозитория в директории prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin, так что устанавливаем путь к нему в переменной PATH.
На этом, подготовительную работу, можно считать законченной.
Сборка загрузчика
Как я уже писал, что в качестве загрузчика, мы будем использовать u-boot. Для сборки нам понадобится сделать клон репозитория u-boot, в нашей рабочей папке:
И собираем наш загрузчик, первую команду distclean, при самой первой сборке, можно пропустить.
Для сборки u-boot используется компилятор arm-eabi-gcc, путь к которому у нас уже установлен.
Результат сборки загрузчика — это два файла MLO, и u-boot.bin. Оба этих файла находятся в корне директории u-boot. Сразу перенесём их куда ни будь, просто для удобства, например в каталог build.
Сборка ядра
Теперь мы добрались до сборки самого ядра. Физически это один файл uImage, который по факту представляет ни что иное как — Linux ядро. Однако перед тем как приступать к сборке, необходимо установить Java SE 1.6. И именно версию 1.6, установить которую можно из репозитория:
или, например как описано в этой статье.
Далее, для сборки ядра, нам нужно зайти в директорию kernel, внутри Android репозитория. В нашем случае: /home/ubuntu/Adroid/source/kernel, и по примеру сборки загрузчика u-boot, выполнить сборку:
Надо заметить, что omap3_beagle_android_defconfig взят из каталога kernel/arch/arm/configs, в котором находятся конфигурации ядра. При желании можно изменить, добавить, или подобрать подходящую конфигурацию для конкретного «железа».
Результат сборки, будет находится в папке kernel/arch/arm/boot, т.е. в нашем случае /home/ubuntu/Adroid/source/kernel/arch/arm/boot, откуда мы берём файл uImage, собственно само ядро, и переносим его в уже удобную, для нас директорию build.
Сборка файловой системы
Это последний этап сборки нашей операционной системы, для этого нужно перейти в корень репозитория, и собрать её:
Файловая система собирается достаточно долгое время, да и места на диске требует около 20Gb. После компиляции самой файловой системы, нужно получить архив, в который войдут все необходимые файлы.
После окончания сборки архива, мы получаем файл footfs.tar.bz2, который находится в директории out: /home/ubuntu/Adroid/source/out/target/product/beagleboard/rootfs.tar.bz2, и собственно содержит файловую систему Android. Тут находятся все системные файлы, приложения, и утилиты входящие в состав операционной системы.
Конфигурирование системы
Сам процесс конфигурирования достаточно прост, а для упрощения, воспользуемся Rowboat Tools от Texas Instruments. Нам понадобится файл конфигурации загрузчика boot.scr, который содержит настройки переменных загрузчика.
Скачиваем и распаковываем непосредственно сам Rowboat Tools:
Для нас, сейчас интересен файл mkbootscr, который находится в каталоге RowboatTools-JB/am37x/mk-bootscr. Если заглянуть внутрь файла, то можно найти подобные строки:
Это и есть установка переменных загрузчика, т.е. например нам нужно установить разрешение экрана отличным от «по умолчанию», значит мы должны изменить значение dvi:1024×768-16, и выполнить mkbootscr. В результате мы получаем файл boot.scr с нашими новыми настройками. Менять сразу boot.scr не выйдет, потому что он несёт информацию о контрольной сумме, которая, конечно же, должна совпадать с размером самого файла.
Установка и загрузка
Сама плата, как в принципе и большинство устройств на ARM контроллерах могут загрузиться с NAND памяти, SD/MMC или USB/RS-232. В нашем случае, мы будем загружаться с MMC. Во первых этот безопаснее чем прошивка NAND памяти, а во вторых, на мой взгляд, просто удобнее особенно в демонстрационных целях.
И так, нам понадобится MMC, желательно от 2 до 8 Gb. Подключаем MMC к Linux машине, и подготавливаем файловую систему.
Загрузочный MMC диск должен содержать минимум два раздела. Первый FAT16 назовём его boot, с которого собственно и будет происходить загрузка u-boot и ядра операционной системы, и второй Ext4, на котором будет находится наша файловая система, назовём его rootfs.
Для упрощения создания файловой системы, я подготовил маленький bash скрипт, просто для удобства пользования. Если контроллер не найдёт загрузочный сектор, наша платформа просто не сможет загрузится.
Источник
Строим Android x86
Установка окружения для сборки
Для сборки Android потребуется 64 битная версия Linux. Еще один важный момент: обратите внимание на версию GCC, которая установлена на системе. Google поддерживает версию GCC 4.4 и выше. Так же на системе должна быть установлена реализация Java от Oracle.
Установка дополнительных зависимостей для Ubuntu 12.04:
Установите символьную ссылку для устранения конфликта имен:
Загрузка дерева исходных кодов
Установка Repo
Repo — утилита управления репозиториями, упрощающая работу с Git для Android. Более подробную информацию можно прочесть здесь (http://source.android.com/source/version-control.html)
Для установки, инициализации и настройки Repo выполните следующие шаги:
• Убедитесь, что у вас есть директория bin в вашем домашнем каталоге и она прописана в PATH:
• Загрузите Repo скрипт и выставите права на выполнение:
Инициализация Repo клиента
После установки Repo, настройте доступ к репозиториям исходных кодов Android:
• Создайте пустую директорию для исходных файлов и перейдите в нее. Например, это может выглядеть так:
• Запустите скрипт repo init, чтобы обновить версию самого Repo.
Эта команда подключит ветку master из дерева исходных кодов Android. Вы можете указать любую другую, используя ключ -b:
Для просмотра всех доступных веток введите команду:
Нас интересуют наиболее последние версии Android от Google:
- Jelly Bean: remotes/origin/android-4.1.1_r6
- Ice Cream Sandwich: remotes/origin/android-4.0.4_r2.1
Можно выбрать любую на ваш вкус, дальнейшие шаги не будут отличаться. Для демонстрации процесса сборки под VirtualBox возьмем версию Jelly Bean (JB).
В случае успешной инициализации вы увидите сообщение о том, что Repo инициализирован в вашей директории и в ней появится папка .repo
Загрузка файлов
Чтобы загрузить исходные файлы из репозитория в вашу рабочую директорию выполните команду:
Начальная синхронизация может занять больше часа времени.
Сборка ядра
Android разработан прежде всего для устройств, управляемых жестами и он не поддерживает мышь по умолчанию. Поэтому, в качестве примера, пересоберем ядро из исходников с включенной поддержкой мыши.
Создадим директорию для хранения исходников ядра:
Воспользуемся заранее подготовленной версией ядра от Intel:
Перейдем в директорию ядра:
Теперь у нас есть исходники ядра. Нужно модифицировать конфигурационный файл и пересобрать. Чтобы сократить время на полную настройку ядра, воспользуемся конфигурационным файлом, который подготовили для на разработчики. Важный момент — не забывайте указать архитектуру для которой происходит сборка ядра, в нашем случае это x86.
Через несколько секунд загрузится графическое меню настройки ядра. Стрелками «вверх», «вниз» вы можете передвигаться по пунктам меню, «Enter» чтобы зайти в подменю. Все точно так же как с обычным ядром Linux.
Чтобы включить поддержку мыши:
• Зайдите в «Device Drivers»
• Выберите «Input device Support»
• Отметьте «Mice»
Вы можете зайти в подменю «Mice» и посмотреть дополнительные настройки драйверов.
Затем выйдите из меню конфигурации ядра. Это можно сделать с помощью нескольких нажатий на «Esc». Не забудьте сохранить настройки, когда меню конфигурации предложит это сделать.
Сделав необходимые настройки ядра, соберем его. Это не займет много времени, особенно если вы используете многоядерную машину — можете указать опцию команды make: -j N, где N — число ядер (например, для написания статьи использовалась make -j 32).
При успешной компиляции вы увидите сообщение:
Путь до нового ядра указан в последней строке.
Подмена ядра
Путь к ядру, которое будет использовано в сборке для VirtualBox можно определить следующим образом:
Должно вывестись примерно следующее:
Скопируем bzImage по найденному пути:
Построение Android
Установим окружение для сборки:
Теперь все готово к тому, чтобы начать компиляцию исходников Android. Первым шагом необходимо указать цель для сборки:
После выполнения команды вы увидите информацию о предстоящей сборке:
Затем необходимо запустить сборку исходников командой make. Хорошим тоном считается сохранять лог сборки, это можно сделать с помощью утилиты tee.
Процесс сборки может занять значительное время, конкретные цифры зависят от мощности центрального процессора и объема оперативной памяти машины. На системе, которая использовалась для подготовки статьи это заняло около часа. Рекомендуемое число потоков для сборки можно определить из расчета 2GB оперативной памяти на поток.
При успешной компиляции, последняя строка вывода будет содержать путь и размер образа:
Далее необходимо собрать загрузочный образ для VirtualBox:
Если сборка прошла успешно, в консоли должна появиться запись:
Настройка VirtualBox
Эмулятор Jelly Bean
Сборка эмулятора мало чем отличается от сборки версии для VirtualBox. Если у вас уже есть исходные коды, то приступайте к сборке с шага инициализации окружения. Для чистоты эксперимента, будет процесс постройки эмулятора будет изложен с самого начала. Поэтому создадим отдельную директорию для Jelly Bean Emulator и повторим уже знакомые шаги.
Загрузка исходных кодов
Выбор сборки эмулятора
В случае успеха вы увидите:
Пока идет процесс компиляции, скопируем конфигурационный файл и соберем ядро для эмулятора.
Теперь сборка эмулятора завершена.
Самый простой способ запустить его:
Например, можно запустить с только что собранным ядром, с разрешением 480×800, объемом оперативной памяти 512 мегабайт и включенным аппаратным ускорением графики.
Более подробно о возможностях и настройках эмулятора можно прочитать здесь
Источник