make -C M=
http://blog.sina.com.cn/s/blog_89fa41ef0100trjr.html
Makefile:
PWD = $(shell pwd)
KERNEL_SRC = /usr/src/linux-source-2.6.15/
obj-m := test.o
module-objs := test.o
all:
$(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules
clean:
rm *.ko
rm *.o
在test.c和Makefile所在的目录下运行make,如果看到类似输出
make -C /usr/src/linux-source-2.6.15/ M=/home/vmeth modules
make[1]: Entering directory `/usr/src/linux-source-2.6.15'
CC [M] /home/vmeth/hello.o
Building modules, stage 2.
MODPOST
CC /home/vmeth/hello.mod.o
LD [M] /home/vmeth/hello.ko
make[1]: Leaving directory `/usr/src/linux-source-2.6.15'
一般用下面的Makefile,
# Makefile2.6
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are listed here.
mymodule-objs := hello.o
obj-m := hello.o
else
PWD := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
KERNELRELEASE 是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义,所以make将读取执行else之后的内容。
当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。
当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容。else之前的内容为kbuild语法的语句, 指明模块源码中各文件的依赖关系,以及要生成的目标模块名。
每个内核的名字都包含了它的版本号,这也是 uname -r 命令显示的值。
随机推荐
- tensorflow内存溢出问题
Tensorflow的静态图结构简洁清晰,符合人的思维.虽然编程上略微有些复杂,但是原理很容易看懂. Tensorflow分建图过程和运行图(张量求值)两个阶段,在这两个阶段中都可以定义操作和张量.但 ...
- Java Exceptions
invalid end header( bad central directory size) 异常描述 java.util.zip.ZipException: invalid END header ...
- libevent中min_heap分析
typedef struct min_heap { struct event** p; unsigned n, a; } min_heap_t; static inline void min_heap ...
- Rplidar学习(二)—— SDK库文件学习
SDK头文件介绍 1.头文件简介: rplidar.h //一般情况下开发的项目中仅需要引入该头文件即可使用 RPLIDAR SDK 的所有功能. rplidar_driver.h //定义了 SDK ...
- 高效的MySQL分页——利用子查询分页
——先抄回来~~~ 首先看一下分页的基本原理: mysql> explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20G*** ...
- mongoDB 32位 安装包地址
https://www.mongodb.org/dl/win32/i386 http://downloads.mongodb.org/win32/mongodb-win32-i386-3.2.4-si ...
- 整合大量开源库项目(八)能够载入Gif动画的GifImageView
转载请注明出处王亟亟的大牛之路 上周大多数时间都是依据兴起,想到什么做什么写了几个自己定义控件,把Soyi丢在那没怎么动,今天就把写的东西整合进来,顺便把SOyi"个人研发的结构理一下&qu ...
- javascript的崛起及其生态元素
随着web的流行,人们花在浏览器上的时间吸引了巨头们对浏览器的重视,继而几年前富客户端概念,一批富客户端技术的涌现,如silverlight, flex等,曾经风起云涌,最终都败给了html5 和 j ...
- SQL中实现SPLIT函数几种方法
例1 代码如下 复制代码 create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))returns @temp ...
- .net自定义控件Control、WebControl、CompositeControl
一.呈现方法 1.Control主要有以下4个方法用于呈现 //该方法为入口方法 public virtual void RenderControl (HtmlTextWriter writer) { ...