- 论坛徽章:
- 0
|
我自己编写的一个虚拟字符设备驱动的代码,在Ubuntukylin13.10下运行正常,可是在RHEL6.4下编译通过,然后insmod的时候就提示Operation not permitted。我是用root登录的。求解。
代码:
MyCharDev.tar.bz2
(58.6 KB, 下载次数: 7)
- #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[i]) == -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[i]) == -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");
复制代码
|
|