【IMX6ULL驱动开发学习】23.驱动模块开发之Makefile解析

本文介绍了如何编写Linux内核驱动的Makefile,包括设置KERN_DIR和PWD变量,以及make命令的使用。重点讲解了obj-m和CROSS_COMPILE的作用,以及编译选项如-m和-y的区别。
摘要由CSDN通过智能技术生成

编写完驱动代码后要编写Makefile,并使用make进行编译,这里举一个最经典的驱动模块的Makefile写法

KERN_DIR = /home/me/内核路径

PWD ?= $(shell pwd)

all:	
	make -C $(KERN_DIR) M=$(PWD) modules
	$(CROSS_COMPILE)gcc -o xxx_app xxx_app.c
	
clean:
	make -C $(KERN_DIR) M=$(PWD) modules clean
	rm -rf modules.order
	rm -f xxx_app
obj-m += xxxx.o

执行 make 之后,会执行Makefile下的 all:后面的命令

  • KERN_DIR
    该变量指定内核源码的路径,因为编译驱动模块需要进入到对应的内核源码中
  • PWD
    该变量表示当前驱动源码所在路径
  • make -C $(KERN_DIR) M=$(PWD) modules
    这句命令表示编译模块
    make -C $(KERN_DIR)-C 表示进入某个目录使用其 Makefile 进行编译,这里即进入到内核目录,使用内核目录下的 Makefile 进行编译
    M=$(PWD)M=Dir 表示去哪个路径下寻找模块源码,这里即在当前目录下寻找模块源码(个人理解是找 xxxx.c文件)
  • obj-m += xxxx.o
    这句命令表示把 xxxx.c 编译成 xxxx.o ,最终编译成模块 xxxx.ko 文件

PS:-m表示不会编译进内核,但会生成一个 xxxx.ko 文件,如果是 -y 则表示把 xxxx.o 文件编译进内核

  • $(CROSS_COMPILE)gcc -o xxx_app xxx_app.c (可有可无,针对应用程序的)
    $(CROSS_COMPILE) 指的是当前环境下指定的编译工具链,该命令指的是编译当前目录下的 xxx_app.c 应用程序
    在编译内核之前需要指定编译的平台和工具链,如下所示
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值