免费注册 查看新帖 |

Chinaunix

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

[内核模块] 【求助】加载模块时遇到Operation not permitted的错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-12 01:21 |只看该作者 |倒序浏览
我自己编写的一个虚拟字符设备驱动的代码,在Ubuntukylin13.10下运行正常,可是在RHEL6.4下编译通过,然后insmod的时候就提示Operation not permitted。我是用root登录的。求解。
代码:
MyCharDev.tar.bz2 (58.6 KB, 下载次数: 7)

  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/fs.h>
  4. #include "mychrdev.h"

  5. #define CHR_MEM_SIZE 255
  6. #define CHR_DEV_MAJOR 250
  7. #define CHR_DEV_NAME "MyChrDev"
  8. struct MyCharDev *mycd;

  9. ssize_t read(struct file* fp, char __user *buff, size_t size, loff_t* loff)
  10. {
  11.         int i;
  12.         if(mycd == NULL)
  13.                 return -1;
  14.         for(i=0;i<size;i++)
  15.         {
  16.                 if(Char_read(mycd, &buff[i]) == -1)
  17.                         return i;
  18.         }
  19.         return i;
  20. }

  21. ssize_t write(struct file* fp, const char __user *buff, size_t size
  22.         , loff_t* loff)
  23. {
  24.         int i;
  25.         if(mycd == NULL)
  26.                 return -1;
  27.         for(i=0;i<size;i++)
  28.         {
  29.                 if(Char_write(mycd, buff[i]) == -1)
  30.                         return i;
  31.         }
  32.         return i;
  33. }

  34. int open(struct inode* node, struct file* fp)
  35. {
  36.         fp->private_data = mycd;
  37.         return 0;
  38. }

  39. int release(struct inode* node, struct file* fp)
  40. {
  41.         fp->private_data = NULL;
  42.         return 0;
  43. }

  44. struct file_operations fop
  45. /**************************
  46. ={
  47.         .read = read,
  48.         .write = write,
  49.         .open = open,
  50.         .release = release,
  51.         .owner = THIS_MODULE
  52. }
  53. *************************/
  54. ;

  55. int __init hello_init(void)
  56. {
  57.         fop.read = read;
  58.         fop.write = write;
  59.         fop.open = open;
  60.         fop.release = release;
  61.         fop.owner = THIS_MODULE;
  62.         if((mycd = Char_init(CHR_MEM_SIZE)) == NULL)
  63.         {
  64.                 printk(KERN_ALERT"Can\'t init chardev\n");
  65.                 return -1;
  66.         }
  67.         if(0 > register_chrdev(CHR_DEV_MAJOR, CHR_DEV_NAME, &fop))
  68.         {
  69.                 printk(KERN_ALERT"regist dev error\n");
  70.                 return -1;
  71.         }
  72.         printk(KERN_ALERT"Hello world!\n");
  73.         return 0;
  74. }
  75. void __exit hello_exit(void)
  76. {
  77.         Char_uninit(mycd);
  78.         unregister_chrdev(CHR_DEV_MAJOR, CHR_DEV_NAME);
  79.         printk(KERN_ALERT"Goodbye world!\n");
  80. }

  81. module_init(hello_init);
  82. module_exit(hello_exit);

  83. MODULE_LICENSE("Dual BSD/GPL");
  84. MODULE_AUTHOR("Xiaocaihu");
复制代码


论坛徽章:
0
2 [报告]
发表于 2014-05-12 09:05 |只看该作者
MODULE_LICENSE("Dual BSD/GPL");
改成GPL试试

论坛徽章:
20
CU大牛徽章
日期:2013-04-17 11:48:26羊年新春福章
日期:2015-03-10 22:39:202015年中国系统架构师大会
日期:2015-06-29 16:11:282015亚冠之平阳省
日期:2015-07-31 09:19:042015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-09-30 06:20:002015亚冠之柏太阳神
日期:2015-10-19 20:29:5915-16赛季CBA联赛之天津
日期:2016-11-29 14:03:4315-16赛季CBA联赛之北控
日期:2016-12-24 20:51:492015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-12 20:58:532014年中国系统架构师大会
日期:2014-10-14 15:59:00
3 [报告]
发表于 2014-05-13 08:34 |只看该作者
有可能是协议的问题,modprobe -f  xxxx.ko  强制加载

论坛徽章:
0
4 [报告]
发表于 2014-05-13 13:13 |只看该作者
sudo insmod ./xxx.ko

论坛徽章:
20
CU大牛徽章
日期:2013-04-17 11:48:26羊年新春福章
日期:2015-03-10 22:39:202015年中国系统架构师大会
日期:2015-06-29 16:11:282015亚冠之平阳省
日期:2015-07-31 09:19:042015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-09-30 06:20:002015亚冠之柏太阳神
日期:2015-10-19 20:29:5915-16赛季CBA联赛之天津
日期:2016-11-29 14:03:4315-16赛季CBA联赛之北控
日期:2016-12-24 20:51:492015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-12 20:58:532014年中国系统架构师大会
日期:2014-10-14 15:59:00
5 [报告]
发表于 2014-05-13 22:41 |只看该作者
lz的问题解决了吗

论坛徽章:
0
6 [报告]
发表于 2014-05-13 23:21 |只看该作者
回复 5# beyondfly


谢谢您的回复。这两天比较忙,没时间上论坛。   
找到原因了。居然是设备号冲突。把register_chrdev的第一个参数改成0,让系统自动分配设备号,问题解决。

论坛徽章:
0
7 [报告]
发表于 2014-05-13 23:22 |只看该作者
回复 2# lonelyair


    谢谢您的回复。
问题已经解决了。居然是设备号冲突{:3_198:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP