免费注册 查看新帖 |

Chinaunix

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

[C] [求助]在Ubuntu中如何写makefile文件生成.ko文件? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-21 11:07 |只看该作者 |倒序浏览
各位大虾,请帮帮忙解决这个问题。我在Ubuntu中编写makefile文件,内容如下:
  1. obj-m:=kill_port.o
  2. KERNELDIR:=/lib/modules/2.6.31-14-generic/build
  3. PWD:=$(shell pwd)

  4. modules:
  5.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

  6. modules_install:
  7.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

  8. clean:
  9.     $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
复制代码
结果运行make出现错误,请问这个Makefile怎么写呢?我是想按照模块编程的思想,让其生成一个.ko文件,然后通过insmod命令把.ko文件加载进内核中,再调试的。现在在这个问题上卡住了。望高手指点,不胜感激。附上源代码:
  1. #ifndef _KERNEL_
  2. #define _KERNEL_
  3. #endif            
  4. #ifndef MODULE
  5. #define MODULE
  6. #endif
  7. #include <linux/module.h>
  8. #include <linux/sched.h>
  9. #include <linux/kernel.h>
  10. #include <linux/netdevice.h>
  11. #include <linux/ip.h>
  12. #include <linux/tcp.h>
  13. #include <linux/skbuff.h>
  14. #include <linux/proc.h>
  15. #include <linux/if.h>
  16. #include <linux/in.h>
  17. #include <linux/netifilter_ipv4.h>

  18. static unsigned int kill_port(unsigned int hooknum,
  19.                               struct sk_buff **skb,
  20.                               const struct net_device *in,
  21.                               const struct net_device *out,
  22.                               int (*okfn)(struct sk_buff*))
  23. {
  24. struct tcphdr *tcph;
  25. struct iphdr *iph;
  26. iph=(*skb)->nh.iph;

  27. if(iph->protocol==IPPROTO_TCP)
  28. {
  29. tcph=(*skb)->h.th;
  30. if(ntohs(tcph->source)==23)
  31. {
  32. printk("\nftp service refused");
  33. return NF_DROP;
  34. }
  35. return NF_ACCEPT;
  36. }

  37. struct nf_hook_op kill={
  38. .hook=kill_port,
  39. .owner=THIS_MODULE,
  40. .pf=PF_INET,
  41. .hooknum=NF_IP_LOCAL_OUT,
  42. .priority=NF_IP_PRI_FILTER,
  43. };

  44. int init_module(){
  45. nf_register_hook(&kill);
  46. return 0;
  47. }

  48. void cleanup_module(){
  49. nf_unregister_hook(&kill);
  50. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-04-21 11:31 |只看该作者
错误贴出来呀.

论坛徽章:
0
3 [报告]
发表于 2010-04-21 12:13 |只看该作者
回复 2# samlumengjun

论坛徽章:
0
4 [报告]
发表于 2010-04-21 12:20 |只看该作者
我在终端输入命令“uname -r",显示内核是2.6.31-14-generic,而且也下载了Linux-source-2.6.31源码压缩包,解压缩后运行sudo make、sudo make modules、sudo make modules_install,编译过内核。
至于有没有成功编译,或我写的Makefile文件有错,就不清楚了。很需要各位的指导

论坛徽章:
0
5 [报告]
发表于 2010-04-21 14:18 |只看该作者
把你的makefile改名成Makefile, 注意大小写!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2010-04-21 14:36 |只看该作者
错误贴出来呀.
samlumengjun 发表于 2010-04-21 11:31

1,偏不告诉你!
2,好吧,为了保密起见,我只能给你一个截屏,防止拷贝、搜索。

论坛徽章:
0
7 [报告]
发表于 2010-04-21 15:19 |只看该作者
  1. cat -A Makefile看看
  2. 1. dos2unix
  3. 2. $(MAKE)前tab你注意没?
复制代码

论坛徽章:
0
8 [报告]
发表于 2010-04-21 15:25 |只看该作者
  1. 如果Makefile没有问题的话看看
  2. [kenthy@kenthy ~]$ ls /lib/modules/2.6.31.5-127.fc12.i686.PAE/build/scripts/Makefile.build
  3. /lib/modules/2.6.31.5-127.fc12.i686.PAE/build/scripts/Makefile.build
  4. 你的Makefile.build存在?

  5. [kenthy@kenthy ~]$ ls -l /lib/modules/2.6.31.5-127.fc12.i686.PAE/
  6. total 3072
  7. lrwxrwxrwx.  1 root root     51 2010-04-01 06:47 build -> ../../../usr/src/kernels/2.6.31.5-127.fc12.i686.PAE

  8. 链接建立的正确?
复制代码

论坛徽章:
0
9 [报告]
发表于 2010-04-21 15:31 |只看该作者
都不是你们猜的原因,我说了让他把makefile改名成Makefile. 他大小写疏忽了而已.

论坛徽章:
0
10 [报告]
发表于 2010-04-27 13:20 |只看该作者
回复 9# samlumengjun


    谢谢!
   我真的没注意大小写,后来改了成Makefile后,运行make,有如下错误:

     我是Linux的初学者,对内核一点了解都没有,现在我要做的是模拟Linux的netfilter防火墙,但结果报错了,里面的一些函数和数据结构都说没有定义。估计是Makefile写错了,我用虚拟机装了Ubuntu的,要改怎么改呢?如果是Fedora或RedHat的呢?怎么写才对(因为实验室的机器有这些系统,我可以过去用)?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP