📄 char_driv_simp.c
字号:
#include <linux/types.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/usb.h>#include <linux/fs.h>#include <linux/mutex.h>#include <linux/slab.h>#include <linux/uaccess.h>#include<linux/kdev_t.h>#include<linux/cdev.h> unsigned long size ; static char *Kong_buf="Hello moto hahah"; struct cdev *dev;static char *char_name="Kong_simp_driver";//static int major=221;//static int minor=0; dev_t dev_no=MKDEV(223, 0);static int Kong_open(struct inode *inode,struct file *filp) {//struct Kong_str *dev; //dev=container_of(inode->i_cdev,struct Kong_str,cdev); //filp->private_data=dev; Kong_buf=kzalloc(1024,GFP_KERNEL);return 0;}static int Kong_release(struct inode *inode, struct file *filp) { // cdev_del(dev);//unregister_chrdev_region(dev_no,1);//kfree(Kong_buf);return 0;}static ssize_t Kong_read(struct file *filp,char __user *buf,size_t count, loff_t *f_pos){ ssize_t retval=88; //char *Kong_buf[1024];//memset(Kong_buf,0,1024);// dev=filp->private_data; //// if(*f_pos>=dev->size)//goto out; //if(*f_pos+count>dev->size) // count=dev->size-*f_pos; retval=copy_to_user(buf,Kong_buf,count);retval=count; //*f_pos+=count;//retval=count;//out:return retval;}static ssize_t Kong_write(struct file *filp,char __user *buf,size_t count,loff_t *f_pos){ ssize_t retval;//memset(Kong_buf,0,1024); //ssize_t retval=0;//dev=filp->private_data; // dev->Kong_buf=kmalloc(count+10,GFP_KERNEL);//if (!dev->Kong_buf) // goto out; retval=copy_from_user(Kong_buf,buf,count);retval=count;//*f_pos+=count;//retval=count;//out:return retval;} static struct file_operations Kong_fops={ .owner= THIS_MODULE, .read= Kong_read, .write= Kong_write, .open= Kong_open,.release= Kong_release,}; static int __init Kong_init(void){ int result;result=register_chrdev_region(dev_no,1,char_name);if(result) printk("Register no success!");dev=cdev_alloc();dev->owner=THIS_MODULE;dev->ops=&Kong_fops;cdev_init(dev,&Kong_fops);cdev_add(dev,dev_no,1);printk("Mount Kong_driver Successful!\n");return 0; } static void __exit Kong_exit(void){ cdev_del(dev); kfree(Kong_buf);unregister_chrdev_region(dev_no,1); printk("Umount Kong_driver Successful!\n");}module_init(Kong_init);module_exit(Kong_exit);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -