码迷,mamicode.com
首页 > 系统相关 > 详细

如何编译一个linux下的驱动模块(1)

时间:2015-08-08 13:26:39      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

 

直接写Makefile 文件(假设要编译的文件为hello.c)

1 ifneq ($(KERNElRELEASE),)

2 obj-m := hello.o

3 else

4 obj-m := hello.o

5 KERNELDIR ?= /lib/modules/$(shell uname -r)/build

6 PWD := $(shell pwd)

7

8 default:

9 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

10 endif

第一个ifeq ($(KERNELRELEASE),)目前,并无用处,它的由来是指在Linux源码根目录下的Makefile编译内核时,KERNELRELEASE宏会被定义,那么如果是从源码根目录开始的make则会将myhello.o模块编译进内核。

KERNELDIR ?= /usr/src/$(shell uname -r) ,这句是对KERNELDIR进行赋值,这个变量是后面我们用到的指代内核源码目录用的。

PWD := $(shell pwd),这句是对PWD变量进行赋值,作用是将$(shell pwd)的返回结果既求得当前目录的路径赋值给PWD,这个变量我们在后面指代我们要编译的驱动程序所在的位置。

 

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

这句是Makefile的规则:这里的$(MAKE)就相当于make,-C 选项的作用是指将当前工作目录转移到你所指定的位置。“M=”选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules 命令中加入“M=dir”,程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成ko文件。

 

 

如何编译一个linux下的驱动模块(1)

标签:

原文地址:http://www.cnblogs.com/xmnn1990/p/4712860.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!