gpt4 book ai didi

AOSP 的 Android 设备配置

转载 作者:IT王子 更新时间:2023-10-28 23:48:14 24 4
gpt4 key购买 nike

我已经下载了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/。在这种情况下。注意属性的覆盖是如何结束的,它们最终会出现在 build.prop 中。在 /system 的根目录中找到的Android ROM。

    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 radio 系统的源时,有条件地编译源的部分。同样,这是特定于硬件的,里程会有所不同,这也适用于引导地址。简而言之,这就是说“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 位的笔记本电脑上构建 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核!那个……太强大了。

    关于AOSP 的 Android 设备配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11352709/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com