1,系统编译配置文件脚本目录~/8368U.TD/build/Kconfig
一)比喻配置屏幕分表率,比喻配置GLB_GMNCFG_ENABLE_800_480_UI
~/8368U.TD/build/Kconfig
menu "Gemini UI Setting" choice prompt "UI Framework Selection" default GLB_GMNCFG_ENABLE_QT_FRAMEWORK config GLB_GMNCFG_ENABLE_QT_FRAMEWORK bool "Qt Framework" config GLB_GMNCFG_ENABLE_TD_FRAMEWORK bool "TD Framework" endchoice choice prompt "UI Resolution" default GLB_GMNCFG_ENABLE_1024_600_UI config GLB_GMNCFG_ENABLE_800_480_UI bool "800*480 UI" config GLB_GMNCFG_ENABLE_1024_600_UI bool "1024*600_UI" config GLB_GMNCFG_ENABLE_1280_720_UI depends on GLB_GMNCFG_ENABLE_TD_FRAMEWORK bool "1280*720 UI (Not support on Qt)"
二)
maxiongying@dvr-server:~/8368U.TD/build$ grep -irn "GLB_GMNCFG_ENABLE_1024_600_UI" Kconfig:277: default GLB_GMNCFG_ENABLE_1024_600_UI Kconfig:280: config GLB_GMNCFG_ENABLE_1024_600_UI Kconfig:331: default 1024 if GLB_GMNCFG_ENABLE_1024_600_UI Kconfig:338: default 600 if GLB_GMNCFG_ENABLE_1024_600_UI Kconfig:357: default 1024 if GLB_GMNCFG_ENABLE_1024_600_UI Kconfig:364: default 600 if GLB_GMNCFG_ENABLE_1024_600_UI Kconfig:1084: default 2400 if GLB_GMNCFG_ENABLE_1024_600_UI && (GLB_GMNCFG_FB0_BUFNUM=1) Kconfig:1085: default 4800 if GLB_GMNCFG_ENABLE_1024_600_UI && (GLB_GMNCFG_FB0_BUFNUM=2) Kconfig:1086: default 7200 if GLB_GMNCFG_ENABLE_1024_600_UI && (GLB_GMNCFG_FB0_BUFNUM=3) Kconfig:1096: default 2400 if GLB_GMNCFG_FB1_ACTIVE && GLB_GMNCFG_ENABLE_1024_600_UI && (GLB_GMNCFG_FB1_BUFNUM=1) Kconfig:1097: default 4800 if GLB_GMNCFG_FB1_ACTIVE && GLB_GMNCFG_ENABLE_1024_600_UI && (GLB_GMNCFG_FB1_BUFNUM=2) Kconfig:1098: default 7200 if GLB_GMNCFG_FB1_ACTIVE && GLB_GMNCFG_ENABLE_1024_600_UI && (GLB_GMNCFG_FB1_BUFNUM=3) Kconfig:1108: default 2400 if GLB_GMNCFG_FB2_ACTIVE && GLB_GMNCFG_ENABLE_1024_600_UI && (GLB_GMNCFG_FB2_BUFNUM=1) Kconfig:1109: default 4800 if GLB_GMNCFG_FB2_ACTIVE && GLB_GMNCFG_ENABLE_1024_600_UI && (GLB_GMNCFG_FB2_BUFNUM=2) Kconfig:1110: default 7200 if GLB_GMNCFG_FB2_ACTIVE && GLB_GMNCFG_ENABLE_1024_600_UI && (GLB_GMNCFG_FB2_BUFNUM=3) Kconfig:1163: default 1200 if(GLB_GMNCFG_ENABLE_1024_600_UI && GLB_GMNCFG_RAL_FMT_LUT8) Kconfig:1166: default 4800 if(GLB_GMNCFG_ENABLE_1024_600_UI && GLB_GMNCFG_RAL_FMT_ARGB8888) platform_cfg/4RlsCode_8368_U_demov1.4_openall_cfg/defconfig:140:CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI=y platform_cfg/pub_cfg/defconfig:140:CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI=y platform_cfg/soling_td_cfg/defconfig:140:# CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI is not set
maxiongying@dvr-server:~/8368U.TD/application$ grep -irn "GLB_GMNCFG_ENABLE_1024_600_UI" reference_ui/Makefile:40:export CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI reference_ui/etc/Makefile:6:ifeq ($(CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI), y) reference_ui/build_qtap.sh:138: if [ "$CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI" == "y" ]; then Makefile:98:ifeq ($(CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI),y) reference_td/tdLauncher/view/Makefile:13:ifeq ($(CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI),y) reference_td/tdLauncher/sys_config.mk:82:ifeq ($(CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI),y) reference_td/pubtdLauncher/view/Makefile:12:ifeq ($(CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI),y) reference_td/pubtdLauncher/sys_config.mk:78:ifeq ($(CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI),y) reference_td/solingtdLauncher/view/Makefile:12:ifeq ($(CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI),y) reference_td/solingtdLauncher/view/activitys/homeview/src/clockview.cpp:7:#ifdef CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI reference_td/solingtdLauncher/view/activitys/homeview/src/homeview.cpp:393:#elif CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI reference_td/solingtdLauncher/view/activitys/homeview/src/homeview.cpp:699:#if CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI reference_td/solingtdLauncher/view/activitys/homeview/src/homeview.cpp:716:#if CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI reference_td/solingtdLauncher/view/activitys/homeview/src/homeview.cpp:821:#if CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI reference_td/solingtdLauncher/view/activitys/homeview/src/homeview.cpp:837:#elif CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI reference_td/solingtdLauncher/sys_config.mk:74:ifeq ($(CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI),y) ext_config/prj_extcfg.h:60:#define CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI 1 ext_config/global.config:140:CONFIG_GLB_GMNCFG_ENABLE_1024_600_UI=y
2,在工程更目录下执行make命令,都会执行build/Makefile
~/8368U.TD/Makefile
include build/Makefile
3,build/Makefile分析
make help 会打印下面说明
一)make uboot 会执行“build uboot source”
make all 会执行“build uboot/ecos/kernel/sdk/app/rom source”即 分别会执行“build uboot source“、"build ecos source"..“build rom source”
make clean 会执行“clean uboot/ecos/kernel/sdk/app” 会分别执行“clean uboot”、"clean ecos" ...”clean app“
make disclean 会执行“clean uboot/ecos/kernel/sdk/app and platform config”
二)make app 流程 (分析结果:相当于执行./application下的Makefile)
I) @if [ -f $(GEMINI_APP_WRAPPER_FILE) ]; then
相当于“./application/gemini.mk”
II) $(MAKE) $(MAKE_JOBS) -f $(GEMINI_APP_WRAPPER_FILE) build
相当于"make -j CPU_NUM -f ./application/gemini.mk build"
相当于
~/8368U.TD/application/gemini.mk
build: @$(PRJ_SHOWBUILDMESG) @$(RM) -rf $(PRJ_OUTPUT_FILE) @$(MAKE) ${MAKE_JOBS} $(PRJ_EXT_PARA) -C $(APP_ROOT); \ $(PRJ_CHKBUILDRESULT);
相当于:
build:
rm -rf ./application/out/app.sqfs
make ./application
gemini.mk:11:PRJ_OUTPUT_FILE = $(APP_OUT_ROOT)$(APP_BIN_NAME)
core/setupenv.mak:112:APP_OUT_ROOT = $(APP_ROOT)out/
setupenv.mak:110:APP_ROOT = $(GEMINI_ROOT)application/
setupenv.mak:27:GEMINI_ROOT = $(TOPDIR)
core/setupenv.mak:115:APP_BIN_NAME = app.sqfs
~/8368U.TD/build/core/config_gemini.mak
126 PRJ_SHOWBUILDMESG = $(call sys_showmesg, GREEN, [BUILD] $(PRJ_NAME));\ 127 $(call sys_showmesg, LIBLUE, [TARGET] $(PRJ_OUTPUT_FILE)); \ 128 $(call sys_showmesg, BLUE, [GEMINI TARGET] $(TARGET_OUTPUT_FILE));
~/8368U.TD/application/gemini.mk TOPDIR = ./ MAK_WRAPPER_ENV=Y #NO_PARALLEL_BUILD=1 include $(TOPDIR)build/core/config_gemini.mak ################################### # Define this project parameter # ################################### PRJ_NAME = "User Applcation" PRJ_BUILD_ROOT = $(APP_ROOT) PRJ_OUTPUT_FILE = $(APP_OUT_ROOT)$(APP_BIN_NAME) TARGET_OUTPUT_FILE = $(GEMINI_APP_IMAGE) TARGET_OUTPUT_DEL_FILE = PRJ_EXT_PARA = .PHONY: all init build install update clean distclean all: @: init: @$(PRJ_SHOWINITMESG) @$(ECHO) "#sinclude $(GEMINI_PLF_CFG_PATH)" > $(PRJ_EXT_CFG_ROOT)$(PRJ_EXT_CFG_FILE) @$(CALL_WRAPPER_TARGET) update_global_cfg_h @$(CP) $(GEMINI_ROOT_ABS).libcxx_cfg $(PRJ_EXT_CFG_ROOT)libcxx_config @$(MAKE) $(PRJ_EXT_PARA) -C $(PRJ_BUILD_ROOT) $(CONFIG_GLB_GMNCFG_MODEL_APP_CFG) build: @$(PRJ_SHOWBUILDMESG) @$(RM) -rf $(PRJ_OUTPUT_FILE) @$(MAKE) ${MAKE_JOBS} $(PRJ_EXT_PARA) -C $(APP_ROOT); \ $(PRJ_CHKBUILDRESULT); install: @: update: @$(PRJ_BUILDUPDTAE) distclean clean: @$(MAKE) ${MAKE_JOBS} $(PRJ_EXT_PARA) -C $(PRJ_BUILD_ROOT) $@; \ $(PRJ_CHKCLEANRESULT)
~/8368U.TD/build/core/config_gemini.make
101 ifeq ($(NO_PARALLEL_BUILD), 1) 102 MAKE_JOBS = 103 else 104 CPU_NUM = $(shell grep -c processor /proc/cpuinfo) 105 JOB_LIMIT = $(shell echo "${CPU_NUM} * 5 / 4" | bc) 106 LOAD_LIMIT = $(CPU_NUM) 107 MAKE_JOBS = -j $(JOB_LIMIT) -l $(LOAD_LIMIT) 108 endif
三)make clean 流程 (分析结果:相当于执行 找到application下的所有Makefile文件,执行里面的clean操作)
I)分析clean app 流程
build/core/config.mak:134:COMMAND = @set fnord $$MAKEFLAGS; amf=$$2; \
~/8368U.TD/application/build/core/config.mak 134 COMMAND = @set fnord $$MAKEFLAGS; amf=$$2; \ 135 target=`echo $@ | sed s/-recursive//`; \ 136 list='$(SUBDIRS)'; for subdir in $$list; do \ 137 if test -f $$subdir/Makefile; \ 138 then \ 139 echo "Making $$target in $$subdir"; \ 140 (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$target) \ 141 || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ 142 fi; \ 143 done; 144
~/8368U.TD/build/Makefile
clean: outclean @if [ -f $(GEMINI_XBOOT_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_XBOOT_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_UBOOT_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_UBOOT_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_ECOS_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_ECOS_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_ROOTFS_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_ROOTFS_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_KERNEL_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_KERNEL_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_SDK_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_SDK_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_APP_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_APP_WRAPPER_FILE) $@; \ fi @$(CLEAR) @$(call sys_showmesg, GREEN, GEMINI CLEAN DONE ! ); \
下面变量在/8368U.TD/build/core/setupenv.mak中
GEMINI_APP_WRAPPER_FILE = $(APP_ROOT)$(MAKE_WRAPPER_FILE)
APP_ROOT = $(GEMINI_ROOT)application/
GEMINI_ROOT = $(TOPDIR)
TOPDIR = ./ (~/8368U.TD/build/Makefile 中)
MAKE_WRAPPER_FILE = gemini.mk
~/8368U.TD/build/Makefile
TOPDIR = ./ SHELL := /bin/bash include $(TOPDIR)build/core/setupenv.mak include $(TOPDIR)build/core/Makefile.tls include $(TOPDIR)build/core/color.mak sinclude $(TOPDIR).config #Build STAGE 1->2->3->4 #STAGE1_TARGETS += consistent_check STAGE1_TARGETS += xboot STAGE1_TARGETS += uboot STAGE1_TARGETS += ecos STAGE1_TARGETS += kernel STAGE2_TARGETS += sdk STAGE3_TARGETS += app STAGE4_TARGETS += rootfs STAGE5_TARGETS += rom #zebu_hex .PHONY: all outclean clean distclean unconfig .PHONY: xboot uboot ecos kernel sdk app rootfs rom .PHONY: rls list nothing info spirom isp .PHONY: tidy astyle checkout chktcpath isp_exe #help nothing help: @$(ECHO) "" @$(ECHO) $(COLOR_GREEN)"=======================================" $(COLOR_ORIGIN); @$(ECHO) $(COLOR_GREEN)"= [Gemini] Source Code Manual !!! =" $(COLOR_ORIGIN); @$(ECHO) $(COLOR_GREEN)"=======================================" $(COLOR_ORIGIN); @$(ECHO) "" @$(ECHO) $(COLOR_YELLOW)"[build flow]"$(COLOR_ORIGIN) @$(ECHO) " $$ make x_cfg_id or x_cfg (please choice platform cfg from make list)" @$(ECHO) " $$ make all" @$(ECHO) "" @$(ECHO) $(COLOR_YELLOW)"[help option]"$(COLOR_ORIGIN) @$(ECHO) " - list : show platform config list" @$(ECHO) " - info : show currnt platform config" @$(ECHO) " - help : show this Manual" @$(ECHO) "" @$(ECHO) $(COLOR_YELLOW)"[configure option]"$(COLOR_ORIGIN) @$(ECHO) " - x_cfg : configure platform config" @$(ECHO) "" @$(ECHO) $(COLOR_YELLOW)"[build option]"$(COLOR_ORIGIN) @$(ECHO) " - uboot : build uboot source" @$(ECHO) " - ecos : build ecos source" @$(ECHO) " - kernel : build kernel source" @$(ECHO) " - sdk : build sdk source" @$(ECHO) " - app : build application source" @$(ECHO) " - rom : package FW binary" @$(ECHO) " - all : build uboot/ecos/kernel/sdk/app/rom source" @$(ECHO) "" @$(ECHO) $(COLOR_YELLOW)"[clean option]"$(COLOR_ORIGIN) @$(ECHO) " - clean : clean uboot/ecos/kernel/sdk/app" @$(ECHO) " - distclean : clean uboot/ecos/kernel/sdk/app and platform config" @$(MAKE) -s list ... #uboot build uboot: build_precheck @if [ -f $(GEMINI_UBOOT_WRAPPER_FILE) ]; then \ $(MAKE) $(MAKE_JOBS) -f $(GEMINI_UBOOT_WRAPPER_FILE) build && \ $(MAKE) $(MAKE_JOBS) -f $(GEMINI_UBOOT_WRAPPER_FILE) update; \ else \ $(ERRMSG_FOLDER_NOT_EXIST); \ fi #application build app: build_precheck @if [ -f $(GEMINI_APP_WRAPPER_FILE) ]; then \ $(MAKE) $(MAKE_JOBS) -f $(GEMINI_APP_WRAPPER_FILE) build && \ $(MAKE) $(MAKE_JOBS) -f $(GEMINI_APP_WRAPPER_FILE) update; \ else \ $(ERRMSG_FOLDER_NOT_EXIST); \ fi clean: outclean @if [ -f $(GEMINI_XBOOT_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_XBOOT_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_UBOOT_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_UBOOT_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_ECOS_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_ECOS_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_ROOTFS_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_ROOTFS_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_KERNEL_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_KERNEL_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_SDK_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_SDK_WRAPPER_FILE) $@; \ fi @if [ -f $(GEMINI_APP_WRAPPER_FILE) ]; then \ $(MAKE) -f $(GEMINI_APP_WRAPPER_FILE) $@; \ fi @$(CLEAR) @$(call sys_showmesg, GREEN, GEMINI CLEAN DONE ! ); \