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的工作
编译可装载模块 - 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的工作
相关文章推荐
- Makefile之编译可装载模块 及 多源文件编译方法
- Linux 驱动开发之内核模块开发 (二)—— 内核模块编译 Makefile 入门
- 2.6核Linux模块编译Makefile编写及步骤
- 编译内核模块的makefile
- 内核模块编译Makefile模板
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响—linux2.4单独编译驱动模块
- 两个编译2.4与2.6内核模块的Makefile 模板
- linux 2.6内核 编译模块Makefile 详解
- 内核模块编译 makefile入门
- 多个*.c文件编译生成一个模块驱动*.ko的makefile文件编写
- 引用 模块编译Makefile模板
- 模块编译Makefile的编写形式
- android 单独编译某个模块发生错误:make: *** 没有规则可以创建“out/target/common/obj/APPS/Browser_intermediates/src/R.stamp
- linux编译单独一个模块makefile写法
- 多个*.c文件编译生成一个模块驱动*.ko的makefile文件编写
- 模块构造的编译和装载
- 新路程------imx6的模块编译的Makefile
- 多个*.c文件编译生成一个模块驱动*.ko的makefile文件编写
- 如何把自己的驱动编译进内核或模块(Kconfig和Makefile)
- hello模块编译及Makefile解读