• 国嵌内核驱动进阶班-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);
  • 相关阅读:
    数仓备机DN重建:快速修复你的数仓DN单点故障
    深度学习分类任务常用评估指标
    云小课 | MRS基础入门之HDFS组件介绍
    华为云数据库GaussDB(for Cassandra)揭秘第二期:内存异常增长的排查经历
    为什么vacuum后表还是继续膨胀?
    Go 自定义日志库
    Go time包
    Go 文件操作
    Go 包相关
    【程序人生】跟小伙伴们聊聊我有趣的大学生活和我那两个好基友!
  • 原文地址:https://www.cnblogs.com/renhl/p/4550734.html
Copyright © 2020-2023  润新知