Intereting Posts
Динамическое добавление просмотров в RelativeLayout внутри ScrollView Rect и RectF в Android SDK Android – отправлено плохое уведомление – не удалось расширить RemoteViews для: StatusBarNotification Как предотвратить использование утеченного хранилища ключей и пароля? Android Как просмотреть изображение, используя его путь к файлу с SDcard, из моего приложения Наследование между действиями в Android Android Studio – рендеринг проблемы с библиотекой поддержки Android прокручивается в нижней части списка Android Studio: как отлаживать старую версию Android SDK шаг за шагом Один символ в Base64String содержит сколько байтов? 1, 2 или более 5.1 Crash – основной цвет задачи TaskDescription должен быть непрозрачным Добавить новые регистры на байт-код Dalvik Android: как удалить строку между панелью инструментов и панелью состояния Удаление разделителя после нижнего колонтитула в Recyclerview Как получить кнопки музыкального плеера на ношении Android, такие как музыка

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

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

Solutions Collecting From Web of "Конфигурация устройства Android для AOSP"

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

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

Например, дерево устройств /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», зайдите в каждый из указанных каталогов и постройте соответствующие источники 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, это самая полная / полная ссылка, которую вы найдете.