android 内核 makefile -m,Linux Makefile modules

V550的makefile

ifneq ($(KERNELRELEASE),)

obj-$(CONFIG_XXX) := base/ resource/

else

CROSS_COMPILE ?= arm-eabi-

DEBUG ?= 0

all: android

android:

$(MAKE) -C $(KDIR) M=$(CURDIR) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) OS=android DEBUG=$(DEBUG) HW=1

clean:

$(MAKE) -C $(KDIR) M=$(CURDIR) HW=1 clean

.PHONY: all android

endif

首先分析一下 make -C

make -C 嵌套执行 makefile,相当于cd到subdir 然后再make

cd subdir && $(MAKE) 《--》 $(MAKE) -C subdir

然后分析一下 make M=

M是自己指定的一个参数 和make没有关系 在linux顶层makefile中:

# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the

# directory of external module to build. Setting M= takes precedence.

ifeq ("$(origin M)", "command line")

KBUILD_EXTMOD := $(M)

endif

接下来分析编译过程:

结合之前gpio driver模块编译的makefile(V550的makefile需要修改一下)

#######################

KERNEL_DIR := /home/zhang/work/linux-4.14.55

CURRENT_PATH = $(shell pwd)

obj-m = leddts_gpio_driver.o

build:kernelmodule

kernelmodule:

$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_PATH) modules

clean:

$(MAKE) -C $(KERNEL_DIR) M=$(CURRENT_PATH) clean

#######################

make -C /home/zhang/work/linux-4.14.55 M=当前路径 modules

然后就是跳转到/home/zhang/work/linux-4.14.55下的makefile 目标是modules

else # KBUILD_EXTMOD

modules: descend $(objtree)/Module.symvers

$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost

descend: $(build-dirs)         #build-dirs := $(KBUILD_EXTMOD)    KBUILD_EXTMOD := $(M)

$(build-dirs): prepare

$(Q)$(MAKE) $(build)=$@ single-build=$(single-build) need-builtin=1 need-modorder=1

==》 make -f scripts/Makefile.build obj=M指定的路径 single-build=$(single-build) need-builtin=1 need-modorder=1

其中:

scripts/Makefile.build 没有指定目标,所以使用默认目标__build

__build:

__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \

$(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \

$(subdir-ym) $(always)

@:

__build依赖于obj-m

# The filename Kbuild has precedence over Makefile

kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))     #src := $(obj)  obj=M指定的路径

kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)

include $(kbuild-file)

包含M指定的路径下的Makefile

M指定的路径下的Makefile  obj-m = leddts_gpio_driver.o

如果模块还包含子文件夹

比如随便找一个模块

obj-$(CONFIG_TEGRA_HOST1X) += host1x/

obj-y+= drm/ vga/

obj-$(CONFIG_IMX_IPUV3_CORE)+= ipu-v3/

目录下包含host1x等四个文件夹,host1x的makefile,用host1x-y表示host1x.o由哪些组成

host1x-y = \

bus.o \

。。。

obj-$(CONFIG_TEGRA_HOST1X) += host1x.o

原文:https://www.cnblogs.com/idyllcheung/p/13230714.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值