当使用make时自动创建 arch-zImage 和模块
使用 make -jN 可以进行并行的 make
make 默认的不是冗余方式(可以通过设置 KBUILD_VERBOSE=1 或者使用 make V=1来设置为冗余方式)
make help 将提供 make 目标支持
在任何一个阶段都不需要再运行 make dep
内核模块加载器也在2.5中完全被重新实现,这意味着模块编译机制相对于2.4有了很大不同。需要一组新的模块工具来完成模块的加载和缷载 (他们的下载链接可以在参考资料中找到),原来的2.4所用的 makefile 在2.6下不能再用。
新的内核模块加载器是由 Rusty Russel 开发的。它使用内核编译机制,产生一个 .ko(内核目标文件,kernel object)模块目标文件而不是一个 .o 模块目标文件。内核编译系统首先编译这些模块,并将其连接成为 vermagic.o。这一过程在目标模块创建了一个特定部分,以记录使用的编译器版本号,内核版本号,是否使用内核抢占等信息。
现在让我们来看一个例子,分析一下新的内核编译系统如何来编译并加载一个简单的模块。这个模块是一个“hello world”模块,代码和2.4模块代码基本类似,只是 module_init 和 module_exit 要换成 init_module 和 cleanup_module (内核2.4.10模块已经使用这种机制)。这个模块命名为 hello.c,Makefile 文件如下:
清单 3. 驱动程序 makefile 文件示例
KERNEL_SRC = /usr/src/linux
SUBDIR = $(KERNEL_SRC)/drivers/char/hello/
all: modules
obj-m := module.o
hello-objs := hello.o
EXTRA_FLAGS += -DDEBUG=1
modules:
$(MAKE) -C $(KERNEL_SRC) SUBDIR=$(SUBDIR) modules
makefile 文件使用内核编译机制来编译模块。编译好的模块将被命名为 module.ko,并通过编译 hello.c 和连接 vermagic 而获得。KERNEL_SRC 指定内核源文件所在的目录,SUBDIR 指定放置模块的目录。EXTRA_FLAGS 指定了需要给出的编译期标记。
一旦新模块(module.ko)被创建,它可以被新的模块工具加载或缷载。2.4中的原有模块工具不能用来加载或缷载2.6的内核模块。这个新的模块加载工具会尽量减少在一个设备仍在使用的情况下相应的模块却被缷载的冲突发生,而是在确认这些模块已经没有任何设备在使用后再缷载它。产生这种冲突的原因之一是模块使用计数是由模块代码自己来控制的(通过MOD_DEC/INC_USE_COUNT)。
在2.6中,模块不再需要对引用计数进行加或减,这些工作将在模块代码外部进行。任何要引用模块的代码都必须调用 try_module_get(&module),只有在调用成功以后才能访问那个模块;如果被调用的模块已经被缷载,那么这次调用会失败。相应的,可以通过使用 module_put() 来释放对模块的引用。保留:: http://www.qqread.com/linux/z421145206.html
更多内容请看Linux集群技术、体验Linux的音影世界、Linux驱动大全专题,或进入讨论组讨论。
相关专题
- Linux集群技术 (8259篇文章)
- 体验Linux的音影世界 (7931篇文章)
- Linux驱动大全 (8729篇文章)
- Linux下的路由的配置与应用 (11721篇文章)
- Linux命令简介 (9775篇文章)
- Linux防火墙 (9606篇文章)
- Linux日志专题 (8383篇文章)
- Linux服务器的安全性能 (20291篇文章)
- 全面解析 Linux2.6内核 (603篇文章)
- 揭秘Linux内存管理 (7995篇文章)
- Linux与Windows Vista的桌面之争 (83次浏览)
- 对比评测Vista XP Linux启动时间 (59次浏览)
- Linux 基本概念及常用命令 (57次浏览)
- Linux系统如何判断CPU是双核还是单核 (53次浏览)
- VMware下Linux与真实主机共享上网 (31次浏览)
- Linux系统下如何更改终端显示分辨率 (30次浏览)
- 实用技巧:配置Linux操作系统环境变量 (30次浏览)
- Fedora 8 Linux下安装配置audacious过程 (27次浏览)
- Linux系统下设置环境变量Path的方法 (25次浏览)
- 最流行的发行版:Ubuntu 8.04 Alpha 2发布 (24次浏览)



