Конфигурация устройства для сборки Андроида

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску

Описание конфигурации устройства для сборки системы Андроид


Для примера будет использована наша конфигурация для AC100.

Общая концепция


Специфические настройки для сборки системы Андроид под конкретное устройство задаются переменными окружения, но т.к. для многих устройств требуется очень большое кол-во переменных, доп. программ и настроек в дереве сборки системы есть папка device где располагается папка с названием вендора, а в ней папка с названием устройства.

После скачивания всего дерева для сборки системы, процесс сборки инициализируется коммандой

$ source ./build/envsetup.sh

этот скрипт выполняет все файлы с названием vendorsetup.sh в определенных путях, в том числе в дереве папки device, а также прописывает нужные для сборки переменные окружения заданые в нем, а также считанные из файлов vendorsetup.sh

В нашем случае в дереве папок device используется две папки toshiba/paz00-common и toshiba/ac100. Файл vendorsetup.sh содержится только в папке ac100 и задает название конфигурации нашего устройства и имеет следущее содержимое:

add_lunch_combo full_ac100-userdebug
add_lunch_combo cm_ac100-userdebug

Эти значения нужно использовать для определенной сборки системы под наше устройство. Откуда формируются эти названия? Это будет описано дальше.

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

$ lunch cm_ac100-userdebug

В нашей конфигурации папка paz00-common служит для общих настроек и приложений, обычно статичных и редко менямых, а папка ac100 для настроек под определенную модель устройства.

Внутренняя организация папки с конфигурацией устройства


Android.mk

Сборка системы Андроид начинается с инициализации файлов с конигурацией процесса самой сборки, аналог Makefile в нашем случае файл Android.mk. Этот файл обычно является исполняется первым в процессе компиляции Андроида, а также является исполняется самым первым при сборке конфигурации под определенное устройство. В нем задаются правила для сборки текущей папки и нужные для компиляции переменные.

Рассмотрим подробнее файл Android.mk из папки paz00-common

ifeq ($(TARGET_BOOTLOADER_BOARD_NAME), paz00)
    include $(all-subdir-makefiles)
endif

смысл следующий что если конфигурация под конкретное устройство содержит переменную TARGET_BOOTLOADER_BOARD_NAME со значением paz00 используются все подкаталоги внутри нее.

Файл Android.mk из папки ac100 имеет следующее содержимое:

LOCAL_PATH := $(call my-dir)
include $(call all-makefiles-under,$(LOCAL_PATH))

Задает значение переменной LOCAL_PATH на свой путь и указывает компилятору, что нужно использовать все файлы конфигурации сборки с расширением .mk внутри свого каталога.

BoardConfig.mk

Основной файл конфигурации устройства. В нем задаются основные переменные конфигурации, определяющие ключевые моменты компиляции, настройки подсистем для оборудования и тп.

Переменные которые можно использовать в нем можно найти в файлах Android.mk внутри разных частей системы Андроид.

Ниже рассмотрим некторые примеры:

Настройки определяющие архитектуру, процессор и тп

TARGET_BOARD_PLATFORM                   := tegra
# Product set overrides result image name
#TARGET_PRODUCT                         := tegra
TARGET_BOARD_INFO_FILE                  := device/toshiba/paz00-common/board-info.txt
TARGET_CPU_ABI                          := armeabi-v7a
TARGET_CPU_ABI2                         := armeabi
TARGET_ARCH_VARIANT                     := armv7-a
TARGET_ARCH_VARIANT_CPU                 := cortex-a9
TARGET_ARCH_VARIANT_FPU                 := vfpv3-d16
TARGET_CPU_SMP                          := true

TARGET_NO_BOOTLOADER                    := true
TARGET_BOOTLOADER_BOARD_NAME            := paz00
ARCH_ARM_HAVE_TLS_REGISTER              := true

Настройки используемого Linux kernel

# Kernel
TARGET_KERNEL_SOURCE                    := kernel/toshiba/paz00
TARGET_KERNEL_CONFIG                    := paz00_android_defconfig

тут задается папка в которой располагаются исходники ядра и конфиг который надо использовать

Настройки связанные с файловой системой, партициями и образами:

# Partitions 
BOARD_HAS_LARGE_FILESYSTEM              := true
TARGET_USERIMAGES_USE_EXT4              := true
BOARD_BOOTIMAGE_PARTITION_SIZE          := 8388608
BOARD_RECOVERYIMAGE_PARTITION_SIZE      := 5242880
BOARD_SYSTEMIMAGE_PARTITION_SIZE        := 314572800
BOARD_USERDATAIMAGE_PARTITION_SIZE      := 1294991360
BOARD_FLASH_BLOCK_SIZE                  := 131072

# Disable spase in image creation, otherwise image not mountble
TARGET_USERIMAGES_SPARSE_EXT_DISABLED := true

# Setting this to avoid boot locks on the system from using the "misc" partition.
BOARD_HAS_NO_MISC_PARTITION             := true

# dont build recovery
#TARGET_NO_RECOVERY                     := true

# Indicate that the board has an Internal SD Card
#BOARD_HAS_SDCARD_INTERNAL              := true

BOARD_DATA_DEVICE                       := /dev/block/mmcblk0p6
BOARD_DATA_FILESYSTEM                   := ext4
BOARD_CACHE_DEVICE                      := /dev/block/mmcblk0p4
BOARD_CACHE_FILESYSTEM                  := ext4
BOARD_SYSTEM_DEVICE                     := /dev/block/mmcblk0p3
BOARD_SYSTEM_FILESYSTEM                 := ext4

Настройки вайфай и блютус подсистем:

# Wifi related defines
BOARD_WPA_SUPPLICANT_DRIVER             := NL80211
WPA_SUPPLICANT_VERSION                  := VER_0_8_X
BOARD_WPA_SUPPLICANT_PRIVATE_LIB        := lib_driver_cmd_wl12xx
#BOARD_WPA_SUPPLICANT_PRIVATE_LIB       := lib_driver_cmd_bcmdhd
BOARD_HOSTAPD_DRIVER                    := NL80211
BOARD_HOSTAPD_PRIVATE_LIB               := lib_driver_cmd_wl12xx
#BOARD_HOSTAPD_PRIVATE_LIB              := lib_driver_cmd_bcmdhd
BOARD_WLAN_DEVICE                       := wlan0
WIFI_DRIVER_MODULE_NAME                 := rt2800usb
WIFI_DRIVER_MODULE_PATH                 := /system/lib/modules/rt2800usb.ko

# Bluetooth
BOARD_HAVE_BLUETOOTH                    := true
#BOARD_HAVE_BLUETOOTH_BCM               := true
#BOARD_HAVE_BLUETOOTH_CSR               := true

Настройки специфические для CWM Recovery:

# CWM Recovery settings
# custom recovery ui
BOARD_CUSTOM_RECOVERY_KEYMAPPING        := ../../device/toshiba/paz00-common/recovery/recovery_ui.c
BOARD_HAS_NO_SELECT_BUTTON              := true

И различные дополнительные настройки:

Исключение документации из сборки, для ускорения процесса компиляции нового образа

# skip doc from building
BOARD_SKIP_ANDROID_DOC_BUILD            := true

и тп

# Vold settings
BOARD_VOLD_MAX_PARTITIONS               := 11
BOARD_NO_ALLOW_DEQUEUE_CURRENT_BUFFER   := true

# Use nicer font rendering
BOARD_USE_SKIA_LCDTEXT                  := true

# kbd libsensor from android-x86
BOARD_USES_KBDSENSOR                    := true
BOARD_USES_KBDSENSOR_ROTKEY2            := true

# Add screencap tool for making screenshots from console
BOARD_USE_SCREENCAP                     := true
BOARD_USES_SECURE_SERVICES              := true

cm.mk, device.mk, ac100.mk, full_ac100.mk

Файлы специфической конфигурации устройства, элементов которые будут включены в сборку, значений проперти, прав и тп.

Тут располагаются значения определяющие название имиджа, информацию об утсройстве и тп:

PRODUCT_NAME := cm_ac100
PRODUCT_RELEASE_NAME := ac100
PRODUCT_DEVICE := ac100
PRODUCT_BRAND := toshiba
PRODUCT_MODEL := ac100
PRODUCT_MANUFACTURER := toshiba

Наборы программ и настроек которые будут включены в сборку:

$(call inherit-product, device/toshiba/ac100/full_ac100.mk)

# Inherit some common CM stuff.
$(call inherit-product, vendor/cm/config/common_full_phone.mk)

# Inherit some common CM stuff.
$(call inherit-product, vendor/cm/config/gsm.mk)

$(call inherit-product-if-exists, vendor/toshiba/paz00/device-vendor.mk)
$(call inherit-product, frameworks/base/build/phone-hdpi-512-dalvik-heap.mk)

# Inherit from those products. Most specific first.
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)
$(call inherit-product, device/toshiba/ac100/ac100.mk)
$(call inherit-product-if-exists, vendor/toshiba/paz00/paz00-vendor.mk)

у нас выбор компонентов разнесен на 3 файла: cm.mk, full_ac100.mk и ac100.mk так можно варьировать компоненты собираемые в конечном образе

Системные файлы заливаемые в образ:

PRODUCT_COPY_FILES += \
    device/toshiba/paz00-common/prebuild/init.paz00.rc:root/init.paz00.rc \
    device/toshiba/paz00-common/prebuild/init.nv_dev_board.usb.rc:root/init.nv_dev_board.usb.rc \
    device/toshiba/paz00-common/prebuild/init.local.rc:system/etc/init.local.rc \
    device/toshiba/paz00-common/prebuild/ueventd.paz00.rc:root/ueventd.paz00.rc \
    device/toshiba/paz00-common/prebuild/tiny_hw.xml:system/etc/sound/ac100.xml \
    device/toshiba/paz00-common/prebuild/media_profiles.xml:system/etc/media_profiles.xml \
    device/toshiba/paz00-common/prebuild/excluded-input-devices.xml:system/etc/excluded-input-devices.xml \
    device/toshiba/paz00-common/prebuild/egalax_i2c.idc:system/usr/idc/egalax_i2c.idc \
    device/toshiba/paz00-common/prebuild/egalax_ts.idc:system/usr/idc/egalax_ts.idc \
    device/toshiba/paz00-common/prebuild/01NVOptimalization:system/etc/init.d/01NVOptimalization \
    device/toshiba/paz00-common/prebuild/02PmDebug:system/etc/init.d/02PmDebug \
    device/toshiba/paz00-common/prebuild/03LedBehaviour:system/etc/init.d/03LedBehaviour 

синтаксис следующий <файл в системе сборки>:<файл в конечном образе>

Компоненты системы Андроид которые надо включить в образ:

PRODUCT_PACKAGES += \
    librs_jni \
    liba2dp \
    lights.tegra \
    com.android.future.usb.accessory \
    camera.tegra \
    libpkip \
    libaudioutils \
    tinyplay \
    tinycap \
    tinymix \
    audio.primary.tegra \
    audio.a2dp.default \
    FolioParts \
    wmiconfig

нужные названия компонентов или программ можно найти в их файлах сборкеи Android.mk в переменной LOCAL_MODULE Тут включаются апкашки которые не входят в базовые наборы и либы которые нам нужны, также компоненты из external и тп.

Создаваемые новые значения проперти:

PRODUCT_PROPERTY_OVERRIDES := \
    ro.opengles.version=131072 \
    wifi.interface=wlan0 \
    keyguard.no_require_sim=true \
    ro.sf.lcd_density=120 

Изменяемые существующие значения проперти:

PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
    ro.secure=0 \
    persist.sys.strictmode.visual=0

Файлы с правами:

PRODUCT_COPY_FILES += \
 frameworks/base/data/etc/android.hardware.camera.flash-autofocus.xml:system/etc/permissions/android.hardware.camera.flash-autofocus.xml \
    frameworks/base/data/etc/android.hardware.camera.front.xml:system/etc/permissions/android.hardware.camera.front.xml \
    frameworks/base/data/etc/android.hardware.camera.xml:system/etc/permissions/android.hardware.camera.xml \
    frameworks/base/data/etc/android.hardware.location.gps.xml:system/etc/permissions/android.hardware.location.gps.xml \
    frameworks/base/data/etc/android.hardware.sensor.accelerometer.xml:system/etc/permissions/android.hardware.sensor.accelerometer.xml \
    frameworks/base/data/etc/android.hardware.sensor.light.xml:system/etc/permissions/android.hardware.sensor.light.xml \
    frameworks/base/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \
    frameworks/base/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \
    frameworks/base/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml \
    frameworks/base/data/etc/android.hardware.usb.host.xml:system/etc/permissions/android.hardware.usb.host.xml \
    frameworks/base/data/etc/android.hardware.usb.accessory.xml:system/etc/permissions/android.hardware.usb.accessory.xml \
    frameworks/base/data/etc/android.software.sip.voip.xml:system/etc/permissions/android.software.sip.voip.xml \
    frameworks/base/data/etc/tablet_core_hardware.xml:system/etc/permissions/tablet_core_hardware.xml 

Настройки определяющие разрешение экрана устройства:

# Resolution settings
PRODUCT_CHARACTERISTICS := tablet
PRODUCT_AAPT_CONFIG := xlarge mdpi
PRODUCT_AAPT_PREF_CONFIG := mdpi
PRODUCT_LOCALES += mdpi

в нашем случае выбирается размер xlarge как специфический для таблетов и тп и разрешение mdpi как соотвествующее нашему разрешению 1024x600

Папка в которой хранятся значение оверлеев, файлов конфигурации разных компонентов системы:

DEVICE_PACKAGE_OVERLAYS := \
    device/toshiba/paz00-common/overlay

подробности по файлам конфигураций расписаны в отдельной статье Overlays

system.prop

Это файл в котором можно просто добавить проперти которые будут добавлены в систему