最近因为需要,将mpp2/sample/venc下的makefile进行了简单的分析,具体过程如下。
sdk版本:Hi3518E_V100R001C01SPC081
mpp2的目录结构如下:
mpp2
|-----component
|-----extdrv
|-----include
|-----lib
|-----sample|-----audio|-----common|-----hifb|-----iq|-----ive|-----regin|-----tde|-----vda|-----venc|-----***makefile***|----------vio|-----***makefile.param*** |-----tools|-----***makefile.param***
主要分析的三个文件:
1. mpp2下的makefile.param
2. mpp2/sample下的makefile.param
3. mpp2/sample/venc下的makefile
开始分析
mpp2/sample/venc下的makefile如下:
# Hisilicon Hi3516 sample Makefileinclude ../Makefile.param # 引用 Makefile.param ,将其加载进来
#ifeq ($(SAMPLE_PARAM_FILE), )
# SAMPLE_PARAM_FILE:=../Makefile.param
# include $(SAMPLE_PARAM_FILE)
#endif# target source
SRC := $(wildcard *.c) #通配符在变量中展开
OBJ := $(SRC:%.c=%.o)TARGET := $(OBJ:%.o=%)
.PHONY : clean allall: $(TARGET)MPI_LIBS := $(REL_LIB)/libmpi.a$(TARGET):%:%.o $(COMM_OBJ)$(CC) $(CFLAGS) -lpthread -lm -o $@ $^ $(MPI_LIBS) $(AUDIO_LIBA) $(SENSOR_LIBS)clean:@rm -f $(TARGET)@rm -f $(OBJ)@rm -f $(COMM_OBJ)cleanstream:@rm -f *.h264@rm -f *.jpg@rm -f *.mjp@rm -f *.mp4
其中以‘#’开头的为注释语句,可以忽略,则第一句话便是
include ../Makefile.param
这个代表将上层目录里面的makefile.param文件包含进来,或者说将上层的makefile.param原封不动的加载到本makefile中。
因此,makefile会先将上层目录makefile.param内容加载,并先执行makefile.param里面的内容。
/mpp2/sample/Makefile.param 如下:
# Hisilicon Hi3518 sample Makefile.paramifeq ($(PARAM_FILE), )PARAM_FILE:=../../Makefile.paraminclude $(PARAM_FILE)
endif################# select sensor type for your sample ####################
#SENSOR_TYPE ?= APTINA_AR0130_DC_720P_30FPS
#SENSOR_TYPE ?= SONY_ICX692_DC_720P_30FPS
#SENSOR_TYPE ?= SONY_IMX104_DC_720P_30FPS
#SENSOR_TYPE ?= SONY_IMX138_DC_720P_30FPS
#SENSOR_TYPE ?= SONY_IMX122_DC_1080P_30FPS
#SENSOR_TYPE ?= SONY_IMX236_DC_1080P_30FPS
#SENSOR_TYPE ?= APTINA_9M034_DC_720P_30FPS
#SENSOR_TYPE ?= APTINA_MT9P006_DC_1080P_30FPS
SENSOR_TYPE ?= OMNI_OV9712_DC_720P_30FPS #sensor的类型
#SENSOR_TYPE ?= OMNI_OV2710_DC_1080P_30FPS
#SENSOR_TYPE ?= SOI_H22_DC_720P_30FPS
#SENSOR_TYPE ?= HIMAX_1375_DC_720P_30FPS
#SENSOR_TYPE ?= APTINA_AR0330_DC_1080P_30FPS
#SENSOR_TYPE ?= PIXELPLUS_3100K_DC_720P_30FPSSENSOR_LIBS := $(REL_LIB)/libisp.a#/root/hi3518/mpp2/lib/libisp.aifeq ($(SENSOR_TYPE), APTINA_AR0130_DC_720P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_ar0130_720p.a
endififeq ($(SENSOR_TYPE), PANASONIC_MN34031_DC_720P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_mn34031_720p.a
endififeq ($(SENSOR_TYPE), SONY_ICX692_DC_720P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_icx692.a
endififeq ($(SENSOR_TYPE), SONY_IMX104_DC_720P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_imx104.a
endififeq ($(SENSOR_TYPE), SONY_IMX138_DC_720P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_imx138.a
endififeq ($(SENSOR_TYPE), APTINA_9M034_DC_720P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_9m034.a
endififeq ($(SENSOR_TYPE), OMNI_OV9712_DC_720P_30FPS) #SENSOR_LIBS /root/hi3518/mpp2/lib/libisp.a /root/hi3518/mpp2/lib/libsns_ov9712.aSENSOR_LIBS += $(REL_LIB)/libsns_ov9712.a
endififeq ($(SENSOR_TYPE), OMNI_OV2710_DC_1080P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_ov2710.a
endififeq ($(SENSOR_TYPE), SOI_H22_DC_720P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_soih22.a
endififeq ($(SENSOR_TYPE), HIMAX_1375_DC_720P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_himax1375.a
endififeq ($(SENSOR_TYPE), SONY_IMX122_DC_1080P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_imx122.a
endififeq ($(SENSOR_TYPE), APTINA_MT9P006_DC_1080P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_mt9p006.a
endififeq ($(SENSOR_TYPE), APTINA_AR0330_DC_1080P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_ar0330_1080p.a
endififeq ($(SENSOR_TYPE), SONY_IMX236_DC_1080P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_imx236.a
endififeq ($(SENSOR_TYPE), PIXELPLUS_3100K_DC_720P_30FPS)SENSOR_LIBS += $(REL_LIB)/libsns_po3100k.a
endif#########################################################################
COMMON_DIR:=$(PWD)/../common#/root/hi3518/mpp2/sample/venc/../common
INC_FLAGS := -I$(COMMON_DIR)#-I/root/hi3518/mpp2/sample/venc/../common/
INC_FLAGS += -I$(REL_INC)
#-I/root/hi3518/mpp2/include
INC_FLAGS += -I$(MPP_PATH)/component/acodec
#-I/root/hi3518/mpp2/component/acodec
ifeq ($(MPP_BUILD), y)
INC_FLAGS += -I$(MPP_PATH)/$(EXTDRV)/tw2865
elseINC_FLAGS += -I$(MPP_PATH)/extdrv/tw2865 #-I/root/hi3518/mpp2/extdrv/tw2865
endififeq ($(CONFIG_ISP), y) #在上文中定义为n
ISP_VERSION := ISP_V1
else
ISP_VERSION := ISP_V2
SENSOR_LIBS += $(REL_LIB)/lib_hiae.a
SENSOR_LIBS += $(REL_LIB)/lib_hiawb.a
SENSOR_LIBS += $(REL_LIB)/lib_hiaf.a
endifCFLAGS := -Wall -g $(INC_FLAGS) -D$(HIARCH) -DHICHIP=$(HICHIP) -DSENSOR_TYPE=$(SENSOR_TYPE) -D$(HIDBG) -D$(HI_FPGA) -lpthread -lm -D$(ISP_VERSION)COMM_SRC := $(wildcard $(COMMON_DIR)/*.c)
COMM_OBJ := $(COMM_SRC:%.c=%.o)
其第一条语句
ifeq ($(PARAM_FILE), )PARAM_FILE:=../../Makefile.paraminclude $(PARAM_FILE)
endif
表示如果PARAM_FILE这个变量为空,则定义其为../../Makefile.param 即mpp2/目录下的Makefile.param
并将其加载进来,因为PARAM_FILE这个变量再之前并没有定义,则为空,所以需要将上上层的Makefile.param即mpp2目录下的Makefile.param加载进来。
如下:
# Makefile.param
# Only global variable should be defined here.
# All the variables must be used as "export" and "?=".
# Otherwise, there will be some errors, when Makefile.param is nested.# Use this file as the following sample
# ifeq ($(PARAM_FILE), )
# PARAM_FILE:=../Makefile.param
# include $(PARAM_FILE)
# endif# Define the default OS link directory.
export HIWORK_PATH?=/hiwork#export 代表可以把变量传递到下一级的makefile中去 #?= 代表HIWORK_PATH这个变量若以前定义过了,则使用以前的定义,这个不起作用
export ARCH=arm
export MPP_BUILD=n# use HIARCH indicate chip, use libc to choose cross compiler.
export HIARCH?=hi3518
export LIBC?=uclibc# Whether support the debug information. HI_DEBUG or HI_RELEASE
export HIDBG?=HI_DEBUG# Whether open -g
#export HIGDB?=y
export HIGDB?=n# FPGA board or not
export FPGA?=nifeq ($(HIARCH), ) #如果HIARCH为空,即没有定义,则打印出错
$(error HIARCH not defined! Please check!)
endififeq ($(LIBC), ) #同上
$(error LIBC not defined! Please check!)
endififeq ($(HIARCH),hi3531)export HICHIP?=0x35310100export ARCH_DIR?=hi3531
endififeq ($(HIARCH),hi3532)export HICHIP?=0x35320100export ARCH_DIR?=hi3531
endififeq ($(HIARCH),hi3521)export HICHIP?=0x35210100export ARCH_DIR?=hi3521
endififeq ($(HIARCH),hi3520A)export HICHIP?=0x3520A100export ARCH_DIR?=hi3521
endififeq ($(HIARCH),hi3520D)export HICHIP?=0x3520D100export ARCH_DIR?=hi3520D
endififeq ($(HIARCH),hi3518) #HIARCH 在上文中定义为hi3518 export HICHIP?=0x35180100export ARCH_DIR?=hi3518
endif# use C01 to indicate uclibc, C02 to indicate glibc, C00 to indicate FPGA.
ifeq ($(LIBC),glibc)export CVER?=.C02
elseexport CVER?=.C01#LIBC已经在上文定义为uclibc 因此 CVER 变量为.C01
endififeq ($(FPGA),y)export CVER=.C00export HI_FPGA:=HI_FPGAexport EXTDRV:=extdrv/$(HIARCH)_fpga
elseexport HI_FPGA:=HI_XXXX#FPGA 在上文中定义为 n export EXTDRV:=extdrv/$(HIARCH)
endif# Get the local SDK_ROOT path or RELEASE_ROOT path by PARAM_FILE.
# PARAM_FILE is configed at Makefile before include this file
export PARAM_FILE
export SDK_PATH?=$(shell cd $(PWD)/`dirname $(PARAM_FILE)`/..; pwd)#SDK_PATH mpp2存放的目录 我的是/root/hi3518
export DRV_ROOT?=$(SDK_PATH)/drv
export MPP_PATH?=$(SDK_PATH)/mpp2# Allocated the linux position
#ifneq ($(shell ls $(HIWORK_PATH)/osdrv$(HIARCH)$(CVER)), )
# export LINUX_ROOT?=$(HIWORK_PATH)/osdrv$(HIARCH)$(CVER)/kernel/linux-3.0.y
#else
# export LINUX_ROOT?=$(SDK_PATH)/osdrv/kernel/linux-3.0.y#确定Linux内核的位置
#endif# Define cross compiler
ifeq ($(LIBC),glibc)export CROSS_COMPILE?= arm-hisiv200-linux-export CROSS?= arm-hisiv200-linux-
elseexport CROSS_COMPILE?= arm-hisiv100nptl-linux-#LIBC已经在上文定义为uclibcexport CROSS?= arm-hisiv100nptl-linux-
endifexport CC:=$(CROSS)gcc #arm-hisiv100nptl-linux-gcc
export AR:=$(CROSS)ar #arm-hisiv100nptl-linux-arexport MPP_CFLAGS:= -Wallifeq ($(HIGDB), y)MPP_CFLAGS += -g
elseMPP_CFLAGS += -O2# HIGDB 在上文中定义为n
endif# Define the object output directory
ifeq ($(MPP_BUILD), y) #在上文定义为 nREL_DIR=$(SDK_PATH)/mpp2/release/$(HIARCH)SAMPLE_DIR=$(SDK_PATH)/mpp2/sample/$(HIARCH)
elseREL_DIR=$(MPP_PATH)#/root/hi3518/mpp2EXTDRV=extdrvSAMPLE_DIR=$(MPP_PATH)/sample#/root/hi3518/mpp2/sample
endif#/root/hi3518/mpp2/include
export REL_INC := $(REL_DIR)/include
#/root/hi3518/mpp2/lib
export REL_LIB := $(REL_DIR)/lib
#/root/hi3518/mpp2/ko
export REL_KO := $(REL_DIR)/ko# Define the lib of audio codec
ifeq ($(HIARCH),hi3518) #HIARCH 在上文定义为 hi3518
export AUDIO_PATH?=$(MPP_PATH)/component/audio2/lib/$(CROSS)
else
export AUDIO_PATH?=$(MPP_PATH)/component/audio/lib/$(CROSS)
endifexport AUDIO_LIBA := $(REL_LIB)/libVoiceEngine.a $(REL_LIB)/libaec.a $(REL_LIB)/libresampler.a $(REL_LIB)/libanr.a# Define the lib of jpeg codec
export JPEGD_PATH?=$(MPP_PATH)/component/jpegd #/root/hi3518/mpp2/component/jpegd
export JPEGD_LIBA:=$(REL_LIB)/libjpeg.a #/root/hi3518/mpp2/lib/libjpeg.a#********************* Macro for version management*****************************
VER_X ?= 1
VER_Y ?= 0
VER_Z ?= 0
VER_P ?= 0
MPP_CFLAGS += -DVER_X=$(VER_X) -DVER_Y=$(VER_Y) -DVER_Z=$(VER_Z) -DVER_P=$(VER_P)
#******************************************************************************* # include the config file of platform
ifeq ($(MPP_BUILD), y)-include $(SDK_PATH)/mpp2/configs/config.mk
elseexport CONFIG_ISP=n #在上文中定义为 n
endif# End!!
上面的makefile里面,我已经在关键地方做了注释,请注意查看。
综合上面三个makefile可知,其先后顺序为:
mpp2/Makefile.param ----> mpp2/sample/Makefile.param ----> mpp2/sample/venc/makefile
而mpp2/Makefile.param和 mpp2/sample/Makefile.param则是定义了很多变量,记录如下:
***MPP_PATH*** /root/hi3518/mpp2
***CROSS_COMPILE*** arm-hisiv100nptl-linux-
***CROSS*** arm-hisiv100nptl-linux-
***CC*** arm-hisiv100nptl-linux-gcc
***AR*** arm-hisiv100nptl-linux-ar
***MPP_CFLAGS*** -Wall -O2
***REL_DIR*** /root/hi3518/mpp2
***SAMPLE_DIR*** /root/hi3518/mpp2/sample
***REL_INC*** /root/hi3518/mpp2/include
***REL_LIB*** /root/hi3518/mpp2/lib
***REL_KO*** /root/hi3518/mpp2/ko
***CONFIG_ISP*** n
***SENSOR_TYPE*** OMNI_OV9712_DC_720P_30FPS
***SENSOR_LIBS*** /root/hi3518/mpp2/lib/libisp.a /root/hi3518/mpp2/lib/libsns_ov9712.a/root/hi3518/mpp2/lib/lib_hiae.a/root/hi3518/mpp2/lib/lib_hiawb.a/root/hi3518/mpp2/lib/lib_hiaf.a
***COMMON_DIR*** /root/hi3518/mpp2/sample/venc/../common
***INC_FLAGS*** -I/root/hi3518/mpp2/sample/venc/../common/-I/root/hi3518/mpp2/include-I/root/hi3518/mpp2/component/acodec-I/root/hi3518/mpp2/extdrv/tw2865
***ISP_VERSION*** ISP_V2
***CFLAGS*** -Wall -g -I/root/hi3518/mpp2/sample/venc/../common/ -
I/root/hi3518/mpp2/include -I/root/hi3518/mpp2/component/acodec -
I/root/hi3518/mpp2/extdrv/tw2865 -Dhi3518 -DHICHIP=0x35180100 -
DSENSOR_TYPE=OMNI_OV9712_DC_720P_30FPS -DHI_DEBUG -DHI_XXXX -lpthread -lm -DISP_V2
***COMM_SRC*** /root/hi3518/mpp2/sample/venc/../common所有的.c文件
***COMM_OBJ*** /root/hi3518/mpp2/sample/venc/../common所有的.c文件对应的.o文件
***SRC*** sample_venc.c
***OBJ*** sample_venc.o
***TARGET*** sample_venc
***MPI_LIBS*** /root/hi3518/mpp2/lib/libmpi.a
以上便是全部过程,分析部分在makefile里面’#’标明了,若有错误的地方,敬请指教。
本文发布于:2024-02-01 14:35:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170676933937293.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |