小菜虎 发表于 2014-05-12 01:21

【求助】加载模块时遇到Operation not permitted的错误

我自己编写的一个虚拟字符设备驱动的代码,在Ubuntukylin13.10下运行正常,可是在RHEL6.4下编译通过,然后insmod的时候就提示Operation not permitted。我是用root登录的。求解。
代码:


#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include "mychrdev.h"

#define CHR_MEM_SIZE 255
#define CHR_DEV_MAJOR 250
#define CHR_DEV_NAME "MyChrDev"
struct MyCharDev *mycd;

ssize_t read(struct file* fp, char __user *buff, size_t size, loff_t* loff)
{
      int i;
      if(mycd == NULL)
                return -1;
      for(i=0;i<size;i++)
      {
                if(Char_read(mycd, &buff) == -1)
                        return i;
      }
      return i;
}

ssize_t write(struct file* fp, const char __user *buff, size_t size
      , loff_t* loff)
{
      int i;
      if(mycd == NULL)
                return -1;
      for(i=0;i<size;i++)
      {
                if(Char_write(mycd, buff) == -1)
                        return i;
      }
      return i;
}

int open(struct inode* node, struct file* fp)
{
      fp->private_data = mycd;
      return 0;
}

int release(struct inode* node, struct file* fp)
{
      fp->private_data = NULL;
      return 0;
}

struct file_operations fop
/**************************
={
      .read = read,
      .write = write,
      .open = open,
      .release = release,
      .owner = THIS_MODULE
}
*************************/
;

int __init hello_init(void)
{
      fop.read = read;
      fop.write = write;
      fop.open = open;
      fop.release = release;
      fop.owner = THIS_MODULE;
      if((mycd = Char_init(CHR_MEM_SIZE)) == NULL)
      {
                printk(KERN_ALERT"Can\'t init chardev\n");
                return -1;
      }
      if(0 > register_chrdev(CHR_DEV_MAJOR, CHR_DEV_NAME, &fop))
      {
                printk(KERN_ALERT"regist dev error\n");
                return -1;
      }
      printk(KERN_ALERT"Hello world!\n");
      return 0;
}
void __exit hello_exit(void)
{
      Char_uninit(mycd);
      unregister_chrdev(CHR_DEV_MAJOR, CHR_DEV_NAME);
      printk(KERN_ALERT"Goodbye world!\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Xiaocaihu");


lonelyair 发表于 2014-05-12 09:05

MODULE_LICENSE("Dual BSD/GPL");
改成GPL试试

beyondfly 发表于 2014-05-13 08:34

有可能是协议的问题,modprobe -fxxxx.ko强制加载

potato916305 发表于 2014-05-13 13:13

sudo insmod ./xxx.ko

beyondfly 发表于 2014-05-13 22:41

lz的问题解决了吗

小菜虎 发表于 2014-05-13 23:21

回复 5# beyondfly


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

小菜虎 发表于 2014-05-13 23:22

回复 2# lonelyair


    谢谢您的回复。
问题已经解决了。居然是设备号冲突{:3_198:}
页: [1]
查看完整版本: 【求助】加载模块时遇到Operation not permitted的错误