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);
  • 相关阅读:
    Layout布局
    了解java虚拟机—串行回收器(6)
    了解java虚拟机—JVM相关参数设置(2)
    了解java虚拟机—堆相关参数设置(3)
    了解java虚拟机—垃圾回收算法(5)
    了解java虚拟机—并行回收器(7)
    了解java虚拟机JVM的基本结构(1)
    了解java虚拟机—非堆相关参数设置(4)
    了解java虚拟机—CMS回收器(8)
    求FTP协议规范中文版
  • 原文地址:https://www.cnblogs.com/renhl/p/4550734.html
Copyright © 2011-2022 走看看