2011-06-01 驱动的makefile
来源:互联网 发布:淘宝手机详情页总高度 编辑:程序博客网 时间:2024/04/29 02:58
《Linux设备驱动程序(第三版)》。里面有个关于Module编译的Makefile
#如果已经定义了KERNELRELEASE,则说明是从内核整体编译的Make中调用。在我的2.6.31内核的
#Makefile中L357行有关于KERNELRELEASE定义:
#KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
#因此可以使用其内建语句
ifneq ($(KERNELRELEASE), )
obj-m := hello.o
#否则,是直接从命令行调用,
#这时需要调用内核构造系统
#对$(shell uname -r)会得到Linux系统版本相关信息:
# uname -r
#2.6.32-28-genericelse
#如果已经定义了KERNELRELEASE,则说明是从内核整体编译的Make中调用。在我的2.6.31内核的
#Makefile中L357行有关于KERNELRELEASE定义:
#KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
#因此可以使用其内建语句
ifneq ($(KERNELRELEASE), )
obj-m := hello.o
#否则,是直接从命令行调用,
#这时需要调用内核构造系统
#对$(shell uname -r)会得到Linux系统版本相关信息:
# uname -r
#2.6.32-28-genericelse
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
#对下面一句Makefile的解释:-C $(KERNELDIR)表示读取Makefile之前进入KERNELDIR目录,M=$(PWD)
#作为参数传给Makefile,在试图建立模块目标前, 回到你的模块源码目录,内核中的解释是:
#make M=dir modules Make all modules in specified dir
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
这样,通常在内核外编译模块(不是内核的makefile里面实现模块的编译),个 makefile 在一次典型的建立中要被读 2 次. 当从命令行中调用这个 makefile , 它注意到 KERNELRELEASE 变量没有设置(因为不是内核makefile里面编译),这样利用KERNELDIR 的那一行发现内核源码树.然后makefile 调用 default: 目标, 来运行第 2 个 make 命令( 在 makefile 里参数化成 $(MAKE))象前面描述过的一样来调用内核建立系统. 在第 2 次读,KERNELRELEASE 已赋值, makefile 设置 obj-m := hello.o, 并且内核的 makefile 文件完成实际的建立模块工作.(内核建立系统处理了余下的工作)
- 2011-06-01 驱动的makefile
- 驱动的Makefile
- 网卡驱动的Makefile
- 驱动的Makefile
- 内核驱动的Makefile
- 驱动编译 通用的Makefile
- linux驱动的Makefile分析
- linux驱动的Makefile编写
- 驱动Makefile
- 驱动Makefile
- linux下的hello_world驱动的Makefile
- vc的MakeFile工程直接编译驱动
- 编写内核驱动的通用Makefile
- vc的MakeFile工程直接编译驱动
- linux驱动最简单的makefile
- 多源文件的linux驱动Makefile编写
- 关于linux模块驱动简单的Makefile
- 驱动模块中Makefile的自我理解
- &与&&的区别
- log4j
- 哈~
- C语言教程
- attachEvent() / addEventListener() 对象添加触发
- 2011-06-01 驱动的makefile
- 分布式数据库的具体实现与对比分析
- qt getOpenFileNames方法很诡异的现象
- Apk文件反编译
- 如何在Repeater的HeaderTemplate和FooterTemplate模板中和ItemTemplate模板中寻找控件?
- 敏捷宣言
- Sybase 使用指南
- switch
- 各种垃圾回收算法的通俗解