0719_驱动6 通用Makefile

一、编写Makefile

#通过外部传参,指定编译驱动的文件
MODNAME ?= demo
#使用外部传参选择编译框架
ARCH ?= arm
ifeq ($(ARCH),arm)
#arm架构linux内核路径
KERNEDDIR := /home/ubuntu/linux-5.10.61/
else
#x86架构linux内核路径
KERNEDDIR := /lib/modules/$(shell uname -r)/build
endif
#打开终端,执行pwd命令
PWD := $(shell pwd)
all:
	@#-C:跳转到指定的目录下,读取当前目录下的Makefile文件
	@#M:回到当前驱动目录下,读取当前目录下的Makefile文件
	make -C $(KERNEDDIR) M=$(PWD) modules
clean:
	make -C $(KERNEDDIR) M=$(PWD) clean
#添加驱动被编译文件
obj-m := $(MODNAME).o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
驱动程序的makefile和应用程序的makefile编译生成的文件有以下几个主要区别: 1. 驱动程序的makefile需要指定内核源码路径和内核头文件路径,以便在编译过程中能够正确地链接内核函数和数据结构。而应用程序的makefile通常不需要这样做,因为它们链接的是系统库而不是内核代码。 2. 驱动程序的makefile通常需要使用特殊的编译选项和链接选项,以便生成可加载内核模块,例如使用 -c 选项指定编译为目标文件,使用 -M 选项生成依赖关系,使用 -o 选项指定输出文件名。应用程序的makefile则可以使用常规的编译选项和链接选项来生成可执行文件。 3. 驱动程序的makefile需要将编译生成的文件复制到指定的目录下,以便内核能够正确地加载和卸载模块。而应用程序的makefile则不需要这样做,因为它们通常被编译为可执行文件并直接运行。 4. 由于驱动程序是运行在内核空间的,因此驱动程序的编译和链接需要使用特殊的工具链和选项,例如使用内核版本的编译器和链接器。而应用程序则运行在用户空间,可以使用通用的工具链和选项进行编译和链接。 5. 最后,驱动程序的makefile需要处理一些特殊的任务,例如生成模块符号表、处理模块参数等。而应用程序的makefile则不需要这样做。 因此,驱动程序的makefile和应用程序的makefile在编译生成的文件上有一些区别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值