Makefile 中一些常用语法讲解

这篇博客详细解析了一个Linux内核模块Makefile的各个部分,包括条件语句、目标文件、源文件、编译标志等。讲解了KMOD、KDIR变量的作用,以及如何通过make命令动态调整变量值。此外,还介绍了modprobe命令的功能,以及shell命令在Makefile中的应用,如检查和创建目录、加载和卸载内核模块。
摘要由CSDN通过智能技术生成

 解释下面makefile内容的意思

# Common part--------------------------------------------------------------------
DRV_NAME := xxx
DRV_PATH := xxxxx

# KBuild part of makefile--------------------------------------------------------
ifneq ($(KERNELRELEASE),)

obj-m := $(DRV_NAME).o
$(DRV_NAME)-objs += can_init.o
$(DRV_NAME)-objs += sja1000/sja1000.o
$(DRV_NAME)-objs += AAAA/AAAA.o

EXTRA_CFLAGS += -std=gnu99

# Normal makefile----------------------------------------------------------------
else

KVER := $(shell uname -r)
KSRC ?= /lib/modules/$(KVER)/build
KMOD ?= /lib/modules/$(KVER)/kernel/drivers/$(DRV_PATH)

all:	
	$(MAKE) -w -C $(KSRC) M=$(PWD) modules

这是一个 Linux 内核模块的 Makefile,用于构建一个名为 $(DRV_NAME) 的内核模块。让我解释一下每个部分的含义:
 

  • ifneq ($(KERNELRELEASE),):这是一个条件语句,检查是否在内核构建阶段。如果 KERNELRELEASE 已定义,说明是在内核构建阶段,将执行下面的代码。
  • obj-m := $(DRV_NAME).o:定义了要构建的内核模块的目标文件。
  • $(DRV_NAME)-objs += ...:指定模块的源文件。这里包括 can_init.osja1000/sja1000.oAAAA/AAAA.o
  • EXTRA_CFLAGS += -std=gnu99:指定编译模块时要使用的额外编译标志,这里是将 C 语言标准设置为 GNU99。
  • else:如果不在内核构建阶段,执行下面的代码。
    • KVER := $(shell uname -r):获取当前系统的内核版本。
    • KSRC ?= /lib/modules/$(KVER)/build:指定内核源代码的路径,默认为 /lib/modules/$(KVER)/build
    • KMOD ?= /lib/modules/$(KVER)/kernel/drivers/$(DRV_PATH):指定模块要安装的位置,默
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang_anna

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值