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

1.Kconfig

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

config MTK_IMGSENSORbool "Camera Imgsensor Driver Support"helpKernel space image sensor driver. Define  project used all imagesensors .The value is combination of CUSTOM_KERNEL_MAIN_IMGSENSOR,CUSTOM_KERNEL_MAIN_BACKUP_IMGSENSOR, CUSTOM_KERNEL_SUB_IMGSENSOR,and CUSTOM_KERNEL_SUB_BACKUP_IMGSENSORsource "drivers/misc/mediatek/imgsensor/src/Kconfig"

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

config SPECIFY_IMGSENSORbool SPECIFY_IMGSENSORdepends on MTK_IMGSENSORhelpSpecify name of each sensor toprevent obtaining wrong sensor driver with same sensor ID.For example, imx258_mipi_raw and imx258_mipi_monoare of same sensor ID. If not specifyingsensor, imx258_mipi_mono may be recognized as imx258_mipi_raw.config IMGSENSOR_MAINstring "Custom main image sensor"depends on SPECIFY_IMGSENSORhelpSpecify 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_MAIN2string "Custom main2 image sensor"depends on SPECIFY_IMGSENSORhelpSpecify 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/cameraMTK_DRIVER_PATH  := $(srctree)/drivers/misc/mediateksubdir-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_infoCUSTOM_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 := v1subdir-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.oifneq ($(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/,原理同上

mtk camera kernel makefile相关推荐

  1. mtk camera 移植步骤

    mtk camera 移植步骤: 1, Kernel层驱动代码文件添加 /mediatek/custom/doov92_wet_tdd/kernel/imgsensor/下添加imx179_mipi_ ...

  2. MTK Camera 基础知识

    文章目录 数字成像系统流程综述 曝光 对焦马达 镜头(lens) MIPI数据与RAW数据的转换(未完待续) ISP的主要内容和Bayer Raw的处理 RGB.YUV和YCbCr三种颜色空间 补充 ...

  3. MTK平台开机初始化时 camera驱动流程|MTK camera调试常见几十种问题处理方法

    转载:https://www.jianshu.com/p/75ab1d82bbd3 mtk的驱动多是以模块加载的方式(module_init():module_exit():)加载到内核中去的:正因为 ...

  4. MTK camera flashlight bring up

    MTK camera flashlight bring up MTK camera flashlight bring up 一查看硬件原理图 front camera rear camera key ...

  5. MTK Camera驱动移植

    对于MTK Camera驱动移植一般分为四部分: 1.硬件IO口配置: 2.Camera驱动移植: 3.上电时序: 4.修改i2c控制器: 硬件电路: 1.GPIO配置 打开 mediatek\dct ...

  6. mtk camera移植

    mtk camera 移植步骤: 1, Kernel层驱动代码文件添加 /mediatek/custom/doov92_wet_tdd/kernel/imgsensor/下添加imx179_mipi_ ...

  7. 【Mtk Camera Hal到驱动的流程(1)】

    Mtk Camera Hal到驱动的流程(1) (1)架构介绍 (A)Camera 的框架分为 Kernel 部分和 Hal 部分 Kernel部分: image sensor driver -- 负 ...

  8. linux kernel makefile analysis

    编译自:https://github.com/0xAX/linux-insides/blob/master/Misc/how_kernel_compiled.md 作者: 0xAX 原创:LCTT h ...

  9. 如何在Linux kernel Makefile中添加宏定义

    如何在Linux kernel Makefile中添加宏定义: CFLAGS_object.o += -DMACRO_NAME 在编译object.o时定义宏MACRO_NAME,在kernel中添加 ...

最新文章

  1. 电热水器技术性能指标
  2. asp.net python 开发web 效率_【Django】Python web开发:几个模板系统的性能对比(转)...
  3. 机器学习平台跃迁,AI中台才是大势所趋
  4. 日本推出无人机伞,将推翻手持伞的历史
  5. GlobalSign 荣登网络信任联盟 2013 年网络信任荣誉榜
  6. linux实验试题 cp,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  7. egg前面加什么_国威说阀:阀门前面为什么加国标美标日标之类的?
  8. html背景图片尺寸位置百分比,css – 如何计算背景大小百分比?
  9. 算法移植优化(二)android gpuimage使用
  10. pv原语模拟实现_并发编程信号量的使用方法和其实现原理
  11. java继承类长方形面积_java_java用接口、多态、继承、类计算三角形和矩形周长及面积的方法,本文实例讲述了java用接口、多 - phpStudy...
  12. adb shell 直接修改Settigns中设置项
  13. SQL Server 2014 导入Excel
  14. SQLSERVER使用密码加密备份文件以防止未经授权还原数据库
  15. mips的旁路_低功耗设计二之Bypassing(旁路)
  16. 《华为问题管理法》读书笔记2
  17. 几个在线网页聊天网站
  18. ssh服务端配置了authorized_keys,免密登录失败
  19. mongoDB--初识mongoDB安装过程
  20. 翻斗式雨量传感器的材质分类和工作原理

热门文章

  1. 考研失败的同学,换个成长思路吧
  2. 2015年3月份ccf认证考试C语言(枚举法)
  3. 【花书笔记】 之 Chapter01 引言
  4. 机器学习(numpy/matplotlib/scipy)学习笔记
  5. 郭金东旗下金浦英萨接待华中科技大学人工智能与自动化学院到访调研
  6. Nginx就这么难吗?你可能是缺这份Nginx开发指南
  7. 王者荣耀s22服务器维修,王者荣耀资源包升级失败 S22资源包升级失败解决方法...
  8. 计算机主机光盘盒在哪,怎么在电脑上看碟,详细教您电脑怎么放光盘
  9. 32.java_注解(Annotation)
  10. 深度学习--猫狗图像分类