zoukankan      html  css  js  c++  java
  • Android编译系统参考手册


    http://android.cloudchou.com/build/core/tasks/kernel.php


    build/core/tasks/kernel.mk

    定义生成内核的规则

    TARGET_AUTO_KDIR

    TARGET_AUTO_KDIR := $(shell echo $(TARGET_DEVICE_DIR) | sed -e 's/^device/kernel/g')
    自动设置的内核目录
    比如i9100,那么自动设置的内核目录是
       kernel/samsung/i9100

    TARGET_KERNEL_SOURCE

    TARGET_KERNEL_SOURCE ?= $(TARGET_AUTO_KDIR)
    内核源码目录
     默认 kernel//
     一般在BoardConfig.mk里配置

    KERNEL_SRC

    KERNEL_SRC := $(TARGET_KERNEL_SOURCE)
    内核源码目录

    KERNEL_DEFCONFIG

    KERNEL_DEFCONFIG := $(TARGET_KERNEL_CONFIG)
    编译内核用的配置文件
    一般在BoardConfig.mk里配置

    VARIANT_DEFCONFIG

    VARIANT_DEFCONFIG := $(TARGET_KERNEL_VARIANT_CONFIG)
    变量配置
    一般在BoardConfig.mk里配置

    TARGET_KERNEL_SELINUX_CONFIG

    selinux配置
    一般在BoardConfig.mk里配置

    KERNEL_OUT

    KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ
    示例:
       out/target/product/i9100/obj/KERNEL_OBJ

    KERNEL_CONFIG

    生成的编译内核的配置文件   
    KERNEL_CONFIG := $(KERNEL_OUT)/.config
    示例:
    out/target/product/i9100/obj/KERNEL_OBJ/.config

    BOARD_USES_UBOOT

    是否启用uboot
    一般在BoardConfig.mk里配置

    BOARD_USES_UNCOMPRESSED_BOOT

    是否启用无压缩的boot
    一般在BoardConfig.mk里配置

    TARGET_PREBUILT_INT_KERNEL

    ifeq ($(BOARD_USES_UBOOT),true)
       TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(TARGET_ARCH)/boot/uImage
       TARGET_PREBUILT_INT_KERNEL_TYPE := uImage
    else ifeq ($(BOARD_USES_UNCOMPRESSED_BOOT),true)
       TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(TARGET_ARCH)/boot/Image
       TARGET_PREBUILT_INT_KERNEL_TYPE := Image
    else
       TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(TARGET_ARCH)/boot/zImage
       TARGET_PREBUILT_INT_KERNEL_TYPE := zImage
    endif
    示例:
        out/target/product/i9100/obj/KERNEL_OBJ/arch/arm/boot/zImage

    TARGET_PREBUILT_INT_KERNEL_TYPE

    见TARGET_PREBUILT_INT_KERNEL

    TARGET_PREBUILT_KERNEL

    预编译的内核
    一般在BoardConfig.mk里配置
    在Recovery适配时经常需要设置该项
    示例:
      TARGET_PREBUILT_KERNEL := $(LOCAL_DIR)/kernel

    HAS_PREBUILT_KERNEL

    是否有预编译的内核

    NEEDS_KERNEL_COPY

    是否需要拷贝内核

    FULL_KERNEL_BUILD

    是否需要编译内核源代码

    KERNEL_BIN

    内核文件
    ifeq "$(wildcard $(KERNEL_SRC) )" ""
       ifneq ($(HAS_PREBUILT_KERNEL),)
    KERNEL_BIN := $(TARGET_PREBUILT_KERNEL)     
      endif
         else
      ifeq ($(TARGET_KERNEL_CONFIG),)
         ....
      else
         ifeq ($(TARGET_USES_UNCOMPRESSED_KERNEL),true)
        KERNEL_BIN := $(KERNEL_OUT)/piggy
         else
     KERNEL_BIN := $(TARGET_PREBUILT_INT_KERNEL)
         endif     
      endif   
         endif
         示例:
    out/target/product/i9100/obj/KERNEL_OBJ/arch/arm/boot/zImage

    KERNEL_HEADERS_INSTALL

    KERNEL_HEADERS_INSTALL := $(KERNEL_OUT)/usr
    示例:
      out/target/product/i9100/obj/KERNEL_OBJ/usr

    KERNEL_MODULES_INSTALL

    KERNEL_MODULES_INSTALL := system
    内核模块的安装目录

    KERNEL_MODULES_OUT

    KERNEL_MODULES_OUT := $(TARGET_OUT)/lib/modules
    内核模块的的实际安装目录
    out/target/product/i9100/system/lib/modules

    Function:  mv-modules

    移动模块
    在system/lib/modules找到modules.order文件,
    然后找到该文件所在目录下的kernel目录的ko模块文件
    对这些文件用arm-eabi-strip进行strip处理
    然后将其移至system/lib/modules

    Function:  clean-module-folder

    在system/lib/modules找到modules.order文件
    然后删除该文件所在的目录

    ccache

    ccache程序   
    ifneq ($(USE_CCACHE),)
      # search executable
       ccache =
       ifneq ($(strip $(wildcard $(ANDROID_BUILD_TOP)/prebuilts/misc/$(HOST_PREBUILT_EXTRA_TAG)/ccache/ccache)),)
         ccache := $(ANDROID_BUILD_TOP)/prebuilts/misc/$(HOST_PREBUILT_EXTRA_TAG)/ccache/ccache
       else
         ifneq ($(strip $(wildcard $(ANDROID_BUILD_TOP)/prebuilts/misc/$(HOST_PREBUILT_TAG)/ccache/ccache)),)
     ccache := $(ANDROID_BUILD_TOP)/prebuilts/misc/$(HOST_PREBUILT_TAG)/ccache/ccache
         endif
       endif
     endif

    ARM_CROSS_COMPILE

    交叉编译工具链所在目录
     ifneq ($(TARGET_KERNEL_CUSTOM_TOOLCHAIN),)
      ifeq ($(HOST_OS),darwin)
    ARM_CROSS_COMPILE:=CROSS_COMPILE="$(ccache) $(ANDROID_BUILD_TOP)/prebuilt/darwin-x86/toolchain/$(TARGET_KERNEL_CUSTOM_TOOLCHAIN)/bin/arm-eabi-"
      else
    ARM_CROSS_COMPILE:=CROSS_COMPILE="$(ccache) $(ANDROID_BUILD_TOP)/prebuilt/linux-x86/toolchain/$(TARGET_KERNEL_CUSTOM_TOOLCHAIN)/bin/arm-eabi-"
      endif
        else
      ARM_CROSS_COMPILE:=CROSS_COMPILE="$(ccache) $(ARM_EABI_TOOLCHAIN)/arm-eabi-"
        endif

    MAKE_FLAGS

    ifeq ($(HOST_OS),darwin)
      MAKE_FLAGS := C_INCLUDE_PATH=$(ANDROID_BUILD_TOP)/external/elfutils/libelf
    endif   

    TARGET_KERNEL_MODULES

    ifeq ($(TARGET_KERNEL_MODULES),)
        TARGET_KERNEL_MODULES := no-external-modules
    endif   

    Target:  $(KERNEL_OUT)

    创建$(KERNEL_OUT)目录
    即目录out/target/product/i9100/obj/KERNEL_OBJ

    Target:  $(KERNEL_CONFIG)

    生成编译内核源代码用的配置文件
    $(KERNEL_CONFIG): $(KERNEL_OUT)
       $(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(TARGET_ARCH) $(ARM_CROSS_COMPILE) VARIANT_DEFCONFIG=$(VARIANT_DEFCONFIG) SELINUX_DEFCONFIG=$(SELINUX_DEFCONFIG) $(KERNEL_DEFCONFIG)

    Target:  $(KERNEL_OUT)/piggy

    生成piggy内核
    $(KERNEL_OUT)/piggy : $(TARGET_PREBUILT_INT_KERNEL)
    $(hide) gunzip -c $(KERNEL_OUT)/arch/$(TARGET_ARCH)/boot/compressed/piggy.gzip > $(KERNEL_OUT)/piggy

    TARGET_KERNEL_BINARIES

    生成内核,并安装好模块
    TARGET_KERNEL_BINARIES: $(KERNEL_OUT) $(KERNEL_CONFIG) $(KERNEL_HEADERS_INSTALL)
    #生成内核
    $(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(TARGET_ARCH) $(ARM_CROSS_COMPILE) $(TARGET_PREBUILT_INT_KERNEL_TYPE)
    #生成模块
    -$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(TARGET_ARCH) $(ARM_CROSS_COMPILE) modules
    #安装模块至system/lib/modules目录,但是还需strip处理
    -$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) INSTALL_MOD_PATH=../../$(KERNEL_MODULES_INSTALL) ARCH=$(TARGET_ARCH) $(ARM_CROSS_COMPILE) modules_install
    $(mv-modules)
    $(clean-module-folder)

    Target:  $(TARGET_PREBUILT_INT_KERNEL)

    安装模块,并清除先前不用的模块所在目录

    ALL_PREBUILT

    ALL_PREBUILT += $(file)
    $(file) : $(KERNEL_BIN) | $(ACP)
       $(transform-prebuilt-to-target)
    ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET)

  • 相关阅读:
    vue中打印 使用mapState映射 vuex state 中的数据 结果显示 [__ob__: Observer]的问题
    css里面鼠标的形状-----》easyui哪点事
    多张表进行关联查询---->删除某个数据的时候出现还有子记录的提示
    MyEclipse迁移过程中Tomcat版本不一致的解决办法
    Easyui里面动态设置输入框的可见性
    PL/SQL那点事-->修改Oracle数据库里面的字段长度
    PL/SQL那点事-->SqlSession operation; SQL []; ORA-01722: 无效数字
    PL/SQL数据开发那点事
    PL/SQL数据库开发那点事
    java类型与jdbc类型对应表
  • 原文地址:https://www.cnblogs.com/ztguang/p/12645304.html
Copyright © 2011-2022 走看看