免费注册 查看新帖 |

Chinaunix

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

[驱动] module_init()函数内代码不能执行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-25 09:22 |只看该作者 |倒序浏览
我虚拟机装的是redhat9
hello.c代码如下:
  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/init.h>
  11. #include<linux/errno.h>
  12. int test_init();
  13. void test_exit();
  14. module_init(test_init);
  15. module_exit(test_exit);
  16. int test_init()
  17. {
  18.         printk("test init ok\n");
  19.         return 0;
  20. }

  21. void test_exit()
  22. {
  23.         printk("test release ok\n");

  24. }
复制代码
Makefile代码如下:
  1. CC=gcc
  2. INCLUDE=/usr/src/linux-2.4.20-8/
  3. OBJS=hello.o
  4. SRC=hello.c
  5. FLAGS=-D_KERNEL_ -DMODULE -I $(INCLUDE)

  6. hello.o:hello.c
  7.         $(CC) $(FLAGS) -c $< -o $@
  8. clean:
  9.         rm -f $(EXEC) *.o
复制代码
执行make后,在该目录下生成hello.o文件,然后我insmod hello.o文件,期望结果是打印出"test init ok",但是结果如下:
[root@localhost hello]# insmod hello.o
Warning: loading hello.o will taint the kernel: no license
  See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Module hello loaded, with warnings

出现警告,要加载的hello.o模块会影响内核,没有授权。没有出现期望的"test init ok"字样,也就是说test_init()函数里的代码根本没有执行。但是我用lsmod测试时,内核中已加载模块却有hello这个模块,测试结果如下:
ot@localhost hello]# lsmod
  1. Module                  Size  Used by    Tainted: P
  2. hello                    824   0  (unused)//这就是新增加的hello模块
  3. ide-cd                 35196   0  (autoclean)
  4. cdrom                  33472   0  (autoclean) [ide-cd]
  5. parport_pc             18756   1  (autoclean)
  6. lp                      8868   0  (autoclean)
  7. parport                36480   1  (autoclean) [parport_pc lp]
  8. autofs                 12948   0  (autoclean) (unused)
  9. pcnet32                18016   1
  10. mii                     3944   0  [pcnet32]
  11. ipt_REJECT              3896   6  (autoclean)
  12. iptable_filter          2380   1  (autoclean)
  13. ip_tables              14648   2  [ipt_REJECT iptable_filter]
  14. keybdev                 2880   0  (unused)
  15. mousedev                5428   1
  16. hid                    21700   0  (unused)
  17. input                   5792   0  [keybdev mousedev hid]
  18. usb-uhci               25868   0  (unused)
  19. usbcore                77696   1  [hid usb-uhci]
  20. ext3                   69984   2
  21. jbd                    51220   2  [ext3]
  22. BusLogic               99932   3
  23. sd_mod                 13324   6
  24. scsi_mod              106168   2  [BusLogic sd_mod]
复制代码
而且,当我rmmod hello时,期望出现的“test exit ok”字样也没有出现,即test_exit()函数里的代码根本没有执行。
请教各位高手不吝赐教,谢谢!

论坛徽章:
0
2 [报告]
发表于 2010-07-25 10:53 |只看该作者
本帖最后由 wmmy2008 于 2010-07-25 10:56 编辑

Linux module should be compiled to  *.ko

论坛徽章:
0
3 [报告]
发表于 2010-07-27 09:23 |只看该作者
同意楼上的

还有应该有个授权宏吧

MODULE_LICENSE("Dual BSD/GPL");

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
4 [报告]
发表于 2010-07-27 09:42 |只看该作者
2.4跟2.6编写模块时有些变化
如果lz使用rh9,推荐看一下LDD第二版

论坛徽章:
0
5 [报告]
发表于 2010-07-27 09:54 |只看该作者
你dmesg看一下就可以看到了,这个是虚拟机问题,虚拟机里printk打不出东西来。

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
6 [报告]
发表于 2010-07-27 12:47 |只看该作者
回复 5# liying_gg


    KERN_***级别不够
    printk(KERN_*** "");找个高级别的试试

论坛徽章:
0
7 [报告]
发表于 2010-07-27 13:19 |只看该作者
回复 6# openspace


    级别没用,怎么调都没用,这个就是vmware问题。

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
8 [报告]
发表于 2010-07-27 13:24 |只看该作者
回复 7# liying_gg


    以前学的时候用的就是vmware,将其级别调高以后就可以了
    具体Linux版本没有注意过

论坛徽章:
0
9 [报告]
发表于 2010-07-27 13:41 |只看该作者
最后发现是vmware的问题,谢谢了

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
10 [报告]
发表于 2010-07-27 14:19 |只看该作者
回复 9# 0vk0


    这里搜到一篇
      http://www.360doc.com/content/07/0923/17/11586_764919.shtml
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP