编译linux驱动的makefile

本文详细介绍了如何使用makefile进行交叉编译,区分了obj-m和obj-y两种编译方式,以及如何设置KERNELDIR和CROSS_PATH。内容包括针对不同环境的编译步骤和清理规则。
摘要由CSDN通过智能技术生成

交叉编译驱动的makefile

编译驱动有两种情况,一种是将驱动程序编译成.ko文件,然后在板子上进行insmod安装,这种使用obj-m,另外一种是将驱动编译到内核使用obj-y

#obj-m表示编译成ko文件,obj-y编译到内核中
obj-m := ch36x.o
#交叉编译需要指定内核在ubuntu的位置,内核源代码路径
KERNELDIR= /home/ht/rk3588/nvr_v1.3/kernel_rk_demo

#交叉编译器路径
CROSS_PATH = /opt/rk_linux/rv1126_1109/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-

#驱动模块源代码路径,这里驱动源代码和makefile放在了一起
PWD	:= $(shell pwd)

#交叉编译,ARCH=arm64就是指定要编译的系统是arm64架构上的,modules代表要编译内核驱动模块
modules:
	$(MAKE) ARCH=arm64 $(CFLAGS) LOCALVERSION="sun50iw6" CROSS_COMPILE=$(CROSS_PATH) -C $(KERNELDIR) M=$(PWD) modules
clean:
	rm -rf *.o *~ core .depend .*.cmd *.mod *.mod.c .tmp_versions modules.order Module.symvers Module.markers built-in.o ch36x.ko *.ko.*

在本系统编译自己的驱动

# Copyright (C) WCH 2019
# Makefile for linux 2.6.25 and above

ifneq ($(KERNELRELEASE), )
#call from kernel build system
obj-m := ch36x.o
else
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD	:= $(shell pwd)
modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD)
clean:
	rm -rf *.o *~ core .depend .*.cmd *.mod.c .tmp_versions modules.order Module.symvers Module.markers built-in.o ch36x.ko *.ko.*
endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值