您的位置:首页 > 其它

Makefile之编译可装载模块 -obj-m

2014-10-09 11:45 302 查看
http://fongzhiye.blog.163.com/blog/static/202836152201211110159695/

编译可装载模块 - obj-m

$(obj-m) 列举出了哪些文件要编译成可装载模块。

一个模块可以由一个文件或多个文件编译而成。如果是一个源文件,Kbuild
Makefile只需简单的将其加到$(obj-m)中去就可以了。

例子:
#drivers/isdn/i4l/Makefile
obj-$(CONFIG_ISDN_PPP_BSDCOMP)
+= isdn_bsdcomp.o
注意:此例中 $(CONFIG_ISDN_PPP_BSDCOMP) 的值为'm'

如果内核模块是由多个源文件编译而成,那你就要采用上面那个例子一样的方法去声明你所要编译的模块。Kbuild需要知道你所编译的模块是基于哪些文件,所以你需要通过变量$(<module_name>-objs)来告诉它。看下的面子:
例子:
#drivers/isdn/i4l/Makefile
obj-$(CONFIG_ISDN)
+= isdn.o
isdn-objs
:= isdn_net_lib.o isdn_v110.o isdn_common.o

在这个例子中,模块名将是isdn.o, Kbuild将编译在$(isdn-objs)中列出的所有文件,然后使用"$(LD)
-r"生成isdn.o。



Kbuild能够识别用于组成目标文件的后缀-objs和后缀-y。这就让Kbuild
Makefile可以通过使用 CONFIG_ 符号来判断该对象是否是用来组合对象的。
例子:
#fs/ext2/ Makefile
obj-$(CONFIG_EXT2_FS) +=
ext2.o
ext2-y :=
balloc.o bitmap.o
ext2-$(CONFIG_EXT2_FS_XATTR) +=
xattr.o

在这个例子中,如果 $(CONFIG_EXT2_FS_XATTR) 是 'y', xattr.o将是复合对象 ext2.o的一部分。

注意:当然,当你要将其编译进内核时,上面的语法同样适用。所以,如果你的 CONFIG_EXT2_FS=y,那Kbuild会按你所期望的那样,生成 ext2.o文件,然后将其联接到 built-in.o中。


风之子推荐阅读:

Makefile之编译进内核
-obj-y2012.02.11Makefile之编译进内核 -obj-y

drivers/usb/storage
Makefile解读

2012.02.11drivers/usb/storage
Makefile解读

Makefile之make自动推导2012.02.09Makefile之make自动推导

vmware
Fedora 9.0 下 内核编译及安2012.02.07vmware Fedora 9.0 下 内核编译及安装

主机与vmware
fedora 9.0 共享文件

2012.02.07主机与vmware
fedora 9.0 共享文件

Makefile之在规则中使用通配符2012.02.07Makefile之在规则中使用通配符

Makefile之多目标2012.02.07Makefile之多目标

Makefile之嵌套执行make2012.02.07Makefile之嵌套执行make

Makefile之清空目标文件的规则2012.02.06Makefile之清空目标文件的规则

make的工作方式2012.02.07make的工作方式

makefile之使用变量2012.02.06makefile之使用变量

Makefile的工作2012.02.06Makefile的工作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: