Я загрузил исходный код Android. Теперь я хочу сделать это для своего устройства (LG GT540). Я слышал, что для этого вам нужно создать некоторую "конфигурацию устройства". Хотя некоторые разработчики уже создали конфигурации устройств для моего устройства, но я хочу создать свои собственные, просто для обучения.
Я видел много файлов, таких как BoardConfig.mk, AndroidProducts.mk и т.д. Но не знаю что они делают. Кроме того, они содержат множество конфигураций. Более того, для этого нет хорошей документации.
Могут ли люди, знакомые с портированием Android и конфигурациями устройств, помочь мне?
Конфигурация устройства Android для AOSP
Ответ 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 ядра! Это..... довольно мощный.
Ответ 2
Здесь есть информация: http://elinux.org/Android_Device
Ответ 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. Это самая полная/полная ссылка, которую вы найдете.