linux驱动编程的makefile文件编写与环境搭建

linux驱动编程的makefile文件编写:

# 模块被编译时会前后两次进入该目录进行编译。
# 在该目录下(即模块所在的目录)执行make命令时,第一次根据该Makefile
# 进行编译,此时KERNELRELEASE变量的值为空,所以ifeq条件成立。
# KERNELRELEASE是在内核源码树的顶层Makefile中定义的一个变量,其值为
# 内核的版本号。
ifeq ($(KERNELRELEASE),)

# 定义模块所在目录的变量
PWD := $(shell pwd)
# 定义内核源码所在目录的变量,该目录下的内核源码应该是被移植好的内核
# 源码,并且经过了正确的配置和编译,修改Makefile时需要修改该变量的值。
KERNELDIR ?= /home/gjt/source_damo/linux_kernel/linux-2.6.35.3
# 定义安装目录,即根文件系统的目录,该目录即为NFS挂载的主机目录。模块将被安装在
# 该目录下的lib/modules/<内核版本号>/extra目录下,修改Makefile时需要
# 修改该变量的值。
INSTALLDIR ?= /root/easyARM/rootfs

# 第一个目标,为默认的目标,即执行make modules命令和执行make命令的效果相同。
modules:
	# $(MAKE)相当于make,-C表明进入到一个指定目录进行编译,此时会进入
	# 到内核源码所在的目录,即KERNELDIR所指定的目录进行编译。
	# 进入到内核源码目录进行编译的最主要的效果是KERNELRELEASE变量将会
	# 被定义,并且被导出到各个子目录,以便在第二次进入模块所在的目录
	# 进行编译时,ifeq条件不成立。M变量指定了内核源码树外的模块目录,用于
	# 指导编译器从内核源码树目录重新回到模块所在目录进行编译。
	# modules用于指定编译模块,正如make zImage用于编译内核映像一样。
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

# 用于模块的安装,推荐使用该方式,这样可以使用modprobe命令进行模块的装载。
modules_install:
	# INSTALL_MOD_PATH用于指定根文件系统的路径,路径名一定要正确。
	# modules_install用于说明是进行模块安装操作。
	$(MAKE) -C $(KERNELDIR) M=$(PWD) INSTALL_MOD_PATH=$(INSTALLDIR) modules_install
clean:
	rm -rf *.o *.ko *.mod.c .*.cmd modules.order Module.symvers .tmp_versions

# 第二次进入模块所在的目录进行编译时,由于KERNELRELEASE变量已被定义,
# 所以else条件成立。
else

# obj-m用于指明相应的文件被编译成模块,正如obj-y用于指明相应的文件编译进内核映像一样。
obj-m := hello.o

endif

在内核目录之外的任意目录创建一个自己的目录。增加自己的.C文件,Makefile文件即可。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值