2012-07-05 69 views
40

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

回答

97

右...所以你想要建立你自己的設備樹,閱讀。

免責聲明:這決不是完整的,而且會有不作爲已經解釋過我的頭這一切的頂部和複製粘貼的某些位,我這裏有我自己的設備樹。

設備樹,例如,/device/lg/gt540將包括以下讓文件:

  • Android.mk - 這將告訴構建系統包括和專門搭建來源爲您的設備。例如,請參閱下面的內容。這取決於設備和硬件上,你可以有libsensors,liblights,libcamera子目錄中的示例設備樹下,即/device/lg/gt540/libsensors/device/lg/gt540/liblights/device/lg/gt540/libcamera
  • AndroidBoard.mk - 這是爲內核,構建系統使用它來放下內核映像(更多關於這個在幾分鐘內)
  • AndroidProducts.mk - 指定適當的設備的構建文件,用於建設。即/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 

這是構建將如何使用即建立恢復,傳感器,燈光和相機(當然會有更多),它的說法'呦建設者,進入每個指定的目錄,並建立各自的來源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 

它告訴編譯爲「呦生成器,讀取設備請創建文件並在完成構建後處理它。'

* device_xxxxx.mk:(在這個例子中,device_gt540.mk)*

​​

這是所有的細節的裝置,例如驅動器,專有庫,支持腳本專門爲該設備在這種情況下被複制到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構建生成文件的內部結構。

現在,到了它的vendor/一部分,AOSP,簡單地說,再次,相關性,對應與device/樹,在這個例子中,vendor/lg/gt540/它獲取由lunch拾起繼續。在那裏有更多的make文件,但一般的共識是有一個名爲proprietary的目錄,其中包含專有庫(由於近源等)被複制。在文件中指定了對庫的複製,在device-vendor-blobs.mk中,在這種情況下,gt540-vendor-blobs.mk

當奇蹟發生通過執行以下操作:

. build/envsetup.sh 

這在每個device/子目錄發現整個條目讀,「記得他們」,因此構建系統知道是什麼類型的目標使用等

當調用. lunch時,會出現一個菜單,提示選擇構建所需的設備。現在最後的,也是最後一步做構建...

make -j5 > buildlog.log 2>&1 

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

這最後一步將取決於您擁有多少核心(通常n個核心+ 1),需要一段時間才能構建,我的筆記本電腦上運行Arch Linux 64位需要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(讓·巴蒂斯特缺乳的事 - 在「老闆」用於管理/分發來自Google的源代碼),他的構建步驟是...

make -j32 

是! 32核心!那.....非常強大。

+0

我一直在尋找這個!,很好的答案! – DGomez 2012-07-18 18:49:44

+0

你知不知道,我可以閱讀一些文檔,開始在這個東西? – DGomez 2012-07-18 18:50:17

+0

這不能更有幫助。謝謝。 – korro 2013-02-05 22:33:06

1

如果你正在尋找進入事物的硬件方面可能是最豐富的資料,我發現已經:

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

仔細閱讀他們爲尋求構建android設備的製造商編寫的文檔,這是您將找到的最全面/最完整的參考資料。