AOSP的Android设备配置

时间:2012-07-05 21:18:17

标签: android

我已经下载了Android源代码。现在我想为自己的设备(LG GT540)制作它。我听说你需要为此创建一些“设备配置”。虽然有几个开发人员已经为我的设备创建了设备配置,但​​是我想创建自己的设备,只是为了学习。
我看到了很多文件,如BoardConfig.mk,AndroidProducts.mk等。但是不知道他们做什么。除了它们包含很多配置。除此之外,还没有很好的文档。
任何有Android移植和设备配置经验的人都可以帮助我吗?

4 个答案:

答案 0 :(得分:106)

正确...所以你想建立自己的设备树,请继续阅读。

免责声明: 这绝不是完整的,并且会有遗漏,因为已经解释了所有这些我的头脑并复制粘贴我在这里的某些位我自己的设备树。

设备树,例如/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 build.prop根目录中的/system中。

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文件的内部结构。

现在,在vendor/部分,在AOSP中,再次简单地说,相关并与device/树对应,如继续此示例所示vendor/lg/gt540/lunch获取。还有更多的make文件,但普遍的共识是有一个名为proprietary的目录,其中包含被复制的专有库(由于close-source等)。复制库的文件在文件 device-vendor-blobs.mk 中指定,在本例中为gt540-vendor-blobs.mk

当魔术发生时,请执行以下操作:

. build/envsetup.sh

这是读取每个device/子目录中的所有条目,并且"记住它们",因此构建系统知道使用了什么类型的目标等。

调用. lunch时,会出现一个菜单,提示您选择构建所需的设备。现在是构建构建的最后一步也是最后一步......

make -j5 > buildlog.log 2>&1

我在另一个终端上运行multitail并监控buildlog.log文件以检查并确保其构建。

最后一步将取决于您拥有多少核心(n核心+ 1作为规则)并且需要一段时间才能构建,GB构建需要40分钟才能在我的笔记本电脑上运行Arch Linux 64bit,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核!那......非常强大。

答案 1 :(得分:7)

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

答案 2 :(得分:2)

为设备构建Android的任何人都可以使用以下资源: http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?bid=98

(ODROID中Android平台开发的实用实际方法)

虽然ODROID主板上有一些特别之处,但它仍然可以深入了解Android的内部工作方式以及新主板的必要定制。

答案 3 :(得分:1)

如果你想进入硬件方面,可能是我发现的最具信息量的资源:

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

阅读他们为希望构建Android设备的制造商编写的文档,这是您将找到的最全面/最完整的参考。