【问题标题】:Android device configuration for AOSPAOSP 的 Android 设备配置
【发布时间】:2012-07-05 21:18:17
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

    对...所以您想构建自己的设备树,请继续阅读。

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

    设备树,例如/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-file 的内部都已显示。

    现在,在它的 vendor/ 部分,在 AOSP 中,再次简单地关联并对应于 device/ 树,如继续此示例,vendor/lg/gt540/ 被 @987654342 拾取@。那里有更多的 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 位的笔记本电脑上,GB 构建需要 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 - 管理/分发来自 Google 的源代码的“老板”),他的构建步骤是这样的......

    make -j32 
    

    是的! 32核!那个……太强大了。

    【讨论】:

    • 我在找这个!很好的答案!
    • 你知道吗,我可以阅读一些文档来开始这些东西吗?
    • 这非常有用。谢谢。
    • vendorsetup.sh 怎么样?例如,如果此文件存在并写入了add_lunch_combo full_gt540-eng,我只能看到午餐选项。
    【解决方案2】:

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

    【讨论】:

    • 那里没有太多解释(你的链接),但 +1 因为至少所有东西都在一个地方。
    【解决方案3】:

    对于任何为设备构建 Android 的人来说,这里是一个极好的资源: http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?bid=98

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

    虽然其中的一些内容是 ODROID 板所特有的,但它仍然可以很好地了解 Android 的内部工作原理以及新板的必要定制。

    【讨论】:

    【解决方案4】:

    如果您想了解硬件方面的问题,我发现的信息量最大的资源可能是:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-23
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      相关资源
      最近更新 更多