⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 char_driv_simp.c

📁 简单的字符设备驱动程序
💻 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 + -