2012-07-05 14 views
40

Ich habe Android-Quellcode heruntergeladen. Jetzt möchte ich es für mein eigenes Gerät (LG GT540) machen. Ich habe gehört, dass Sie dafür eine 'Gerätekonfiguration' erstellen müssen. Obwohl mehrere Entwickler bereits Gerätekonfigurationen für mein Gerät erstellt haben, möchte ich jedoch eigene erstellen, nur zum Lernen.
Ich sah viele Dateien wie BoardConfig.mk, AndroidProducts.mk usw. Aber ich weiß nicht, was sie tun. Außerdem enthalten sie viele Konfigurationen. Darüber hinaus gibt es dafür keine gute Dokumentation.
Kann mir jemand mit Android-Portierung und Gerätekonfigurationen helfen?Android-Gerätekonfiguration für AOSP

Antwort

97

Richtig ... Sie möchten also Ihren eigenen Gerätebaum erstellen, lesen Sie weiter.

Haftungsausschluss: dies keineswegs abgeschlossen ist, und es wird Auslassungen sein, wie sie die ganze Oberseite meines Kopfes erklärt und klebte bestimmte Bits kopiert, die ich auf meinem eigenen Gerätebaum hier haben.

Der Gerätebaum, zum Beispiel, würde /device/lg/gt540 der folgenden machen Dateien bestehen:

  • Android.mk - das das Build-System erzählen aufzunehmen und Quellen speziell für Ihr Gerät zu bauen. Siehe unten für ein Beispiel. Dies ist abhängig von der Geräte- und Hardware, könnten Sie libsensors, liblights, libcamera Verzeichnisse unter der Beispiel Gerätestruktur, dh /device/lg/gt540/libsensors, /device/lg/gt540/liblights, /device/lg/gt540/libcamera usw.
  • AndroidBoard.mk - dies für den Kernel ist, das Build-System verwendet das, um das Kernel-Image an Ort und Stelle zu setzen (mehr dazu in ein paar Minuten)
  • AndroidProducts.mk - gibt die entsprechende Datei des Geräts an, die für das Erstellen verwendet werden soll. d.h. /device/lg/gt540/device_gt540.mk, ist dies auch spezifisch.
  • device_xxxxx.mk - legt die Eigenschaften und Extras in die endgültige Ausgabe zu kopieren über, in diesem Fall ist es zum Beispieldevice_gt540.mk
  • BoardConfig.mk sein könnte - Dies ist das Fleisch von allem, Hier werden Compilerkonditionierungsflags gesetzt, Partitionslayouts, Bootadressen, Ramdiskgröße und so weiter.

Lets Blick in jeden der einen Blick, wo es in allen passt zu geben

Android.mk.

ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),xxxxx) 
    include $(call all-named-subdir-makefiles, recovery libsensors liblights libcamera ....) 
endif 

Dies ist, wie der Build verwenden dass, um Erholung, Sensoren, Lichter und Kamera zu bauen (natürlich wird es mehr sein), seine Sprichwort 'Yo Builder, gehen Sie in jedes der angegebenen Verzeichnisse, und bauen Sie die entsprechenden Quellen 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) 

dies nun sagt das Build-System, in der Lage sein diesen Kernel in die out/target/product/lg/gt540 fallen

AndroidProducts.mk (man beachte die Korrelation mit dem Gerätebaum-Verzeichnis?) :

PRODUCT_MAKEFILES := \ 
    $(LOCAL_DIR)/device_gt540.mk 

Sein die Build wie in 'Yo Builder sagen, lesen Sie dieses Gerät Datei bitte erstellen und nach Fertigstellung des Builds bearbeiten. '

* device_xxxxx.mk: (für dieses Beispiel, 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 ... 

Dies ist, wo alle Besonderheiten für das Gerät wie Treiber, proprietäre Bibliotheken, für Skripte speziell unterstützt Das Gerät wird in diesem Fall auf out/target/product/lg/gt540/system/ kopiert. Beachten Sie, wie die Überschreibungen für die Eigenschaften, diese enden in der build.prop in der Wurzel des /system des Android ROM gefunden.

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 

Das ein Auszug ist, bemerkt, wie wir Kernels Basisadresse angeben, das ist, wie die boot.img erzeugt wird nach der Kompilierung und noch einmal geschehen ist, wird fallen gelassen in out/target/product/lg/gt540/boot.img. Außerdem teilen wir dem Build-System mit, dass es die Zielplattform für das Cross-Compiling der Quellen verwenden soll (* TARGET_BOARD_PLATFORM */* TARGET_CPU_ABI *). Dort werden weitere Informationen wie etwa bedingte Flags an den Compiler übergeben, z ein Beispiel. Wir haben die Richtlinie HAVE_FM_RADIO spezifiziert, um bei der Handhabung der Quelle für das FM-Funksystem Teile der Quelle bedingt zu kompilieren. Auch dies ist hardwarespezifisch und der Kilometerstand variiert, auch dies gilt für die Adresse zum Booten. Kurz gesagt, das sagt 'Yo Builder, lesen Sie die verdammten Variablen und merken Sie sich diese und wenden Sie sie an, wenn Sie diese Quelldateien kompilieren! '

Nun werden die Interna von jedem dieser Android-Build-Dateien angezeigt.

nun auf den vendor/ Teil davon, in AOSP, einfach noch einmal, Korrelation und entspricht den device/ Baum, wie bei diesem Beispiel in der Weiterbildung, vendor/lg/gt540/, die von den lunch abgeholt wird. Es gibt mehr Make-Dateien drin, aber die allgemeine Übereinstimmung besteht darin, dass es ein Verzeichnis namens proprietary gibt, das die proprietären Bibliotheken enthält (aufgrund von Close-Source usw.), die kopiert werden. Das Kopieren der Bibliotheken wird in der Datei device-vendor-blobs.mk, in diesem Fall gt540-vendor-blobs.mk, angegeben.

Wenn die Magie geschieht durch die folgenden Schritte ausführen:

. build/envsetup.sh 

Dies ist in den gesamten Einträge liest in jedem der device/ Verzeichnisse gefunden und „erinnert sie“, so ist das Build-System weiß, welche Art von Ziel benutzt usw.

Wenn die . lunch aufgerufen wird, erscheint eine Menüführung das Gerät auszuwählen, die den Bau erforderlich ist. Nun ist die letzte und abschließende Schritt den Build zu tun ...

make -j5 > buildlog.log 2>&1 

I multitail auf einem anderen Terminal ausgeführt und überwacht die buildlog.log Datei zu überprüfen und sicher sein Gebäude zu machen. Dieser letzte Schritt hängt davon ab, wie viele Kerne Sie haben (n Kerne + 1 in der Regel) und es dauert eine Weile zu bauen, GB Build dauert 40 Minuten auf meinem Laptop Arch 64 Bit laufen, ICS Build dauert etwa 2 Stunden 30 Minuten. Der Kilometerstand hängt davon ab, welche Art von Pferdestärken Ihre Maschine hat.

Wenn die Erstellung abgeschlossen ist, eine kleine Glocke erlischt und am unteren Rand der genannten Protokolldatei, sehe ich:

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 

Als Angelegenheit von Interesse JBQ (Jean Baptiste Queru - der ‚Chef‘ für die Verwaltung/Verteilung der Quelle von Google), sein Build-Schritt ist dies ...

Yup! 32 Kerne! Das ..... ist ziemlich mächtig.

+0

Ich war auf der Suche nach diesem !, große Antwort! – DGomez

+0

Weißt du, einige Dokumentation, die ich lesen kann, um in diesem Zeug zu beginnen? – DGomez

+0

Dies kann nicht hilfreicher sein. Vielen Dank. – korro

1

Wenn Sie in der Hardware-Seite der Dinge zu bekommen sind wahrscheinlich der Suche die einzige informativsten Ressource, die ich gefunden habe, war:

http://source.android.com/compatibility/overview.html

Lesen Sie die Dokumentation, die sie für Hersteller geschrieben haben, die Android-Geräte bauen möchten, es ist die gründlichste/vollständigste Referenz, die Sie finden.

2

Eine ausgezeichnete Ressource für alle Android für ein Gerät bauen, ist hier: http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?bid=98

(A Practical Real-World Ansatz für Android Platform Development In ODROID)

einige der Sachen Obwohl dort ist insbesondere Auf dem ODROID-Board bietet es immer noch einen großartigen Einblick in das Innenleben von Android und die notwendige Anpassung für ein neues Board.

Verwandte Themen