zoukankan      html  css  js  c++  java
  • 国嵌内核驱动进阶班-7-5(自动创建设备文件)

    linux 2.6.13 开始,devfs不存在,udev取代devfs.

    udev(mdev)存在应用层,可以实现设备文件的自动创建和删除。

    过程:

    驱动代码调用class_create创建一个class,再为每个设备调用class_create创建对应的设备。

    ※ 自动创建设备文件需要udev的支持


    struct class *myclass =  class_create(THIS_MODULE, "mydriver");

    device_create(myclass,NULL, MKDEV(major_num, 0), NULL, "mydevice");


     1 #include <linux/module.h>
     2 
     3 #include <linux/fs.h>
     4 
     5 #include <linux/device.h> /* device_create()*/
     6 
     7 struct class *myclass;
     8 
     9 dev_t devno;/*设备号*/
    10 
    11 /*设备驱动模块加载函数*/
    12 static int memdev_init(void)
    13 {
    14     int result = -1;/*返回值*/
    15     /* 动态分配设备号 */
    16     result = alloc_chrdev_region(&devno, 0, 1, "memdev");
    17     if (result < 0)
    18     {
    19          return -1;
    20     }
    21     /*
    22     mem_major = MAJOR(devno);
    23     */
    24 
    25     /*自动创建设备文件*/
    26     myclass = class_create(THIS_MODULE,"test_char"); /*在sys下创建类目录/sys/class/test_char*/
    27     if(IS_ERR(myclass)) 
    28     {
    29         printk("Err: failed in creating class.
    ");
    30         return -1; 
    31     }
    32     
    33     /*/dev目录下创建 memdev的设备文件*/
    34     device_create(myclass, NULL, devno, NULL, "memdev");   
    35 
    36     return 0;
    37 }
    38 
    39 /*模块卸载函数*/
    40 static void memdev_exit(void)
    41 {
    42    
    43    device_destroy(myclass, devno);        /*delete device node under /dev*/
    44    class_destroy(myclass);             /*delete class created by us*/
    45    unregister_chrdev_region(devno, 1); /*释放设备号*/
    46 }
    47 
    48 MODULE_AUTHOR("renhl");
    49 MODULE_LICENSE("GPL");
    50 
    51 module_init(memdev_init);
    52 module_exit(memdev_exit);
  • 相关阅读:
    Luogu P2181 对角线 简单数学,细节
    vscode 配置C、C++环境,编写运行C、C++(转)
    用家庭电脑架设minecraft服务器
    用阿里云架设我的世界(minecraft)服务器
    在线数独
    数学物理笔记
    复活的asdf1229
    test
    GitHub从小白到精通(第一章 初识)
    抛砖引玉,浅讲Handler和线程的关系
  • 原文地址:https://www.cnblogs.com/renhl/p/4550734.html
Copyright © 2011-2022 走看看