免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: godbach

一个模块包含多目录和源文件,Makefile写法 [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-11-09 16:14 |显示全部楼层
原帖由 T-Bagwell 于 2009-11-9 15:50 发表
一般不用修改Makefile
一般是Kconfig文件

可以直接用shell的方法得到内容,然后添加到Kconfig中就可以了吧?

我没遇到过godbach兄的情况,一般我们添加都是自己写的文件,边写边改Makefile文件


我的需求是这样的,有一大堆的源代码需要集成到某个已有的模块上,这一堆源代码是分布在多个目录中。

这就需要在编译该模块的时候,能够将新添加的这一堆文件都继续都进行编译。如果这些文件直接放在内核源码中
那么如何修改编译选项呢。
譬如模块名为testmodule.ko
如果之前就一个源文件testmodule.c的话,编译的方式如下:
obj-$(CONFIG_IP_NF_TESTMOUDLE) += testmodule.o
那么现在多了这么多源文件,重新编译的话,如何修改Makefile呢?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-11-09 16:19 |显示全部楼层
可以直接用shell的方法得到内容,然后添加到Kconfig中就可以了吧?

Kconfig主要是确定编译之前的相关配置,以及如何呈现在编译菜单中。具体文件的编译还是需要修改Makefile的吧。

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2009-11-09 16:29 |显示全部楼层

  1. find . -type d > tmp_include_config
  2. find . -iname "*.c" > config_src_c
  3. awk '{print "CFLAGS += -I" $1} ' tmp_include_config > cflags_include
  4. awk  '{ gsub(/.c/,".o")}; 1' config_src_c > obj_config
  5. awk '{print "obj-$(CONFIG_IP_NF_TESTMOUDLE) += " $1} ' obj_config > src
复制代码


然后把src里的内容copy出来,添加进你之前的
obj-$(CONFIG_IP_NF_TESTMOUDLE) += testmodule.o
这个变量的后面就应该可以了

论坛徽章:
0
发表于 2009-11-09 17:02 |显示全部楼层
编译kernel module时,调用shell pwd要小心 —— kbuild会改变pwd,不是你想的那个样子。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-11-09 17:22 |显示全部楼层
原帖由 albcamus 于 2009-11-9 17:02 发表
编译kernel module时,调用shell pwd要小心 —— kbuild会改变pwd,不是你想的那个样子。


albcamus兄指点一下,我的这种情形如何编译模块。

刚刚看了一下2.4下内核的Makefile,发现ip_conntrack.o是这样编译出来的
27 ip_conntrack-objs   := ip_conntrack_standalone.o $(ip_nf_conntrack-objs)
42 obj-$(CONFIG_IP_NF_CONNTRACK) += ip_conntrack.o

  253 ip_conntrack.o: $(ip_conntrack-objs)
  254     $(LD) -r -o $@ $(ip_conntrack-objs)


这种形式,先预定义ip_conntrack模块有哪些目标文件组成,然后在根据配置确定编译到那个列表,最后是链接这个模块的所有目标文件。

我的这种情形应该可以参考这种方式吧。

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2009-11-09 17:24 |显示全部楼层
我一般编译应用程序时用pwd

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-11-09 17:25 |显示全部楼层

回复 #16 T-Bagwell 的帖子

呵呵,我这是编译内核模块的。大家都没遇到一个模块由多个目录及文件组成的情况吗?

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2009-11-09 17:36 |显示全部楼层
用我说的那种方法行不通吗?

论坛徽章:
0
发表于 2009-11-09 17:42 |显示全部楼层
原帖由 godbach 于 2009-11-9 17:25 发表
呵呵,我这是编译内核模块的。大家都没遇到一个模块由多个目录及文件组成的情况吗?


一般一个模块的所有文件会放在一个目录中,另一个目录的话可以编译成另外一个模块。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-11-09 19:20 |显示全部楼层
原帖由 eexplorer 于 2009-11-9 17:42 发表


一般一个模块的所有文件会放在一个目录中,另一个目录的话可以编译成另外一个模块。


恩,我这里因为是需要移植别的模块,添加到当前模块中,所以文件和目录一下子多起来了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP