簡體   English   中英

AOSP的Android設備配置

[英]Android device configuration for AOSP

我已經下載了Android源代碼。 現在我想為自己的設備(LG GT540)制作它。 我聽說你需要為此創建一些“設備配置”。 雖然有幾位開發人員已經為我的設備創建了設備配置,但​​我想創建自己的設備,僅供學習。
我看到很多文件,如BoardConfig.mk,AndroidProducts.mk等。但不知道他們做了什么。 除了它們包含很多配置。 在那之上,沒有一個好的文檔。
任何有Android移植和設備配置經驗的人都可以幫助我嗎?

對...所以你想建立自己的設備樹,繼續閱讀。

免責聲明:這絕不是完整的,並且會有遺漏,因為已經解釋了所有這些我的頭腦並復制粘貼在我自己的設備樹上的某些位。

設備樹,例如/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 - 指定用於構建的相應設備的make文件。 /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/ 請注意屬性的覆蓋如何,最終會出現在Android ROM的/system根目錄中的build.prop中。

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,讀取該死的變量並記住它們並在交叉編譯這些源文件時應用它們!

現在顯示了每個Android構建make文件的內部。

現在,在AOSP的vendor/部分上,簡單地,再次,相關並與device/樹對應,如繼續這個例子, vendor/lg/gt540/lunch拿走。 那里有更多的make文件,但普遍的共識是有一個名為proprietary的目錄,其中包含被復制的專有庫(由於close-source等)。 模塊的復制在文件device-vendor-blobs.mk中指定,在本例中為gt540-vendor-blobs.mk

當通過執行以下操作發生魔術:

. build/envsetup.sh

這是讀取每個device/子目錄中的所有條目並“記住它們”,因此構建系統知道使用了什么類型的目標等。

什么時候. lunch . lunch被調用,會出現一個菜單,提示您選擇需要構建的設備。 現在是進行構建的最后一步也是最后一步......

make -j5 > buildlog.log 2>&1

我在另一個終端上運行multitail並監視buildlog.log文件以檢查並確保它的構建。

最后一步將取決於您擁有多少核(n核+ 1作為規則)並且需要一段時間才能構建,GB構建在運行Arch Linux 64bit的筆記本電腦上需要40分鍾,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--管理/分發谷歌來源的'老板'),他的構建步驟是......

make -j32 

對! 32核! 那......非常強大。

這里有一些信息: http//elinux.org/Android_Device

對於為設備構建Android的人來說,這是一個很好的資源: http//com.odroid.com/sigong/nf_file_board/nfile_board_view.php?bid = 98

(ODROID中Android平台開發的實用實際方法)

雖然其中的一些東西特別適用於ODROID主板,但它仍然可以深入了解Android的內部工作原理以及新主板的必要定制。

如果你想進入硬件方面,可能是我發現的最具信息量的資源:

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

閱讀他們為希望構建Android設備的制造商編寫的文檔,這是您將找到的最徹底/完整的參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM