自定义设备上构建AOSP

13
我正在构建 AOSP 4.2 Jelly Bean。 当我构建默认的 full-eng 配置并在模拟器上运行时,一切正常。
我需要构建自定义设备并运行它(在模拟器上进行测试以确保其真正工作,并在实际设备上运行)。 当我基于 full_base.mk 文件创建自定义设备并在模拟器上运行时,模拟器会卡在带有 ANDROID 文本的第一个屏幕上,并且根本无法加载。我已经在 out 目录中构建出 system.img、userdata.img 和 ramdisk.img。这是我构建自定义 AOSP 并在设备上运行所需的全部内容吗?我可以在模拟器上运行我的构建版本还是只能在实际设备上运行?
我为实际设备构建 AOSP 是否需要其他额外的东西:内核、设备驱动程序等?
自定义设备文件夹文件(device/my_company/my_product):
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

ifneq ($(filter my_product,$(TARGET_DEVICE)),)
include $(call all-makefiles-under,$(LOCAL_PATH))
endif

AndroidProducts.mk

PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/full_myproduct.mk

BoardConfig.mk

TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true

TARGET_ARCH := arm

TARGET_ARCH_VARIANT := armv7-a
TARGET_CPU_VARIANT := generic
TARGET_CPU_ABI := armeabi-v7a
TARGET_CPU_ABI2 := armeabi

HAVE_HTC_AUDIO_DRIVER := true
BOARD_USES_GENERIC_AUDIO := true

# no hardware camera
USE_CAMERA_STUB := true

# Enable dex-preoptimization to speed up the first boot sequence
# of an SDK AVD. Note that this operation only works on Linux for now
ifeq ($(HOST_OS),linux)
  ifeq ($(WITH_DEXPREOPT),)
    WITH_DEXPREOPT := true
  endif
endif

# Build OpenGLES emulation guest and host libraries
BUILD_EMULATOR_OPENGL := true

# Build and enable the OpenGL ES View renderer. When running on the emulator,
# the GLES renderer disables itself if host GL acceleration isn't available.
USE_OPENGL_RENDERER := true

full_myproduct.mk

$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)

#DEVICE_PACKAGE_OVERLAYS :=
#PRODUCT_PACKAGES +=
#PRODUCT_COPY_FILES +=

PRODUCT_NAME := full_myproduct
PRODUCT_DEVICE := myproduct
PRODUCT_MODEL := Customized Android
PRODUCT_BRAND := Android

vendorsetup.sh

add_lunch_combo full_myproduct-userdebug

logcat 里有什么信息吗?通常情况下,这种情况下会有一些系统服务崩溃的信息。 - StarPinkER
你说过你正在为这个设备构建:http://www.alibaba.com/product-gs/721860794/7_capacitive_screen_multi_touch_tablet.html,不知道你是在哪里找到了这个设备的驱动程序呢? - Rom098
驱动程序由供应商提供。如果您为特定设备创建自定义ROM(非Google设备,Google设备驱动程序可免费使用),则需要联系供应商并请求特定设备驱动程序。 - Veaceslav Gaidarji
@VeaceslavGaidarji 谢谢您提供的信息。 - Rom098
2个回答

12

看起来你对AOSP编译系统有很好的掌握,特别是如何添加新设备。

full-eng只针对模拟器。通常,您会为涉及的设备构建自定义.img,因为硬件驱动程序在设备是否正常工作方面起着重要作用。

例如,如果您有一个grouper maguro ,则最终会为该设备构建,而不是full-eng。当您将设备添加到device/vendor/树中时,lunch应列出附加设备。Google在其[网站][https://developers.google.com/android/nexus/drivers]上提供了构建Nexus系列设备所需的文件。

您正在为哪个自定义设备构建?如果您的设备正在商业上销售,那么XDA上的某些人可能正在尝试将AOSP和相关软件(CM,AOKP等)移植到您的设备上。

即使您的设备不在XDA上,也很可能与其他许多可以在AOSP上找到的设备具有相同的硬件。此时,您需要挑选特定于驱动程序的代码位,例如wifi芯片组,音频设备等。

我没有一个好的构建入门指南,但http://wiki.cyanogenmod.org/w/Main_Page对你应该是相当有帮助的。自创建以来,这个Wiki已经改进了很多,现在拥有大量有用的信息。


我必须为设备http://www.alibaba.com/product-gs/721860794/7_capacitive_screen_multi_touch_tablet.html构建。如果我理解正确,对于自定义构建,我定义的最小偏好不足够,但我还需要在device/my_company/my_product文件夹中指定和提供驱动程序? - Veaceslav Gaidarji
驱动程序将位于 vendor/my_company/my_product 文件夹中,但是可以看一下 CyanogenMod 是如何做的:https://github.com/TheMuppets/proprietary_vendor_samsung - Ehtesh Choudhury

1
你缺少一些供应商驱动程序。 前往:https://developers.google.com/android/nexus/drivers下载适用于确切设备的相应驱动程序。将*.sh文件放在你的aosp顶级目录中。运行每个shell文件并接受条款。
然后重新编译代码!

我认为这是解决方案。我使用Android 5.1.1构建AOSP,但OpenGL存在问题(我在logcat中发现了问题)。 - GensaGames

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接