Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AOSP的Android设备配置_Android - Fatal编程技术网

AOSP的Android设备配置

AOSP的Android设备配置,android,Android,我已经下载了Android源代码。现在我想为我自己的设备(LG GT540)制作。我听说您需要为此创建一些“设备配置”。虽然有几个开发人员已经为我的设备创建了设备配置,但我想创建自己的设备配置,只是为了学习。我看到了很多文件,如BoardConfig.mk、AndroidProducts.mk等,但不知道它们是做什么的。此外,它们包含许多配置。除此之外,还没有一个很好的文档来说明这一点。有Android移植和设备配置经验的人能帮我吗?对。。。因此,如果您想构建自己的设备树,请继续阅读 免责声明:

我已经下载了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文件。i、 e.
    /device/lg/gt540/devicegt540.mk
    ,这也是特定的
  • device_uxxxxx.mk指定要复制到最终输出中的属性和附加项,在这种情况下,它可以是例如
    device_gt540.mk
  • BoardConfig.mk-这是全部的内容,这是设置编译器条件标志、分区布局、引导地址、ramdisk大小等的地方
让我们看看其中的每一个,看看它们都适合什么地方

Android.mk:

这就是构建将如何使用它来构建恢复、传感器、灯光和摄像头(当然还有更多),它说“Yo Builder,进入指定的每个目录,构建各自的源plskthxbai”

AndroidBoard.mk:

现在,这告诉构建系统,能够将此内核放入
out/target/product/lg/gt540
(注意与设备树目录的相关性?)

AndroidProducts.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:

这是一个摘录,请注意我们是如何指定内核的基址的,这是编译完成后生成
boot.img
的方式,再次放入
out/target/product/lg/gt540/boot.img
。此外,更重要的是,我们告诉构建系统使用目标平台交叉编译源代码(*target_BOARD_platform*/*target_CPU_ABI*),其中将包含更多信息,例如传递给编译器的条件标志。我们指定了指令
HAVE_FM_RADIO
,告诉它在处理调频广播系统的源代码时,有条件地编译部分源代码。同样,这是特定于硬件的,里程数会有所不同,这也适用于引导地址。简言之,这是说“Yo Builder,读取该死的变量,记住它们,并在交叉编译这些源文件时应用它们!”

现在显示了每个Android构建文件的内部结构

现在,在AOSP中的
vendor/
部分,再次简单地关联并与
device/
树相对应,如继续本例所示,
vendor/lg/gt540/
午餐
拾取。那里有更多的make文件,但普遍的共识是有一个名为
propertial
的目录,其中包含被复制的专有libs(由于关闭源代码等原因)。库的复制在文件device-vendor-blobs.mk中指定,在本例中为
gt540 vendor blobs.mk

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

. build/envsetup.sh
这是读取在每个
设备/
子目录中找到的全部条目,并“记住它们”,以便构建系统知道使用的目标类型等

当<代码>。午餐被调用时,会出现一个菜单,提示选择构建所需的设备。现在,完成构建的最后一步

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-老板)
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
. build/envsetup.sh
make -j5 > buildlog.log 2>&1
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
make -j32