- Сборка ядра для Android-устройств на примере Solid Kernel для LG e975
- Подготовка
- Сборка ядра
- Тестирование
- Собираем свой Android для BeagleBoard
- Инициализация репозитория
- Сборка загрузчика
- Сборка ядра
- Сборка файловой системы
- Конфигурирование системы
- Установка и загрузка
- Как собрать свое ядро для андроид
- Строим Android x86
- Установка окружения для сборки
- Загрузка дерева исходных кодов
- Загрузка файлов
- Сборка ядра
- Построение Android
- Настройка VirtualBox
- Эмулятор Jelly Bean
Сборка ядра для Android-устройств на примере Solid Kernel для LG e975
Подготовка
Что нам потребуется
- 64 битная система Linux (я использую Ubuntu 14.04)
- Рутованый телефон/планшет/иной девайс на Android’е с процессором QUALCOMM
Подготовка системы
Установим необходимые пакеты. Набирем в терминале:
Нажимаем Enter и пишем далее:
Качаем исходники
Идем на GitHub и скачиваем исходники (исходники для каждого девайса разные, поэтому ссылок давать не буду) архивом (в правой части экрана должна находиться кнопочка «Download ZIP»). Распаковываем архив в любое удобное место (у меня это папка /home/system-exe/Solid).
Качаем тулчейн. Переходим по ссылке, отмечаем галочкой нужный тулчейн (для меня это cortex-a15, зависит от ядер процессора) и нажимаем «скачать». Распаковываем скачанный архив в папку /home/%USERNAME%/Toolchain/Linaro-4.9.3 (вместо %USERNAME% подставляем имя учетки).
Выдираем файл конфигурации из девайса
Идем по пути /proc (на телефоне) и копируем файл config.gz на комп, распаковываем и получаем файл config, которые переименовываем по шаблону %устройство%_defconfig (у меня это e975_defconfig). Кладем получившийся файл по пути /home/%USERNAME%/Solid/arch/arm/configs
С подготовкой окончили.
Сборка ядра
Заходим в терминал и набираем команду:
(таким образом мы перешли в папку с нашими исходниками)
(у меня надо так: make e975_defconfig)
После завершения пишем:
(здесь правим нужные значения конфигурации. Тут все предельно просто, думаю разберетесь.)
После завершения начинаем сборку:
Параметр -j8 нужен только если у вас многоядерный процессор. Цифра 8 определяет количество ядер(потоков, в случае с Intel i3, i5, i7 процессорами). К примеру у меня — Intel i7, он четырехядерный, но поддерживает два потока на каждое ядро, поэтому 2 * 4 = 8.
В конце должна появиться надпись «zImage is ready».
Идем по пути /home/%USERNAME%/Solid/arch/arm/boot и видим там наше ядро — zImage.
Тестирование
Теперь нам осталось заставить работать этот самый zImage на нашем устройстве.
А вот теперь трижды подумайте надо ли вам это? Уверены ли вы в своих силах и в том, что правильно собрали ядро?
Подумали? Уверены? Точно уверены? Тогда продолжаем.
Извлекаем boot.img из нашего девайса. Набираем в терминале на телефоне:
Вместо… подставляем путь до папки by-name (у меня надо подставить msm_sdcc.1).
Переносим boot.img, который лежит на карте памяти, на комп. Распаковываем его (в интернете есть множество описаний распаковки и запаковки boot.img), меняем оригинальный zImage на наш и собираем boot.img.
Закидываем наш собранный образ на карту памяти под именем new_boot.img
В терминале набираем:
Вместо… подставляем путь до папки by-name (у меня надо подставить msm_sdcc.1).
Перезагружаем девайс. Если телефон загрузился, то все сделано правильно, если — нет, то читаем инструкцию внимательней и пробуем снова.
Для отката в случае неудачи используем наш оригинальный boot.img, который надо было оставить на карте памяти. Для отката в терминале набираем:
Вместо… подставляем путь до папки by-name (у меня надо подставить msm_sdcc.1).
Источник
Собираем свой 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 скрипт, просто для удобства пользования. Если контроллер не найдёт загрузочный сектор, наша платформа просто не сможет загрузится.
Источник
Как собрать свое ядро для андроид
Этот материал не претендует на абсолютную истину, может быть, что-то можно сделать проще и быстрее. Автор как знает, так и делает. Кроме того он не является большим экспертом в области nix-систем. Всё, что написано ниже, найдено на просторах интернета, в большинстве своём на не русскоязычных форумах, систематизировано и изложено на родном для автора языке — русском.
Коллеги, не задавайте мне вопросы по данной теме в личку, уже несколько лет как я забросил Android и не интересуюсь развитием ядер, как впрочем и самого Android-a.
Сообщение отредактировал PaWill — 08.03.16, 14:54
Часть 1. Необходимые инструменты и исходники
Для компиляции ядра нам потребуется nix-подобная операционная система. Я использовал Ubuntu 10.04 LTS — Long-term support 32-bit, которую установил на виртуальную машину VMware Workstation. Где всё это добро скачать/купить, как установить мы здесь обсуждать не будем. Если вы это не смогли сделать самостоятельно или с помощью гугла, то читать эту статью для вас ещё рано (или уже поздно). 🙂
И так, у нас всё установлено и работает. Теперь проверим все ли необходимые компоненты присутствуют в системе, возможно какие то пакеты придётся доустановить.
Запускаем терминал: