免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3499 | 回复: 9
打印 上一主题 下一主题

[内核入门] 如何为外部模块编写Makefile,使得中间生成文件和代码分离 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-16 21:13 |只看该作者 |倒序浏览
本帖最后由 phenix_yw 于 2012-09-16 21:14 编辑

如当前目录下有source、include、obj三个目录,source目录存放模块源代码,以下Makefile可以编译,但是中间文件在代码目录中,如何修改Makefile才能将编译生成的中间文件都放在obj目录呢?

Makefile
==========================

ifneq ($(KERNELRELEASE),)
    obj-m := source/hello.o
else
    KERN_DIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)

default:
        $(MAKE) -C $(KERN_DIR) M=$(PWD) modules

clean:
        $(MAKE) -C $(KERN_DIR) M=$(PWD) modules clean

endif

论坛徽章:
0
2 [报告]
发表于 2012-09-17 23:53 |只看该作者
说实话,我被Linux里面的Makefile搞的头晕,比源码还更难看懂。
LZ发这个是LDD3里面的一个Makefile。
期待有人写个分析linux Makefile的文章。

论坛徽章:
0
3 [报告]
发表于 2012-09-18 00:00 |只看该作者
$(MAKE) -C $(KERN_DIR) O=$(PWD)/obj M=$(PWD) modules
貌似是这样的,好久不做kernel了,记不清了。

论坛徽章:
0
4 [报告]
发表于 2012-09-18 08:44 |只看该作者
写shell脚本,编译后mv到obj目录,再次编译时再mv到需要的地方
回复 1# phenix_yw


   

论坛徽章:
0
5 [报告]
发表于 2012-09-20 23:23 |只看该作者
回复 3# ShadowStar
这样也不行,.o文件还是在source目录中。

   

论坛徽章:
0
6 [报告]
发表于 2012-09-20 23:30 |只看该作者
回复 4# yiyuandao
这种做法本质上并没有在编译的时候将.o、.ko等obj文件和代码文件分离。

   

论坛徽章:
0
7 [报告]
发表于 2012-09-21 21:56 |只看该作者
为什么要分离开呢,
我之前也发过类似的帖子,没有什么解决方案。
自己写脚本就能做到了,编译时把中间文件拷过去,编译完了把中间文件mv走,这样代码目录不会杂乱。
回复 6# phenix_yw


   

论坛徽章:
0
8 [报告]
发表于 2012-09-22 08:42 |只看该作者
你写依赖的时候 obj/%.o 就行了,你把makefile贴完全,不然没法看啊

论坛徽章:
0
9 [报告]
发表于 2012-09-22 08:45 |只看该作者
本帖最后由 疯尼克斯 于 2012-09-22 08:45 编辑

像这样
$(OBJ_DIR)/%.o: %.c
        $(COMPILE)

论坛徽章:
0
10 [报告]
发表于 2012-09-23 22:30 |只看该作者
Makefile已经贴全了,内核模块的Makefile中不需要指定编译规则吧,Kbuild已经做了这些事了。回复 8# 疯尼克斯


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP