¿Qué significa el árbol de dispositivos en Android?

Device Tree es una estructura de datos para describir hardware. En lugar de codificar todos los detalles de un dispositivo en un sistema operativo, muchos aspectos del hardware se pueden describir en la estructura de datos que se pasa al sistema operativo en el momento del arranque.

El árbol de dispositivos, por ejemplo,

/ dispositivo / lg / gt540

consistiría en los siguientes archivos make:

  1. Android.mk: esto le indicará al sistema de compilación que incluya y cree fuentes específicamente para su dispositivo. Ver abajo, para un ejemplo. Esto depende del dispositivo y el hardware, podría tener libsensors, liblights, subdirectorios libcamera bajo el árbol de dispositivos de ejemplo, es decir / device / lg / gt540 / libsensors, / device / lg / gt540 / liblights, / device / lg / gt540 / libcamera etc.
  2. 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 sobre esto en unos minutos)
  3. AndroidProducts.mk: especifica el archivo de creación del dispositivo apropiado para usar en la construcción. es decir, /device/lg/gt540/device_gt540.mk, esto también es específico.
  4. device_xxxxx.mk: especifica las propiedades y extras para copiar en el resultado final, en este caso, podría ser, por ejemplo, device_gt540.mk
  5. BoardConfig.mk: este es el meollo de todo, aquí es donde se establecen los indicadores condicionales del compilador, los diseños de partición, las direcciones de arranque, el tamaño del disco ram, etc.

Echemos un vistazo a cada uno de ellos para echar un vistazo a dónde encaja todo.

Android.mk

ifeq ($ (TARGET_BOOTLOADER_BOARD_Name), xxxxx)
incluye $ (llame a todos los nombres-subdir-makefiles, libsensores de recuperación liblights libcamera….)
terminara si

Así es como la compilación usará eso para construir la recuperación, los sensores, las luces y la cámara (por supuesto que habrá más), dice ‘Yo Builder, vaya a cada uno de los directorios especificados y construya las fuentes respectivas plskthxbai’

AndroidBoard.mk

LOCAL_PATH: = dispositivo / lg / gt540 /
# #
# Archivos de arranque
# #
TARGET_PREBUILT_KERNEL: = $ (LOCAL_PATH) / kernel

archivo: = $ (INSTALLED_KERNEL_TARGET)
ALL_PREBUILT + = $ (archivo)
$ (archivo): $ (TARGET_PREBUILT_KERNEL) | $ (ACP)
$ (transformar-pre-construido-a-objetivo)

Ahora, esto le dice al sistema de compilación que pueda colocar este kernel en out / target / product / lg / gt540 (¿nota la correlación con el directorio del árbol de dispositivos?)

AndroidProducts.mk

PRODUCT_MAKEFILES: = \
$ (LOCAL_DIR) /device_gt540.mk
Le dice a la compilación como en ‘Yo Builder, lea el archivo de creación del dispositivo, por favor, y trátelo una vez completada la compilación’.

* device_xxxxx.mk: (para este ejemplo, device_gt540.mk) *

PRODUCT_NAME: = lg_gt540
DISPOSITIVO_producto: = gt540
PRODUCT_MODEL: = LG GT 540

PRODUCT_COPY_FILES + = \
… específico …

PRODUCT_PROPERTY_OVERRIDES: = \
android.dateformat = dd-MM-aaaa \

Aquí es donde se copian todos los detalles específicos del dispositivo, como controladores, bibliotecas patentadas, scripts de soporte específicos para el dispositivo en / target / product / lg / gt540 / system / en este caso. Observe cómo las anulaciones de las propiedades terminan en el build.prop que se encuentra en la raíz del sistema / de la ROM de Android.

BoardConfig.mk

LOCAL_PATH: = $ (llamar a mi-dir)
TARGET_NO_BOOTLOADER: = verdadero
TARGET_PREBUILT_KERNEL: = dispositivo / lg / gt540 / kernel
TARGET_PREBUILT_RECOVERY_KERNEL: = dispositivo / lg / gt540 / recovery_kernel

# ¡Esto variará según el dispositivo!
TARGET_BOARD_PLATFORM: = msm7k
TARGET_ARCH_VARIANT: = armv6-vfp
TARGET_CPU_ABI: = armeabi
TARGET_CPU_ABI: = armeabi-v6l
TARGET_CPU_ABI2: = armeabi
# Ruta del archivo de configuración de controladores OpenGL
BOARD_EGL_CFG: = dispositivo / lg / gt540 / egl.cfg

# Dependiente, ¡no debe tomarse literalmente!
BOARD_GLOBAL_CFLAGS + = -DHAVE_FM_RADIO

# Dependiente, ¡no debe tomarse literalmente!
BOARD_KERNEL_BASE: = 0x02600000

# esto será específico del dispositivo, y al hacer cat / proc / mtd le dará los tamaños correctos
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

Es un extracto, observe cómo especificamos la dirección base del núcleo, así es como se genera boot.img después de que se realiza la compilación y, una vez más, se elimina en / 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 las fuentes (* TARGET_BOARD_PLATFORM * / * TARGET


Puede tomar más referencias de: Xda Teacher & Stack overflow Mai-baap

:: Disfruta ::