Конфигурация устройства Android для AOSP

Я загрузил исходный код Android. Теперь я хочу сделать это для своего устройства (LG GT540). Я слышал, что для этого вам нужно создать некоторую "конфигурацию устройства". Хотя некоторые разработчики уже создали конфигурации устройств для моего устройства, но я хочу создать свои собственные, просто для обучения.
Я видел много файлов, таких как BoardConfig.mk, AndroidProducts.mk и т.д. Но не знаю что они делают. Кроме того, они содержат множество конфигураций. Более того, для этого нет хорошей документации.
Могут ли люди, знакомые с портированием Android и конфигурациями устройств, помочь мне?

Ответ 1

Правильно... Итак, вы хотите построить свое собственное дерево устройств, прочитайте дальше.

Отказ от ответственности: это отнюдь не полный, и будут пропуски, которые объяснили всю эту вершину моей головы и скопировали вставленные определенные биты, которые у меня есть здесь, в моем собственном дереве устройств.

В дереве устройств, например /device/lg/gt540, должны содержаться следующие файлы make:

  • Android.mk - это позволит системе сборки включать и создавать источники, специально предназначенные для вашего устройства. См. Ниже, например. Это зависит от устройства и оборудования, вы можете иметь libsensors, liblights, подкаталоги libcamera в примере дерева устройств, т.е. /device/lg/gt540/libsensors, /device/lg/gt540/liblights, /device/lg/gt540/libcamera и т.д.
  • AndroidBoard.mk - это для ядра, система сборки использует это, чтобы удалить образ ядра на месте (подробнее об этом за несколько минут)
  • AndroidProducts.mk - указывает соответствующий файл устройства для использования. т.е. /device/lg/gt540/device_gt540.mk, это также специфично.
  • device_xxxxx.mk - указывает свойства и дополнения для копирования в окончательный вывод, в этом случае это может быть, например, device_gt540.mk
  • BoardConfig.mk. Это мясо всего этого, здесь установлены условные флаги компилятора, макеты разделов, загрузочные адреса, размер ramdisk и т.д.

Позволяет заглянуть в каждый из них, чтобы взглянуть, где все это вписывается.

Android.mk:

ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),xxxxx)
    include $(call all-named-subdir-makefiles, recovery libsensors liblights libcamera ....)
endif

Так будет построена сборка для создания восстановления, датчиков, огней и камеры (конечно, их будет больше), его высказывание "Yo Builder" , зайдите в каждую из указанных каталогов и постройте соответствующие источники plskспасибоbai '

AndroidBoard.mk:

LOCAL_PATH := device/lg/gt540/

#
# Boot files
#
TARGET_PREBUILT_KERNEL := $(LOCAL_PATH)/kernel

file := $(INSTALLED_KERNEL_TARGET)
ALL_PREBUILT += $(file)
$(file): $(TARGET_PREBUILT_KERNEL) | $(ACP)
    $(transform-prebuilt-to-target)

Теперь это, сообщает системе сборки, чтобы удалить это ядро ​​в out/target/product/lg/gt540 (обратите внимание на корреляцию с каталогом дерева устройств?)

AndroidProducts.mk:

PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/device_gt540.mk 

Рассказывая о сборке, как в "Yo Builder" , прочитайте, как это сделать, сделайте файл и обработайте его по завершении сборки.

* device_xxxxx.mk: (для этого примера device_gt540.mk) *

PRODUCT_NAME := lg_gt540
PRODUCT_DEVICE := gt540
PRODUCT_MODEL := LG GT 540

PRODUCT_COPY_FILES += \
    ... specific ...

PRODUCT_PROPERTY_OVERRIDES := \
    ro.com.android.dateformat=dd-MM-yyyy \
     ... more stuff ...

Здесь все особенности устройства, такие как драйверы, собственные библиотеки, поддерживающие скрипты специально для устройства, в этом случае копируются на out/target/product/lg/gt540/system/. Обратите внимание, как переопределяет свойства, они находятся в build.prop, найденном в корневом каталоге /system для Android-ROM.

BoardConfig.mk:

LOCAL_PATH:= $(call my-dir)

TARGET_NO_BOOTLOADER := true
TARGET_PREBUILT_KERNEL := device/lg/gt540/kernel
TARGET_PREBUILT_RECOVERY_KERNEL := device/lg/gt540/recovery_kernel

# This will vary from device!
TARGET_BOARD_PLATFORM := msm7k
TARGET_ARCH_VARIANT := armv6-vfp
TARGET_CPU_ABI := armeabi
TARGET_CPU_ABI := armeabi-v6l
TARGET_CPU_ABI2 := armeabi

# OpenGL drivers config file path
BOARD_EGL_CFG := device/lg/gt540/egl.cfg

# Dependant, not to be taken literally!
BOARD_GLOBAL_CFLAGS += -DHAVE_FM_RADIO

# Dependant, not to be taken literally!
BOARD_KERNEL_BASE := 0x02600000

# this will be device specific, and by doing cat /proc/mtd will give you the correct sizes
BOARD_BOOTIMAGE_PARTITION_SIZE     := 0x00480000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x00480000
BOARD_SYSTEMIMAGE_PARTITION_SIZE   := 0x0cf80000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0x0d020000
BOARD_FLASH_BLOCK_SIZE := 131072

Это выдержка, обратите внимание на то, как мы указываем базовый адрес ядра, вот как генерируется boot.img после компиляции и еще раз, попадает в out/target/product/lg/gt540/boot.img. Кроме того, что более важно, мы говорим системе сборки использовать целевую платформу для кросс-компиляции источников (* TARGET_BOARD_PLATFORM */* TARGET_CPU_ABI *). Там будет больше информации, например, условные флаги для передачи компилятору, для пример. мы указали директиву HAVE_FM_RADIO, чтобы сообщить ей, когда дело доходит до обработки источника для системы FM-радио, чтобы условно скомпилировать части источника. Опять же, это спецификация оборудования, и пробег будет разным, также это относится к адресу для загрузки. В двух словах это говорит "Yo Builder" , прочитайте проклятые переменные и запомните их и примените их при кросс-компиляции этих исходных файлов! "

Теперь, когда отображаются внутренности каждого из этих файлов make файлов Android.

Теперь, в части vendor/, в AOSP, просто, еще раз, корреляция и соответствие с деревом device/, как в продолжении с этим примером, vendor/lg/gt540/, который подхватывается lunch. Там больше файлов, но общий консенсус - это каталог с именем proprietary, который содержит запатентованные библиотеки (из-за близкого источника и т.д.), Которые копируются. Копирование библиотек будет указано в файле device-vendor-blobs.mk, в этом случае gt540-vendor-blobs.mk.

Когда волшебство происходит, сделав следующее:

. build/envsetup.sh

Это чтение во всех позициях, найденных в каждом из подкаталогов device/, и "запоминает их", поэтому система сборки знает, какой тип цели используется и т.д.

При вызове . lunch появляется меню, предлагающее выбрать устройство, которое требуется для сборки. Теперь последний и последний шаг для сборки...

make -j5 > buildlog.log 2>&1

Я запускаю multitail на другом терминале и отслеживаю файл buildlog.log, чтобы проверить и убедиться в его создании.

Этот последний шаг будет зависеть от того, сколько ядер у вас (n ядер + 1, как правило), и требуется некоторое время для сборки, сборка GB занимает 40 минут на моем ноутбуке, работающем на Arch Linux 64bit, сборку ICS занимает около 2 часов 30 минут, Таким образом, пробег будет зависеть от того, какой тип лошадиной силы у вашей машины.

Когда сборка завершена, маленький колокольчик уходит и внизу файла журнала, я вижу следующее:

Combining NOTICE files: out/target/product/xxxxx/obj/NOTICE.html
Target system fs image: out/target/product/xxxxx/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/xxxxx/system.img
out/target/product/xxxx/system.img+ total size is 108776448

Как интересный вопрос JBQ (Jean Baptiste Queru - "босс" для управления/распространения источника из Google), его шаг сборки - это...

make -j32 

Да! 32 ядра! Это..... довольно мощный.

Ответ 3

Отличный ресурс для любого разработчика Android для устройства: http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?bid=98

(Практический подход в реальном мире к разработке платформы Android в ODROID)

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

Ответ 4

Если вы хотите попасть в аппаратную часть вещей, возможно, единственным информативным ресурсом, который я нашел, было:

http://source.android.com/compatibility/overview.html

Прочитайте документацию, которую они написали для производителей, которые хотят создавать устройства для Android. Это самая полная/полная ссылка, которую вы найдете.