一、RDA MAKEFILE的本地变量

  在介绍多屏参之前,先看一下./code/env.conf的包含过程,通过./code/Makefile.project加载,env.conf中所有的变量,都变为makefile执行过程中的本地变量:

包括:mconfig.config、boardconfig.config、menuconfig.config文件中变量的定义,所以在任何递归的Makefile都可以引用这三个文件定义的变量,关于mconfig.config定义的屏参,在aps/customer/Makefile会通过变量$(CONFIG_PANEL_TYPE)进行引用。

include $(ROOT_DIR)/mconfig.config
include $(ROOT_DIR)/boardconfig.config
include $(ROOT_DIR)/menuconfig.config APP_FOLDER_NAME=$(subst ",,$(CONFIG_APP_FOLDER_NAME))
CUSTOMER_NAME=$(subst ",,$(CONFIG_CUSTOMER_NAME))
SUBCUSTOMER_NAME=$(subst ",,$(CONFIG_SUBCUSTOMER_NAME))
SUBSUBCUSTOMER_NAME=$(subst ",,$(CONFIG_SUBSUBCUSTOMER_NAME))
BOARD_NAME=$(subst ",,$(CONFIG_MODEL_BOARD_NAME))
PANEL_NAME=$(subst ",,$(CONFIG_PANEL_TYPE_NAME)) APPDIR_NAME=$(CUSTOMER_NAME)/$(APP_FOLDER_NAME)
CUSTOMER_BOARD_PATH=customer/$(CUSTOMER_NAME)/$(BOARD_NAME)
FORMAL_CUSTOMER_PATH=customer/$(CUSTOMER_NAME)/sub_customer/$(SUBCUSTOMER_NAME)/$(SUBSUBCUSTOMER_NAME)

mconfig.config中多屏参的定义:

CONFIG_PANEL_TYPE_PN_FAC_1366X768="PN_FAC_1366x768"
CONFIG_PANEL_TYPE_PN_FAC_1440X900="PN_FAC_1440x900"
CONFIG_PANEL_TYPE_PN_FAC_1920X1080="PN_FAC_1920x1080"
CONFIG_PANEL_TYPE_CMO_M185B1_L02_1366X768="CMO_M185B1_L02_1366x768"
CONFIG_PANEL_CMO_M185B1_L02_1366X768_IS_DEFAULT=y
CONFIG_PANEL_TYPE_DEFAULT_FOLDER="CMO_M185B1_L02_1366x768"
CONFIG_DDC_DeafaultTable_1366x768=y
CONFIG_PANEL_TYPE_AUO_B141PW04_V1_1440X900="AUO_B141PW04_V1_1440x900"
CONFIG_PANEL_TYPE_AUO_T420HW04_V0_1920X1080="AUO_T420HW04_V0_1920x1080"

二、多屏参的形成过程

  1、Makefile.pj 定义的"make mconfig"的执行过程,调用gen_customer.pl生产屏参目录下的makefile.ini文件:

customer:
./tools/gen_customer.pl -C aps/customer -E aps/external mconfig: customer
ifndef PJ
@[ -e $@.config ] && mv -f $@.config .config; ./tools/mconf/mconf $@.Kconfig; mv -f .config $@.config
@NEW_CUSTOMER_NAME=`grep CONFIG_CUSTOMER_NAME $@.config | awk 'BEGIN {FS="\""}{print $$2}'`; \
NEW_SUB_NAME=`grep CONFIG_SUBCUSTOMER_NAME $@.config | awk 'BEGIN {FS="\""}{print $$2}'`; \
NEW_SUBSUB_NAME=`grep CONFIG_SUBSUBCUSTOMER_NAME $@.config | awk 'BEGIN {FS="\""}{print $$2}'`;\
NEW_MODEL_BOARD_NAME=`grep CONFIG_MODEL_BOARD_NAME $@.config | awk 'BEGIN {FS="\""}{print $$2}'`;\
NEW_CUSTOMER_BOARD_PATH=customer/$${NEW_CUSTOMER_NAME}/$${NEW_MODEL_BOARD_NAME}; \
NEW_FORMAL_CUSTOMER_PATH=customer/$${NEW_CUSTOMER_NAME}/sub_customer/$${NEW_SUB_NAME}/$${NEW_SUBSUB_NAME}; \
[ -e aps/$${NEW_CUSTOMER_BOARD_PATH}/boardconfig.config ] && cp -f aps/$${NEW_CUSTOMER_BOARD_PATH}/boardconfig.config boardconfig.config; \
cp -f aps/$${NEW_FORMAL_CUSTOMER_PATH}/project/DEFAULT.config menuconfig.config;
endif

  “gen_customer.pl”主要功能是:创建make mconfig UI界面显示的信息。如下的的Kconfig文件,均由“gen_customer.pl”产生。

./code/aps/customer/radisson/public/ir/ir_map.h
./code/aps/customer/radisson/public/ir/ir_map.c
./code/aps/customer/radisson/public/ir/irinclude.in./code/aps/customer/radisson/public/ir/irsrc.in./code/aps/customer/radisson/public/ir/makefile.ini
./code/aps/customer/radisson/public/ir/Kconfig
./code/aps/customer/radisson/public/ir_tx/Kconfig
./code/aps/customer/radisson/public/ir_tx/ir_txinclude.in./code/aps/customer/radisson/public/ir_tx/ir_txsrc.in./code/aps/customer/radisson/Kconfig
./code/aps/customer/radisson/sub_customer/radisson/Kconfig
./code/aps/customer/radisson/sub_customer/radisson/radisson/Kconfig.project ./code/aps/customer/radisson/public/panel/Kconfig.panel
./code/aps/customer/radisson/public/panel/makefile.ini
./code/aps/customer/radisson/sub_customer/radisson/radisson/Kconfig
./code/aps/customer/Kconfig.external

  其中“./aps/customer/radisson/public/panel/makefile.ini”,为多屏参文件。“gen_customer.pl”将迭代panel下面的所有屏参目录,生成makefile.ini如下:这个文件在编译时aps/customer/Makefile会包含“makefile.ini”,运行“tools/gen_paneltable.pl”在屏参目录生成。

CONFIG_PANEL_TYPE=\
$(CONFIG_PANEL_TYPE_AUO_B141PW04_V1_1440X900) \
$(CONFIG_PANEL_TYPE_AUO_T420HW04_V0_1920X1080) \
$(CONFIG_PANEL_TYPE_CMO_M185B1_L02_1366X768) \
$(CONFIG_PANEL_TYPE_PN_FAC_1366X768) \
$(CONFIG_PANEL_TYPE_PN_FAC_1440X900) \
$(CONFIG_PANEL_TYPE_PN_FAC_1920X1080)

  这里注意:脚本的功能是将屏参文件名字大写,定义为变量名的形式,如果mconfig.config有定义,则变量有值,没有定义变量则为空。虽然makefile.ini包含了所有的屏参变量的定义,但只有在mconfig.config定义的屏参有值,在接下来的脚本gen_paneltable.pl只处理在mconfig.config中定义的屏参,这里做的很巧妙。

  2、gen_paneltable.pl根据makefile.ini,处理需要生成的PanelSet_XXX.bin & PanelSet_Bak.bin

  接下来的介绍aps/makefile文件的执行过程:

  注意:终极目标“all”-->依赖“application”-->依赖“$(BUILD_MODULE) ”-->依赖“customer”-->命令行“@$(MAKE) -C customer gen_multipanelbin”-->执行aps/customer/Makefile:gen_multipanelbin

include Makefile.project

#define TOP DIR and LIB DIR
export TOP_DIR := $(shell /bin/pwd)
export LIB_DIR := $(TOP_DIR)/lib AV_DEV_ONOFF=n
ifdef CONFIG_MEDIA_ENABLE
AV_DEV_ONOFF=y
endif
ifdef CONFIG_DTV_SUPPORT
AV_DEV_ONOFF=y
endif
ifeq ($(AV_DEV_ONOFF),y)
#av_dev (runav and mpdev)
BUILD_MODULE += av_dev
#INSTALL_MODULE += av_dev
endif ifeq ($(CONFIG_NOT_USEBB),y)
BUILD_MODULE += minibox
endif INSTALL_MODULE += application #tool kits ifeq ($(CONFIG_NOT_USEBB),$(filter $(CONFIG_NOT_USEBB),n))
BUILD_MODULE += toy
INSTALL_MODULE += toy
BUILD_MODULE += sf
INSTALL_MODULE += sf
endif ifeq ($(CONFIG_CORE_DUMP),y)
BUILD_MODULE += automount
INSTALL_MODULE += automount
endif ifeq ($(CONFIG_DRIVER_TEST_AP_BUILDIN),y)
BUILD_MODULE += test
INSTALL_MODULE += test
endif include external/Makefile.in BUILD_MODULE += gsl filesystem middleware app_infra test ifeq (y, $(findstring y, ${CONFIG_OSD_GAME_SUPPORT}${CONFIG_SUPPORT_NES_GAME}))
BUILD_MODULE += game
endif .PHONY: all clean install application customer $(BUILD_MODULE) all: application application: $(BUILD_MODULE)
$(MAKE) -C application all clean:
@$(MAKE) -C application clean
@$(MAKE) -C customer clean
@$(foreach MODULES, $(BUILD_MODULE), $(MAKE) -C ./$(MODULES) clean ; )
@$(MAKE) -C sf clean install:
ifndef CONFIG_INSTALLDIR
@$(error [ERROR] CONFIG_INSTALLDIR not define!!)
endif
$(MAKE) -C initramfs install
@$(foreach MODULES, $(INSTALL_MODULE), $(MAKE) -C ./$(MODULES) install CONFIG_INSTALLDIR=$(CONFIG_INSTALLDIR) ; )
@$(MAKE) -C customer/$(CUSTOMER_NAME)/public/sound install $(BUILD_MODULE): customer
@$(MAKE) -C $@ all customer:
ifdef CONFIG_SUPPORT_PANNEL_PHOTO_TEST
@$(MAKE) -C customer gen_pnltestpattern
endif
@$(MAKE) -C customer create_buildfiles
@$(MAKE) -C customer gen_multipanelbin
@$(MAKE) -C customer all
ifdef CONFIG_SUPPORT_NVM_ENABLE_AUTOUPDATEVESION_TOOL
@$(MAKE) -C customer gen_datasetting
endif
ifdef CONFIG_SUPPORT_NES_FLASH
@$(MAKE) -C customer gen_gamebin
endif

  aps/customer/Makefile:gen_multipanelbin如下:调用gen_paneltable.pl

# include ir makefile
include ./$(CUSTOMER_NAME)/public/ir/makefile.ini
IR_MAP_WILLBEBUILD = \
$(foreach file, $(IR_MAP), $(addprefix build_, $(file)))
SRCS_LIST += $(IR_MAP_WILLBEBUILD) include ./$(CUSTOMER_NAME)/public/panel/makefile.ini #***************************************************************************
# Build binary file for drivers
#***************************************************************************
.PHONY: create_buildfiles gen_customerdata4driver all clean_loop gen_pnltestpattern gen_datasetting gen_gamebin create_buildfiles:
ifdef CONFIG_SUPPORT_PROJECT_ID
@$(MAKE) -C ./$(CUSTOMER_NAME) create_buildfiles
@$(MAKE) -C ./$(CUSTOMER_NAME) all
endif
@../../tools/gen_customertablebefore.pl $(DRV_CUSTMERFILES_B_WITHPATH) $(DRV_CUSTMERFILES_B1_WITHPATH) $(DRV_CUSTMERFILES_B2_WITHPATH) \
    $(DRV_CUSTMERFILES_C_WITHPATH) $(IR_MAP_WITHPATH) gen_multipanelbin:
@../../tools/gen_paneltable.pl -M "$(CONFIG_PANEL_TYPE)" -P ./$(CUSTOMER_NAME)/public/panel/ 、
  -B ../$(CUSTOMER_BOARD_PATH)/adaptable/ -L ./$(CUSTOMER_NAME)/sub_customer/$(SUBCUSTOMER_NAME)/$(SUBSUBCUSTOMER_NAME)/logo \
-F ./$(CUSTOMER_NAME)/public/panel/$(CONFIG_PANEL_TYPE_DEFAULT_FOLDER) \
-V `echo $(CONFIG_CHIPID) | sed 's/0x//'` --panel_ini2bin ../../tools/pnlset2bin/pnlset2bin --VIP_ini2bin ../../tools/vip2bin/vip2bin \
--lzma ../../tools/lzma460/lzma -I $(CONFIG_PANEL_TYPE_DEFAULT_FOLDER) -X "n"

  “gen_paneltable.pl”根据makefile.ini定义的$(CONFIG_PANEL_TYPE)与“panel_setting.h”生成屏参目录下的“PanelSet_XXX.bin”文件,并将多屏参打包到PanelSet_Bak.bin。

三、链接到FLASH

  ./mergedir/mergeImage.cfg和./mergedir/flash_layout.gyp将做链接处理。

  mergeImage.cfg:

BootROM=../boot/boot.bin
Option=../aps/customer/radisson/RR52C_816A/adaptable/option.bin
OUIBOOTinfo=../aps/customer/radisson/RR52C_816A/adaptable/gBootSysInfo.bin
Kernel=vmlinux.dsc
OUIMAINinfo=../aps/customer/radisson/RR52C_816A/adaptable/gMainSysInfo.bin
Custable=../aps/customer/radisson/RR52C_816A/adaptable/customertable4driver.bin
MultiPanel=../aps/customer/radisson/public/panel/PanelSet_Bak.bin
DefPanel=../aps/customer/radisson/public/panel/PanelSet_Def.bin
GammaTable=../aps/customer/radisson/public/panel/GAMMATABLE.bin
VIPTable=../aps/customer/radisson/public/panel/VIPTABLE.bin
CLUPTable=../aps/customer/radisson/public/panel/COLORLUT.bin
IRBBK00DF=../aps/customer/radisson/public/ir/dIR_BBK_BBK00DF_info.bin
IRKK=../aps/customer/radisson/public/ir/dIR_RAD_KK_info.bin
IRLC2=../aps/customer/radisson/public/ir/dIR_RAD_LC2_info.bin
KeyPad=../aps/customer/radisson/RR52C_816A/adaptable/KeypadInfo.bin
KeyPadFac=../aps/customer/radisson/RR52C_816A/adaptable/KeypadFacInfo.bin
Logo=../aps/customer/radisson/sub_customer/radisson/radisson/logo/title_logo.jpg
VIL_DATA=../aps/application/vil_data.bin
EDID=../aps/customer/radisson/sub_customer/radisson/radisson/edid/gEDIDtable.bin
HDCPKey=hdcp/HDCPKey.bin=../aps/customer/radisson/RR52C_816A/adaptable/gKmfShareData.bin

  flash_layout.gyp:

    'MultiPanel': {
'order' : "",
'depend_on' : "#CONFIG_MULTI_PANELSET#",
'max_size' : 'n',
'protect' : 'n',
'nvm_data' : "n",
'nvm_id' : "n",
'file_path' : "../aps/customer/#CONFIG_CUSTOMER_NAME#/public/panel/PanelSet_Bak.bin",
},

RDA 多屏参流程的更多相关文章

  1. RDA PQ工具使用 (屏参调整)

    使用客户规格书,制作屏参文件. 注意:,必填区和计算区,必填区根据屏参的SPEC填写,具体的屏参文件参数通过点击“Calc Sync”生成. 如:HV320WHB-N81的SPEC: 打开“Color ...

  2. RK3288 mipi屏调试流程

    CPU:RK3288 系统:Android 5.1 1.修改kernel/arch/arm/configs/rockchip_defconfig,打开mipi屏开关 # CONFIG_LCD_GENE ...

  3. MSD3393/MSD3463 屏参及REG对照表

    概述:TIMMING组成 MOD: BANK:0x1032 VOP: SC_BK10 注意BANK对应: VOP: SC_BK10 例如:MS_U16 m_wPanelHTotal;   Sub VO ...

  4. Android 7.1 SystemUI--任务管理--场景一:长按某个缩略图,拖动分屏的流程

    TaskView 类的长按事件 onLongClick 方法内发送了 DragStartEvent 事件消息,该 DragStartEvent 事件消息由 RecentsView,TaskStackV ...

  5. 烧写树莓派系统,SSH配置,无屏登录流程

    首先去 https://downloads.raspberrypi.org/raspbian/images/ 下载需要的版本镜像 我这里下载 https://downloads.raspberrypi ...

  6. LVDS接口液晶屏点屏流程

    使用MStar的TSUM系列的芯片,主要是用来驱动LVDS的屏.在硬件设置无误的情况下(屏开关口.屏电压.PWM等),按照屏规格书上的参数配置屏参,就可以完成点屏了.大概分为几个步骤,确定屏供电电压, ...

  7. qcom 8953平台 LCD亮灭屏流程及LCD知识点总结【转】

    一.LK中亮屏流程 gcdb_display_init(),进行display初始化的起始地方: oem_panel_select(),在这里去选择哪一款屏,也可以在这里添加新一款屏: dsi_pan ...

  8. Atitit截屏功能的设计解决方案

    Atitit截屏功能的设计解决方案 自己实现.... 使用快捷键.. 弹出自己的win,,背景是屏幕快照 点击鼠标光标变成十字状态 出现截屏窗口调整截屏窗口位置与大小 释放鼠标,三个btn,,  复制 ...

  9. RK3288 mipi屏参数配置文件

    RK3288     Android 5.1系统     Linux 3.10 mipi屏参数配置文件所在的路径:kernel/arch/arm/boot/dts/xxx_mipi.dtsi 屏参数配 ...

随机推荐

  1. centOS7+mariadb+Nginx+PHP7.0 安装

    1.前期准备工作 更新 yum 源,自带的源没有 PHP5.6 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7 ...

  2. STM32——通用定时器基本定时功能

    STM32——————通用定时器基本定时功能                                                                           1.  ...

  3. 调试24L01经验总结

    注意的地方: 1.调试24L01的时候,信号的初始状态一定要设置,否则在设置模块的状态的时候容易出错.( CE=0; CSN=1; SCK=0; MOSI = 1; IRQ = 1;)IRQ设置成1是 ...

  4. keil mdk uvision使用技巧

    语法检测&代码提示 中文友好: tab 可以选中一大块代码,一起缩进 快速注释 先选中你要注释的代码区,然后右键,选择Advanced,Comment Selection 就可以了 查找替换 ...

  5. 关于PHP include文件时的文件查找顺序

    常常被include文件的路径搞晕. 看来是要理一理的时候了. PHP官方文档关于include搜索路径的解释是:先查找工作目录下相对于include_path设置所对应的路径,然后再搜索执行文件所在 ...

  6. PHP $_SERVER的使用

    常常会用到php的$_SERVER变量,可是好多常用的参数又不熟每次都去查手册.为了记住一些常用的,写个日志吧.前导:网站根目录:/www/domain.com/访问Url:http://www.do ...

  7. 2018/3/4 Activiti教程之流程部署篇(与Springboot整合版)二

    首先我们来看下Activiti为我们自动生成的这四张用户相关的表 先看下USER表 我已经插入了一些数据,很明显,就是保存用户的信息的 看下GROUP 用户对应的分组信息 MEMBERSHIP 用户和 ...

  8. java反射与注解结合使用(根据传入对象输出查询sql)

    我们在项目开发中有很多地方使用到了注解,关于注解的定义与创建小伙伴可以参考我的文章<java注解>.有任何问题的小伙伴们可以在评论区指出哦,欢迎各位大佬指出问题. 今天我要说的是使用注解与 ...

  9. Java函数式接口Function

    Function 提供了一个抽象方法  R apply(T t) 接收一个参数 返回 一个值,还有两个默认方法和一个静态方法 compose 是一个嵌套方法,先执行before.apply() 得到运 ...

  10. 总结 React 组件的三种写法 及最佳实践

    React 专注于 view 层,组件化则是 React 的基础,也是其核心理念之一,一个完整的应用将由一个个独立的组件拼装而成. 截至目前 React 已经更新到 v15.4.2,由于 ES6 的普 ...