免费注册 查看新帖 |

Chinaunix

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

求教insmod错误的解决办法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-12 09:35 |只看该作者 |倒序浏览
  1.     #include <linux/module.h>
  2.     #include <linux/kernel.h>
  3.     #include <linux/init.h>
  4.     #include <linux/fs.h>
  5.     #include <linux/cdev.h>
  6.     #include <linux/device.h>

  7.     MODULE_LICENSE ("GPL");

  8.     int hello_major = 120;
  9.     int hello_minor = 0;
  10.     int number_of_devices = 1;

  11.     struct cdev cdev;
  12.     static dev_t dev;

  13.     struct file_operations hello_fops = {
  14.           .owner = THIS_MODULE
  15.     };

  16.     static void char_reg_setup_cdev (void)
  17.     {
  18.        int error;
  19.        cdev_init (&cdev, &hello_fops);
  20.        cdev.owner = THIS_MODULE;
  21.        cdev.ops = &hello_fops;
  22.        error = cdev_add (&cdev, dev, 1);
  23.        if (error)
  24.            printk (KERN_NOTICE "Error %d adding char_reg_setup_cdev", error);

  25.     }

  26.     struct class *my_class;

  27.     static int __init hello_2_init (void)
  28.     {
  29.         int result;
  30.         dev = MKDEV(hello_minor, hello_minor);
  31.         result = register_chrdev_region (dev, number_of_devices, "hello");
  32.         if (result<0) {
  33.             printk (KERN_WARNING "hello: can't get major number %d\n", hello_major);
  34.             return result;
  35.          }

  36.         char_reg_setup_cdev ();

  37.         /* create your own class under /sysfs */
  38.         my_class = class_create(THIS_MODULE, "my_class");
  39.         if(IS_ERR(my_class))
  40.         {
  41.             printk("Err: failed in creating class.\n");
  42.             return -1;
  43.         }

  44.         /* register your own device in sysfs, and this will cause udev to create corresponding device node */
  45.         device_create( my_class, NULL, dev, "hello%d", 0 );

  46.         printk (KERN_INFO "Registered character driver\n");
  47.         return 0;
  48.     }

  49.     static void __exit hello_2_exit (void)
  50.     {
  51.         cdev_del (&cdev);
  52.         device_destroy(my_class, dev);   
  53.         class_destroy(my_class);                              
  54.         unregister_chrdev_region (dev, number_of_devices);

  55.         printk (KERN_INFO "char driver cleaned up\n");
  56.     }

  57.     module_init (hello_2_init);
  58.     module_exit (hello_2_exit);
复制代码
成功编译后,insmod hello.ko,只提示"killed".
若再次insmod hello.ko则会提示insmod error inserting 'hello.ko ':-1 file exists。运行lsmod |grep hello,显示
hello                   2849  1
如果rmmod hello.ko,则提示ERROR: Module hello is in use

内核版本为2.6.38.2

希望本版的前辈帮帮忙,困扰了很久。多谢了

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
2 [报告]
发表于 2011-05-12 10:04 |只看该作者
没仔细看,应该是init函数出问题了,貌似只能重启

论坛徽章:
0
3 [报告]
发表于 2011-05-12 10:54 |只看该作者
你的那个模块存在了 你再insmod 当然不行啦。。 错误信息不是告诉你了吗

论坛徽章:
0
4 [报告]
发表于 2011-05-12 11:02 |只看该作者
回复 3# april88416


是的,rmmod是后续的操作,最关键的是insmod以后,系统马上提示"killed"。

论坛徽章:
0
5 [报告]
发表于 2011-05-12 11:03 |只看该作者
回复 2# amarant


   的确只能重启才能解决问题,不知道代码错哪里了,麻烦帮忙看看

论坛徽章:
0
6 [报告]
发表于 2011-05-12 12:58 |只看该作者
回复 1# createwindow


    After insmoding the module ,run command 'dmesg|tail ' to check what to print .Maybe you can fix it then!

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
7 [报告]
发表于 2011-05-12 13:13 |只看该作者
每个函数的返回值都看下,看看到底出错在哪

论坛徽章:
0
8 [报告]
发表于 2011-05-12 14:49 |只看该作者
回复 6# alexbuaa

这个是信息
[  364.950023]  [<c04078ed>] device_create+0x2d/0x30
[  364.950028]  [<f80b20f2>] hello_2_init+0xf2/0x106 [hello]
[  364.950034]  [<c0101135>] do_one_initcall+0x35/0x170
[  364.950037]  [<f80b2000>] ? hello_2_init+0x0/0x106 [hello]
[  364.950044]  [<c0180cb6>] sys_init_module+0x116/0x1090
[  364.950048]  [<c010301f>] sysenter_do_call+0x12/0x28
[  364.950050] Code: 00 00 00 00 c7 45 f0 00 00 00 00 0f 88 d1 03 00 00 8b 45 e0 03 45 dc 89 45 e4 73 0f 8b 55 e0 c7 45 e4 ff ff ff ff f7 d2 89 55 dc <0f> b6 07 8b 5d e0 84 c0 74 7b 90 8d 74 26 00 8d 55 ec 89 f8 e8
[  364.950081] EIP: [<c0361681>] vsnprintf+0x41/0x430 SS:ESP 0068:eb851e3c
[  364.950086] CR2: 0000000000000000
[  364.950089] ---[ end trace 5aeedd94db89d742 ]---

论坛徽章:
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
9 [报告]
发表于 2011-05-12 15:10 |只看该作者
就是你在执行模块初始化的时候出错了

论坛徽章:
0
10 [报告]
发表于 2011-05-12 15:56 |只看该作者
本帖最后由 createwindow 于 2011-05-12 22:03 编辑

发现device_create的调用影响了这个结果,深层次原因还不清楚,删除该句则不会出错。
大家有没有什么建议
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP