trabajo - Configuración de dispositivo Android para AOSP
uy el dispositivo no admite perfiles de trabajo test dpc (4)
Correcto ... Así que quieres construir tu propio árbol de dispositivos, sigue leyendo.
Descargo de responsabilidad: esto no es en absoluto completo, y habrá omisiones que explican todo esto en lo alto de mi cabeza y copian algunos bits que tengo aquí en mi propio árbol de dispositivos.
El árbol de dispositivos, por ejemplo, /device/lg/gt540
consistiría en los siguientes archivos make:
- Android.mk : esto le indicará al sistema de compilación que incluya y genere fuentes específicamente para su dispositivo. Vea a continuación, para un ejemplo. Esto depende del dispositivo y del hardware, puede tener libsensors, liblights, subdirectorios de libcamera en el árbol de dispositivos de ejemplo, es decir,
/device/lg/gt540/libsensors
,/device/lg/gt540/liblights
,/device/lg/gt540/libcamera
etc. - AndroidBoard.mk : esto es para el kernel, el sistema de compilación lo utiliza para colocar la imagen del kernel en su lugar (más información sobre esto en unos minutos)
- AndroidProducts.mk : especifica el archivo make del dispositivo apropiado, para usar en la construcción. es decir,
/device/lg/gt540/device_gt540.mk
, esto también es específico. - device_xxxxx.mk : especifica las propiedades y los extras que se copiarán en la salida final, en este caso, podría ser, por ejemplo,
device_gt540.mk
- BoardConfig.mk : esta es la esencia de todo esto, aquí es donde se establecen los indicadores condicionales del compilador, los diseños de partición, las direcciones de inicio, el tamaño del disco RAM , etc.
Echemos un vistazo a cada uno de ellos para echar un vistazo de dónde encaja todo.
Android.mk:
ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),xxxxx)
include $(call all-named-subdir-makefiles, recovery libsensors liblights libcamera ....)
endif
Así es como la compilación utilizará eso para construir la recuperación, los sensores, las luces y la cámara (por supuesto, habrá más), dice " Yo Builder, ingrese en cada uno de los directorios especificados y construya las fuentes respectivas 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)
Ahora, esto le está diciendo al sistema de compilación, que sea capaz de colocar este kernel en out/target/product/lg/gt540
(¿observa la correlación con el directorio del árbol de dispositivos?)
AndroidProducts.mk:
PRODUCT_MAKEFILES := /
$(LOCAL_DIR)/device_gt540.mk
Se indica a la compilación como en '' Yo Builder, lea el archivo make del dispositivo, por favor, y proceselo al completar la compilación. ''
* device_xxxxx.mk: (para este ejemplo, 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 ...
Aquí es donde todos los detalles específicos del dispositivo, como los controladores, las bibliotecas propietarias, las secuencias de comandos compatibles con el dispositivo, se copian en out/target/product/lg/gt540/system/
en este caso. Observe cómo los reemplazos para las propiedades, estos terminan en el build.prop
encuentra en la raíz del /system
de la ROM de Android.
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
Ese es un extracto, observe cómo especificamos la dirección base del kernel, así es como se genera boot.img
después de que se realiza la compilación y, una vez más, se out/target/product/lg/gt540/boot.img
en out/target/product/lg/gt540/boot.img
. Además, lo que es más importante, le estamos diciendo al sistema de compilación que use la plataforma de destino para compilar de forma cruzada los orígenes (* TARGET_BOARD_PLATFORM * / * TARGET_CPU_ABI *) Habrá más información allí, como indicadores condicionales para pasar al compilador, para un ejemplo. especificamos la directiva HAVE_FM_RADIO
para decirle, cuando se trata de manejar la fuente del sistema de radio FM, compilar condicionalmente partes de la fuente. Nuevamente, esto es específico del hardware y el millaje variará, también esto se aplica a la dirección de inicio. En pocas palabras, esto dice '' Yo Builder, lee las malditas variables y recuérdalos y aplícalos cuando compiles de forma cruzada esos archivos de origen. ''
Ahora que se muestran las partes internas de cada uno de esos archivos de compilación de Android.
Ahora, en el vendor/
parte del mismo, en AOSP, simplemente, una vez más, la correlación y se corresponde con el device/
árbol, como al continuar con este ejemplo, el vendor/lg/gt540/
que es recogido por el lunch
. Hay más archivos de creación allí, pero el consenso general es que hay un directorio llamado proprietary
que contiene las librerías propietarias (debido al código cerrado, etc.) que se copian. La copia sobre las bibliotecas se especifica en el archivo device-vendor-blobs.mk , en este caso, gt540-vendor-blobs.mk
.
Cuando la magia sucede haciendo lo siguiente:
. build/envsetup.sh
Esta es la lectura de las entradas completas que se encuentran en cada uno de los subdirectorios de device/
y "los recuerda", por lo que el sistema de compilación sabe qué tipo de objetivo se usa, etc.
Cuando el se invoca el . lunch
, aparece un menú que le pide que elija el dispositivo que se requiere para construir. Ahora el último y último paso para hacer la compilación ...
make -j5 > buildlog.log 2>&1
multitail
en otra terminal y buildlog.log
archivo buildlog.log
para verificar y asegurar que se está construyendo.
Este último paso dependerá de la cantidad de núcleos que tenga (n cores + 1 como regla) y demora un tiempo en construirse, la compilación en GB toma 40mins en mi computadora portátil con Arch Linux 64bit, la compilación ICS toma aproximadamente 2hrs 30 mins. Por lo tanto, el kilometraje variará según el tipo de potencia que tenga su máquina.
Cuando la compilación está terminada, una pequeña campana suena y en la parte inferior de dicho archivo de registro, veo esto:
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
Como cuestión de interés, JBQ (Jean Baptiste Queru, el ''jefe'' para administrar / distribuir la fuente de Google), su paso de compilación es este ...
make -j32
¡Sip! 32 núcleos! Eso ..... es bastante poderoso.
He descargado el código fuente de Android. Ahora quiero hacerlo para mi propio dispositivo (LG GT540). He oído que necesitas crear alguna ''Configuración de dispositivo'' para eso. Aunque varios desarrolladores ya han creado configuraciones de dispositivo para mi dispositivo, pero quiero crear la mía, solo para aprender.
Vi muchos archivos como BoardConfig.mk, AndroidProducts.mk, etc. Pero no sé lo que hacen. Además contienen muchas configuraciones. Sobre eso, no hay una buena documentación para eso.
¿Puede alguien con experiencia con las configuraciones de dispositivos y dispositivos Android ayudarme?
Hay algo de información aquí: http://elinux.org/Android_Device
Si está buscando entrar en el lado del hardware, probablemente el recurso más informativo que he encontrado ha sido:
http://source.android.com/compatibility/overview.html
Lea la documentación que escribieron para los fabricantes que buscan construir dispositivos Android, es la referencia más completa que encontrará.
Un excelente recurso para cualquier persona que cree Android para un dispositivo está aquí: http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?bid=98
(Un enfoque práctico del mundo real para el desarrollo de plataformas Android en ODROID)
Aunque algunas de las cosas que hay en el tablero de ODROID son particulares, aún ofrece una gran perspectiva del funcionamiento interno de Android y la personalización necesaria para un nuevo tablero.