mtk camera kernel makefile

对makefile一知半解,就通过camera kernel大概学习下,至少能读懂大部分意思

1.Kconfig

kernel-4.19/drivers/misc/mediatek/imgsensor/Kconfig
参考:https://blog.csdn.net/u011425939/article/details/80472324

config MTK_IMGSENSOR
	bool "Camera Imgsensor Driver Support"

	help
	  Kernel space image sensor driver. Define  project used all image
	  sensors .The value is combination of CUSTOM_KERNEL_MAIN_IMGSENSOR,
	  CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR, CUSTOM_KERNEL_SUB_IMGSENSOR,
	  and CUSTOM_KERNEL_SUB_BACKUP_IMGSENSOR

source "drivers/misc/mediatek/imgsensor/src/Kconfig"

主要就是bool类型的Camera Imgsensor Driver Support,用来配置内核
source条目用于读取另一个Kconfig文件
继续看src下的Kconfig

config SPECIFY_IMGSENSOR
	bool SPECIFY_IMGSENSOR
	depends on MTK_IMGSENSOR
	help
	  Specify name of each sensor to
	  prevent obtaining wrong sensor driver with same sensor ID.
	  For example, imx258_mipi_raw and imx258_mipi_mono
	  are of same sensor ID. If not specifying
	  sensor, imx258_mipi_mono may be recognized as imx258_mipi_raw.

config IMGSENSOR_MAIN
	string "Custom main image sensor"
	depends on SPECIFY_IMGSENSOR
	help
	  Specify main sensor.
	  This config is mainly mapping to userspace.
	  Consider the numbers of sensors and usage on the phone.
	  Compare the custom usage defined in user-custom folder.

config IMGSENSOR_MAIN2
	string "Custom main2 image sensor"
	depends on SPECIFY_IMGSENSOR
	help
	  Specify main2 sensor.
	  This config is mainly mapping to userspace.
	  Consider the numbers of sensors and usage on the phone.
	  Compare the custom usage defined in user-custom folder.

SPECIFY_IMGSENSOR依赖与上层的MTK_IMGSENSOR,而IMGSENSOR_MAIN等依赖SPECIFY_IMGSENSOR

2.Makefile

kernel-4.19/drivers/misc/mediatek/imgsensor/src/Makefile

subdir-ccflags-y += -I$(srctree)/drivers/i2c/busses/ \
                    -I$(srctree)/drivers/misc/mediatek/mmdvfs/ \
                    -I$(srctree)/drivers/misc/mediatek/ccu/inc
#kbuild就会将以上三个目录添加到编译时的头文件搜索目录中,对其subdir也有效。 
MTK_PLATFORM := $(subst ",,$(CONFIG_MTK_PLATFORM))
ARCH_MTK_PROJECT := $(subst ",,$(CONFIG_ARCH_MTK_PROJECT))
#将“替换成无,或者理解为去掉"
MTK_PLATFORM_PATH_ROOT := $(srctree)/drivers/misc/mediatek/mach/$(MTK_PLATFORM)
MTK_PROJECT_PATH_ROOT := $(srctree)/drivers/misc/mediatek/mach/$(MTK_PLATFORM)/$(ARCH_MTK_PROJECT)

CONFIG_MTK_PLATFORM_SENSOR := $(CONFIG_MTK_PLATFORM)

subdir-ccflags-y += -I$(MTK_PROJECT_PATH_ROOT)/camera/camera

MTK_DRIVER_PATH  := $(srctree)/drivers/misc/mediatek

subdir-ccflags-y += -I$(MTK_DRIVER_PATH)/camera/$(MTK_PLATFORM) \
             -I$(MTK_DRIVER_PATH)/imgsensor/inc \
             -I$(MTK_DRIVER_PATH)/imgsensor/src/$(CONFIG_MTK_PLATFORM_SENSOR)/camera_project/$(ARCH_MTK_PROJECT)/camera_hw \
             -I$(MTK_DRIVER_PATH)/imgsensor/src/$(CONFIG_MTK_PLATFORM_SENSOR)/camera_hw	\
             -I$(MTK_DRIVER_PATH)/cam_cal/inc \
             -I$(MTK_DRIVER_PATH)/smi \
             -I$(MTK_DRIVER_PATH)/include/mt-plat/$(MTK_PLATFORM)/include/mach \
             -I$(MTK_DRIVER_PATH)/imgsensor/src/$(CONFIG_MTK_PLATFORM_SENSOR)

subdir-ccflags-$(CONFIG_TINNO_PRODUCT_INFO) += -I$(srctree)/drivers/misc/dev_info

CUSTOM_KERNEL_FLAGS := $(addprefix -D, $(shell echo \
             $(CONFIG_CUSTOM_KERNEL_IMGSENSOR) | tr a-z A-Z))
#添加添加-D前缀,小写转大写   -D为添加宏定义
subdir-ccflags-y += $(CUSTOM_KERNEL_FLAGS)

obj-y += $(subst ",,$(CONFIG_MTK_PLATFORM_SENSOR))/

再继续看下层makefile,如MTK_PLATFORM所对应的mt6765

MTK_PLATFORM := $(subst ",,$(CONFIG_MTK_PLATFORM))
ARCH_MTK_PROJECT := $(subst ",,$(CONFIG_ARCH_MTK_PROJECT))
IMGSENSOR_DRIVER_PATH  := $(srctree)/drivers/misc/mediatek/imgsensor/src
COMMON_VERSION := v1

subdir-ccflags-y +=  -I$(IMGSENSOR_DRIVER_PATH)/common/$(COMMON_VERSION)
obj-y				+= ../common/$(COMMON_VERSION)/imgsensor.o
obj-y				+= ../common/$(COMMON_VERSION)/imgsensor.o
obj-y				+= ../common/$(COMMON_VERSION)/imgsensor_hw.o
obj-y				+= ../common/$(COMMON_VERSION)/imgsensor_i2c.o
obj-y				+= ../common/$(COMMON_VERSION)/imgsensor_legacy.o
obj-y				+= ../common/$(COMMON_VERSION)/imgsensor_proc.o
ifeq (,$(wildcard $(IMGSENSOR_DRIVER_PATH)/$(MTK_PLATFORM)/camera_project/$(ARCH_MTK_PROJECT)/$(COMMON_VERSION)))
#wildcard展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空
obj-y				+= ../common/$(COMMON_VERSION)/imgsensor_sensor_list.o
else
obj-y				+= camera_project/$(ARCH_MTK_PROJECT)/$(COMMON_VERSION)/imgsensor_sensor_list.o
endif
#此处可理解为匹配imgsensor_sensor_list.c文件,camera_project/$(ARCH_MTK_PROJECT)/$(COMMON_VERSION)/imgsensor_sensor_list.o优先级高于common目录下的


在这里插入图片描述
这里 $ (1)可理解为具体的每个camera驱动目录名称
两层判断,第一层:
如果在$ (IMGSENSOR_DRIVER_PATH)/ $ (MTK_PLATFORM)/camera_project/ $ (ARCH_MTK_PROJECT)/ $ (COMMON_VERSION)/ $ (1)如果没找到,进入第二层循环,找到了,就将platform_drv赋值。
第二层:
继续在 $ (IMGSENSOR_DRIVER_PATH)/ $ (MTK_PLATFORM)/下找,没找到,就最后在common/$(COMMON_VERSION)/下找

综上:查找具体sensor驱动目录优先级为
1.mediatek/imgsensor/src/mt6765/camera_project/$(ARCH_MTK_PROJECT)/v1
2.mediatek/imgsensor/src/mt6765
3.mediatek/imgsensor/src/common/v1

继续看剩下部分:

ifneq ($(common_drv),)
$(info imgsensor drv by common $(common_drv))
endif
obj-y				+= $(common_drv)

ifneq ($(platform_drv),)
$(info imgsensor drv by platform $(platform_drv))
#此处会打印出匹配出的驱动目录
endif
obj-y				+= $(platform_drv)
obj-y				+= imgsensor_clk.o

ifneq ($(project_drv),)
$(info imgsensor drv by platform $(project_drv))
endif
obj-y				+= $(project_drv)

ifeq (,$(wildcard $(IMGSENSOR_DRIVER_PATH)/$(MTK_PLATFORM)/camera_project/$(ARCH_MTK_PROJECT)/camera_hw))
subdir-ccflags-y		+= -I$(IMGSENSOR_DRIVER_PATH)/$(MTK_PLATFORM)/camera_hw
obj-y				+= camera_hw/
ifneq ($(project_drv),)
obj-y				+= camera_project/$(ARCH_MTK_PROJECT)/
endif
else
obj-y				+= camera_project/$(ARCH_MTK_PROJECT)/camera_hw/
subdir-ccflags-y		+= -I$(IMGSENSOR_DRIVER_PATH)/$(MTK_PLATFORM)/camera_project/$(ARCH_MTK_PROJECT)/camera_hw
endif
#选择camera_hw/,原理同上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值