linux字元驅動例子

來源:互聯網
上載者:User

mail:bookworepeng@Hotmail.com

qq:196568501

author:Driver Monkey

phone:13410905075

#include <linux/init.h>#include <linux/module.h>#include <linux/cdev.h>#include <linux/fs.h>#include <linux/device.h>MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR("Driver Monkey");struct mmap_dev_t{dev_t dev_num;char *dev_name;struct class* cls;char * cls_name;struct cdev cdev;}; struct mmap_dev_t mmap_dev = {.dev_name = "test_dev",.cls_name = "test_class",};int my_open(struct inode *inode, struct file *filp){printk(KERN_INFO"my_open()++\n");printk(KERN_INFO"my_open()--\n");return 0;}ssize_t my_read(struct file *filp, char *buff, size_t count, loff_t *f_pos){printk(KERN_INFO"my_read()++\n");printk(KERN_INFO"my_read()--\n");return 0;}ssize_t my_write(struct file *filp, const char *buff, size_t count, loff_t *f_pos){printk(KERN_INFO"my_write()++\n");printk(KERN_INFO"buff is :\n %s", buff);printk(KERN_INFO"my_write()--\n");return count;}struct file_operations mmap_opt = {.owner = THIS_MODULE,.open = my_open,.read = my_read,.write = my_write,};static int mmap_init(void){int err = 0;printk("mmap_init()++\n");//dynamic alloc device numberif(0 != (err = alloc_chrdev_region    (&mmap_dev.dev_num, 0,3, mmap_dev.dev_name)))goto alloc_chrdev_region_err;printk("major = %d, minor = %d\n",   MAJOR(mmap_dev.dev_num),MINOR(mmap_dev.dev_num));//create classmmap_dev.cls = class_create(THIS_MODULE,mmap_dev.cls_name);if(IS_ERR(mmap_dev.cls))goto class_create_err;//create character devicedevice_create(mmap_dev.cls,NULL,mmap_dev.dev_num,&mmap_dev,"test_device");//activate character drivercdev_init(&mmap_dev.cdev, &mmap_opt);mmap_dev.cdev.owner = THIS_MODULE;err = cdev_add(&mmap_dev.cdev,mmap_dev.dev_num,1);if(err)goto cdev_add_err;printk("mmap_init()--\n");return 0;cdev_add_err:device_destroy(mmap_dev.cls, mmap_dev.dev_num);class_destroy(mmap_dev.cls);class_create_err:unregister_chrdev_region(mmap_dev.dev_num,3);alloc_chrdev_region_err:return (-1);}static void mmap_exit(void){printk(KERN_INFO"mmap_exit()++\n");cdev_del(&mmap_dev.cdev);device_destroy(mmap_dev.cls, mmap_dev.dev_num);class_destroy(mmap_dev.cls);unregister_chrdev_region(mmap_dev.dev_num,3);printk(KERN_INFO"mmap_exit()--\n");}module_init(mmap_init);module_exit(mmap_exit);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.