• 2. 自动创建设备节点


    https://blog.csdn.net/zqixiao_09/article/details/50849735

    上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号。第一种是使用mknod手工创建:mknod filename type major minor第二种是自动创建设备节点:自动创建设备节点是利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),有busybox配置、利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置。 具体udev相关知识这里不详细阐述,可以移步Linux 文件系统与设备文件系统 —— udev 设备文件系统,这里主要讲使用方法。

    在驱动中加入udev的支持做法:

    * 在驱动初始化的代码里调用class_create()为该设备创建一个class
    * 再为每个设备调用device_create()创建对应的设备
    

    内核中定义的struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_create函数,可以用它创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,在调用device_create函数来在/dev目录下创建相应的设备节点

    这样,加载模块的时候,用户空间中的udev会自动响应device_create函数,去/sysfs下寻找对应的类从而创建设备节点。

    下面是两个函数的解析:
    1、class_create(...) 函数
    功能:创建一个类;
    下面是具体定义:

    owner:THIS_MODULE
    name : 名字

    __class_create(owner, name, &__key)源代码如下:

    销毁函数:void class_destroy(struct class *cls)

    2、device_create(...) 函数
    struct device *device_create(struct class *class, struct device *parent,
    dev_t devt, void *drvdata, const char *fmt, ...)
    功能:创建一个字符设备文件
    参数:
    struct class *class :类
    struct device *parent:NULL
    dev_t devt :设备号
    void *drvdata :null、
    const char *fmt :名字
    返回:
    struct device *
    下面是源码解析:

    device_create_vargs(class, parent, devt, drvdata, fmt, vargs)解析如下:

    现在就不继续往下跟了,大家可以继续往下跟;

    下面是一个实例:
    hello.c



    test.c

    makefile

    下面可以看几个class几个名字的对应关系:

  • 相关阅读:
    SUSE 安装 iServer、iDesktop启动异常问题
    各系统勒索补丁下载地址
    centos 安装atom 笔记
    转载---SuperMap GIS 9D SP1学习视频播单
    SuSE的命令安装软件 zypper
    Leaflet客户端学习笔记
    设置UI控件的Layer属性(边框可见,边框颜色,边框宽度,边框圆角)
    安全清理Xcode 缓存垃圾
    OC变量命名禁忌
    iOS中的应用启动原理
  • 原文地址:https://www.cnblogs.com/Ocean-Star/p/9245638.html
Copyright © 2020-2023  润新知