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
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 Beispiel
device_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.
Es gibt einige Informationen hier: http://elinux.org/Android_Device
nicht viel Erklärung dort (Ihr Link), aber +1, weil zumindest alles an einem Ort. –
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.
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.
- 1. Gebäude AOSP für benutzerdefinierte Gerät
- 2. AOSP und IntelliJ IDEA
- 3. Build-Kernel mit AOSP
- 4. AOSP ICS bauen Fehler
- 5. AOSP Projekt anhängen Prozess
- 6. AOSP Build Fehler machen
- 7. AOSP Anwendungen von Build
- 8. Android AOSP abfangen KeyEvent.KEYCODE_HOME
- 9. Erstellen von AOSP, vendor_module_check.mk fehlgeschlagen
- 10. AOSP Build auf benutzerdefinierte Gerät
- 11. AOSP Reposynchronisation dauert zu lange
- 12. In AOSP, wo ist der ServiceManager implementiert
- 13. Laden AOSP-Anwendung auf Android Studio
- 14. Effiziente Entwicklung zum Ändern von AOSP framework.jar
- 15. AOSP booten nicht auf Nexus 5
- 16. Push-Repo-Zweig zu lokalen AOSP-Spiegel
- 17. Herunterladen AOSP android-4.4.4_r2 mit Repo
- 18. Keeping Wifi-Direct Einschalten von AOSP-Geräten
- 19. Android: Erstellen Sie eine neue Systemberechtigung im AOSP-Quellcode.
- 20. Android Ändern von in-Call-Bildschirm über AOSP
- 21. Wo ist der Quellcode von ANRManagerNative im aosp Projekt
- 22. Wie finden Sie ein Android-Modul in AOSP namentlich?
- 23. AOSP-Emulator ANR, wenn ich nach Hause oder zurück drücke
- 24. Bluetooth lässt sich nicht auf AOSP 6.0 + Nexus 5X
- 25. Ich kann meine AOSP Build auf dem Emulator
- 26. AOSP blitzte auf Nexus 5x fehlende Herstellerbibliotheken auf? Kein Kamerazugriff?
- 27. Hinzufügen von Bibliothek mit Ressourcen zu AOsp-Paket
- 28. AOSP - Android 6 Marshmallow Kompilation - make: *** [run_soong] Fehler 126
- 29. Keine Regel, um das Ziel guavalib_intermediates/javalib.jar für ideen_intermediates/javalib.jar beim Erstellen von AOSP
- 30. Hinzufügen eines Android-Projekts als Bibliothek in AOSP App
Ich war auf der Suche nach diesem !, große Antwort! – DGomez
Weißt du, einige Dokumentation, die ich lesen kann, um in diesem Zeug zu beginnen? – DGomez
Dies kann nicht hilfreicher sein. Vielen Dank. – korro