AOSP的Android设备configuration
我已经下载了Android源代码。 现在我想为我自己的设备(LG GT540)。 我听说你需要为此创build一些“设备configuration”。 虽然有几个开发者已经为我的设备创build了设备configuration,但是我想创build自己的,只是为了学习。
我看到很多像BoardConfig.mk,AndroidProducts.mk等文件,但不知道他们在做什么。 除此之外还包含很多configuration。 在这方面,没有一个很好的文件。
任何有经验的Android移植和设备configuration的人能帮助我吗?
对…所以你想build立你自己的设备树,阅读。
免责声明:这不是完整的,并且将会有遗漏,就像我已经解释了所有这一切的头顶上,并复制粘贴在我自己的设备树上的某些位。
设备树(例如/device/lg/gt540
将包含以下make文件:
- Android.mk – 这将告诉构build系统包括和build立专门为您的设备来源。 看下面的例子。 这取决于设备和硬件,可以在示例设备树下使用libsensors,liblights,libcamera子目录,即
/device/lg/gt540/libsensors
,/device/lg/gt540/liblights
,/device/lg/gt540/libcamera
等 - AndroidBoard.mk – 这是内核,构build系统使用它来放下内核映像(更多关于这个在几分钟内)
- AndroidProducts.mk – 指定适当的设备的make文件,用于构build。 即
/device/lg/gt540/device_gt540.mk
,这也是具体的。 - device_xxxxx.mk – 指定要复制到最终输出中的属性和额外值,在这种情况下,它可能是例如
device_gt540.mk
- BoardConfig.mk – 这是一切,这是编译器有条件的标志设置,分区布局,启动地址,虚拟硬盘大小,等等。
让我们看看每一个,看看它们都适合在哪里。
Android.mk:
ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),xxxxx) include $(call all-named-subdir-makefiles, recovery libsensors liblights libcamera ....) endif
这就是构build如何使用它来build立恢复,传感器,灯光和相机(当然会有更多),它的说法' 哟build设者,进入每个指定的目录,并build立各自的来源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)
现在,这是告诉构build系统,能够将此内核放入out/target/product/lg/gt540
(注意与设备树目录的关联?)
AndroidProducts.mk:
PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/device_gt540.mk
它以“ Yo Builder ”的forms告诉构build,请读取该设备生成文件并在构build完成后处理它。 “
* 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
的根目录下findbuild.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
。 另外,更重要的是,我们正在告诉构build系统使用目标平台来交叉编译源代码(* TARGET_BOARD_PLATFORM * / * TARGET_CPU_ABI *)。这里会有更多的信息,例如条件标记传递给编译器,一个例子。 我们指定HAVE_FM_RADIO
来告诉它,当处理FM无线电系统的源时,有条件地编译源的部分。 再次,这是硬件的具体和里程将有所不同,这也适用于启动地址。 简而言之,这就是说' 呦build设者,阅读该死的variables,记住它们,并在交叉编译这些源文件时应用它们! “
现在显示每个Android构build生成文件的内部结构。
现在,在AOSP的vendor/
部分,简单地说,再一次,相关性和对应的device/
树,继续这个例子, vendor/lg/gt540/
lunch
拿起。 在那里有更多的make文件,但一般的共识是有一个名为proprietary
的目录,其中包含专有的库(由于closures源等)被复制。 在文件device-vendor-blobs.mk中指定库的复制,在这种情况下, gt540-vendor-blobs.mk
。
当魔术发生时,通过执行以下操作:
. build/envsetup.sh
这是读取在每个device/
子目录中find的所有条目,并“记住它们”,因此构build系统知道使用哪种types的目标等。
当. lunch
. lunch
被调用,出现一个菜单提示挑选需要build立的设备。 现在做最后一步,最后一步做…
make -j5 > buildlog.log 2>&1
我在另一个terminal上运行multitail
,并监视buildlog.log
文件来检查并确保其构build。
最后一步将取决于你有多less个核心(通常n个核心+ 1),需要一段时间才能完成,我的笔记本电脑上运行Arch Linux 64bit需要40分钟,ICS需要花费大约2小时30分钟。 所以里程会根据您的机器的功率types而有所不同。
当构build完成时,一个小钟响起,在所述日志文件的底部,我看到这个:
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 – pipe理/分发Google来源的“老大”),他的构build步骤是…
make -j32
对! 32核心! 这…..是非常强大的。
这里有一些信息: http : //elinux.org/Android_Device
对于任何为Android设备制作设备的人来说,这是一个很好的资源: http : //com.odroid.com/sigong/nf_file_board/nfile_board_view.php?bid=98
(在ODROID中实现Android平台开发的实际方法)
尽pipeODROID板上有一些特殊的东西,但它仍然能够深入了解Android的内部运作情况,并为新板提供必要的定制。
如果你想进入硬件的一面,可能是我发现的最具信息性的资源是:
http://source.android.com/compatibility/overview.html
阅读他们为制造商寻找构buildAndroid设备的文档,这是最彻底的/完整的参考,你会发现。