曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 8210|回复: 0
打印 上一主题 下一主题

2.4内核与2.6内核用于模块编译的 Makefile

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2009-8-30 03:13:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、2.4内核中编译外部模块的 Makefile

代码
1 KERNELDIR = /lib/modules/$(shell uname -r)/build
2 CFLAGS = -D__KERNEL__ -DMODULE -I$(KERNELDIR)/include -O
3
4 all: test.o
5
6 clean:
7       rm -rf *.o
第 1 行
指定编译的模块将要引用的内核源代码目录。模块与内核有着紧密联系,为了防止因版本出错,要统一运行模块的内核源代码。此时可以直接指定源代码,也可以间接指定其代码。该结构对于编译内核后利用 make modules_install 命令配置模块的情况较为有效,此时编译的内核应处于运行状态,也就是利用了用当前正在运行的内核源码树。

uname -r 命令输出当前运行中的内核版本信息。
/lib/modules/内核版本/build 文件以符号链接的方式指出当前运行中的内核源代码树上所匹配的目录。这和 2.6 内核的情况一样,如:
beyes@linux-beyes:/lib/modules/2.6.27.29-0.1-pae> ll
总计 2356
lrwxrwxrwx  1 root root     41 08-20 22:57 build -> /usr/src/linux-2.6.27.29-0.1-obj/i386/pae
...

第 2 行
编译模块时指定的编译选项。
      D__KERNEL__ 表示激活内核相关的内容
      DMODULE 表示激活与模块相关的内容
      O 表示优化
      I$(KERNELDIR)/include  模块源代码中引用的内核头文件位置。
第 4 行
创建 test.o 的 Makefile 语句。利用多个对象创建 test.o 对象时定义下列内容。
all:  test.o
test.o:  test1.o test2.o test3.o
ld -r test1.o test2.o test3.o -o test.o

第 6 行
清除所有编译生成的文件

2、2.6 内核中编译外部模块的 Makefile

代码
01 obj-m := hello.o
02
03 KDIR := /lib/modules/$(shell uname -r)/build
04 PWD  := $(shell pwd)
05
06 default:
07     $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
08
09 clean:
10    rm -rf *.ko
11    rm -rf *.mod.*
12    rm -rf .*.cmd
13    rm -rf *.o
第 1 行
定义生成模块的名称。没有特殊约定时,hello.c 将会成为编译成 hello.c 的源代码文件。

第 3 行
指定内核源代码的位置

第 4 行
指定编译对象模块源代码所在位置的当前目录。

第 7 行
指定编译模块的命令。

第 8 行
利用编译结果清除所有的生成文件。

编译后,会生成许多文件,2.6 内核中生成的模块实际名称为 hello.ko , 也可以使用 hello.o 。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 01:55 , Processed in 0.077169 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表