Я загрузил исходный код Android. Теперь я хочу сделать это для своего устройства (LG GT540). Я слышал, что для этого вам нужно создать «Конфигурация устройства». Хотя некоторые разработчики уже создали конфигурации устройств для моего устройства, но я хочу создать свои собственные, только для обучения.
Я видел много файлов, таких как BoardConfig.mk, AndroidProducts.mk и т. Д. Но не знаю, что они делают. Кроме того, они содержат множество конфигураций. Более того, для этого нет хорошей документации.
Может ли кто-нибудь, кто столкнулся с портированием Android и конфигурациями устройств, поможет мне?
Правильно … Итак, вы хотите построить свое собственное дерево устройств, читайте дальше.
Отказ от ответственности: это ни в коем случае не является полным, и будут упущения, поскольку они объяснили всю эту вершину моей головы и скопировали вставленные определенные биты, которые у меня есть на моем собственном дереве устройств.
Например, дерево устройств /device/lg/gt540
будет состоять из следующих файлов make:
/device/lg/gt540/libsensors
, /device/lg/gt540/liblights
, /device/lg/gt540/libcamera
и т. Д. /device/lg/gt540/device_gt540.mk
, это также относится к конкретным. device_gt540.mk
Давайте посмотрим на каждого из них, чтобы взглянуть, где все это вписывается.
Android.mk:
ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),xxxxx) include $(call all-named-subdir-makefiles, recovery libsensors liblights libcamera ....) endif
Так будет построена сборка для создания восстановления, датчиков, огней и камеры (конечно, их будет больше), ее высказывание « Yo Builder», зайдите в каждый из указанных каталогов и постройте соответствующие источники plskthxbai '
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 ядра! Это ….. довольно мощный.
Здесь есть информация: http://elinux.org/Android_Device
Отличный ресурс для любого разработчика Android для устройства: http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?bid=98
(Практический подход в реальном мире к разработке платформы Android в ODROID)
Несмотря на то, что некоторые из этих материалов особенно важны для платы ODROID, она по-прежнему предлагает отличное представление о внутренней работе Android и необходимую настройку для новой платы.
Если вы хотите попасть в аппаратную часть вещей, возможно, единственным информативным ресурсом, который я нашел, было:
http://source.android.com/compatibility/overview.html
Прочитайте документацию, которую они написали для производителей, которые хотят создавать устройства для Android, это самая полная / полная ссылка, которую вы найдете.