Bootstrap

Android系统10 RK3399 init进程启动(十三) 产品配置相关文件

说明

系统:Android10.0

设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)

前言

         上篇文章介绍了产品配置的结构和重要目录, 而这些目录中有几个非常重要的文件, 本文重点介绍和产品配置相关的文件和脚本。


一, AndroidProducts.mk(必须)

        AndroidProducts.mk文件用于描述产品列表, 表示当前公司有哪些产品, 主要包括PRODUCT_MAKEFILES变量, 会记录各个产品所用的Makefile的列表,比如有两个产品,rk3399.mk,  firefly.mk等, 一般格式如下:

PRODUCT_MAKEFILES :=  $(LOCAL_DIR)/<first_product_name>.mk \             

                          $(LOCAL_DIR)/<second_product_name>.mk

        同时在新的Android系统版本中可以添加COMMON_LUNCH_CHOICES编译, 用于在lunch命令之后显示的产品选项, 该变量起着类似旧版本vendorsetup.sh的作用。一般AndroidProducts.mk可以放在:

device/公司名/AndroidProducts.mk

device/公司名/产品名/AndroidProducts.mk        

 当lunch命令执行的的时候, 会自动在device、vendor、product目录中查找AndroidProducts.mk文件.

二, <product_name>.mk(必须)

某个产品的Makefile,比如rk3399.mk内容:默认自带的软件,厂商名,产品名称,设备名称,等信息。 同时也可以定义PRODUCT_COPY_FILES, PRODUCT_PROPERTY_OVERRIDES,PRODUCT_PACKAGES,用于对设备中需要用到的特有文件进行预编译和客制化:

PRODUCT_NAME := rk3399_roc_pc_plus

PRODUCT_DEVICE := rk3399_roc_pc_plus

PRODUCT_BRAND := rockchip

PRODUCT_MODEL := ROC-RK3399-PC-PLUS

PRODUCT_MANUFACTURER := rockchip

PRODUCT_FIREFLY_NAME := HDMI

 

三, BoardConfig.mk文件(必须)

更多用于定义和硬件相关的底层特性和变量,比如当前源码支持的cpu 位数(64/32位),bootloader和kernel, 是否支持摄像头,GPS导航等一些板级特性,BoardConfig.mk一般都在device或者vendor目录下的4级子目录下 例如:

TARGET_ARCH := arm64

TARGET_ARCH_VARIANT := armv8-a

TARGET_CPU_ABI := arm64-v8a

TARGET_CPU_ABI2 :=

TARGET_CPU_VARIANT := cortex-a53

TARGET_CPU_SMP := true

TARGET_2ND_ARCH := arm

TARGET_2ND_ARCH_VARIANT := armv7-a-neon

TARGET_2ND_CPU_ABI := armeabi-v7a

TARGET_2ND_CPU_ABI2 := armeabi

TARGET_2ND_CPU_VARIANT := cortex-a15

PRODUCT_KERNEL_ARCH := arm64

TARGET_PREBUILT_KERNEL := kernel/arch/arm64/boot/Image

BOARD_PREBUILT_DTBIMAGE_DIR := kernel/arch/arm64/boot/dts/rockchip

PRODUCT_KERNEL_DTS ?= rk3399-sapphire-excavator-edp-avb

PRODUCT_KERNEL_CONFIG ?= rockchip_defconfig android-10.config rk3399.config

PRODUCT_UBOOT_CONFIG ?= rk3399

BOARD_NFC_SUPPORT := false

BOARD_HAS_GPS := false

BOARD_HAVE_DONGLE ?= false

BOARD_GRAVITY_SENSOR_SUPPORT := true

BOARD_COMPASS_SENSOR_SUPPORT := false

BOARD_GYROSCOPE_SENSOR_SUPPORT := false

BOARD_PROXIMITY_SENSOR_SUPPORT := false

BOARD_LIGHT_SENSOR_SUPPORT := true

BOARD_PRESSURE_SENSOR_SUPPORT := false

BOARD_TEMPERATURE_SENSOR_SUPPORT := false

BOARD_USB_HOST_SUPPORT := true

四, device.mk(非必须)

一般作为通用的文件(如同样的soc做成不同产品的通用部分)被各种产品<product_name>.mk继承进来,比如:

./product/aosp_x86_64.mk:45:$(call inherit-product, $(SRC_TARGET_DIR)/board/generic_x86_64/device.mk)

rk3399_roc_pc_plus产品中的rk3399_roc_pc_plus.mk中

./rk3399_roc_pc_plus.mk:26:$(call inherit-product, device/rockchip/rk3399/device.mk)

./rk3399_roc_pc_plus.mk:27:$(call inherit-product, device/rockchip/common/device.mk)

里面常见有如下内容:

PRODUCT_COPY_FILES := \

        device/xxx/init.rc:root/init.rc \

PRODUCT_PROPERTY_OVERRIDES += \

                ro.ril.ecclist=112,911 \

PRODUCT_PACKAGES += \

    librkisp_aec \

五,vendorsetup.sh文件(非必须)

 用于将产品名放入到lunch选项列表中,在source build/envsetup.sh的时候会被自动调用,  一般内容如下:

add_lunch_combo xxxx-user

add_lunch_combo xxxx-userdebug

add_lunch_combo xxxx-eng

现在基本上都被AndroidProducts.mk中的COMMON_LUNCH_CHOICES替代:

COMMON_LUNCH_CHOICES := \

    rk3399_mid-userdebug \

    rk3399_mid-user \

    rk3399_atv-userdebug \

 

六,AndroidBoard.mk文件(非必须)
 

该文件被系统编译系统核心代码包含进来:

./build/make/target/board/Android.mk:7:-include $(TARGET_DEVICE_DIR)/AndroidBoard.mk

不过在./build/target中并没有这种文件,也就是说可能用的不多。 而在rk3399中会有这个文件, 该文件更像是一个传统的Makefile,完成了将依赖编译成目标的规则, 比如:

rebuild_fstab := $(intermediates)/fstab.rk30board

INSTALLED_RK_VENDOR_FSTAB := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)/etc/$(notdir $(rebuild_fstab))

$(INSTALLED_RK_VENDOR_FSTAB) : $(rebuild_fstab)

    $(call copy-file-to-new-target-with-cp)

上面主要完成是fstab.rk30board文件重新生成和拷贝。

总结

先理解好产品配置中涉及到的文件意义, 后面自己配置产品就大体知道什么意思了。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;