zoukankan      html  css  js  c++  java
  • Linux字符设备驱动开发的一般方法

    Linux下的设备分类为:字符设备/块设备/网络设备

    今天简单介绍下字符设备驱动开发的一般方法,分为两部分:
    1,字符设备添加
    2,字符设备操作

    字符设备添加

    Linux下设备的表现形式是一个文件,比如串口的文件是“/dev/ttyS0”。按如下步骤创建设备文件:
    1,创建sysfs class
    struct class *cl = class_create(THIS_MODULE, "lm");
    2,创建sysfs device
    device_create(cl, NULL, first, NULL, "char_lm", ...);
    3,用户态udev进程根据sysfs device信息自动生成/dev/目录设备文件

    字符设备操作:

    设备文件支持像普通文件一样open/read/write,同时也支持设备文件独有的ioctl。实现这些操作需要设备驱动实现对应的文件操作接口并与字符设备绑定。

    file_operation结构体:

    static struct file_operations lm_fops =
    {

      .owner = THIS_MODULE,
      .open = my_open,
      .release = my_close,
      .read = my_read,
      .write = my_write,
      .unlocked_ioctl = my_ioctl,
    };

    将file_operation与cdev结构绑定:

    void cdev_init(struct cdev *cdev, const struct file_operations *fops);

    将cdev与创建的字符设备文件绑定:

    int cdev_add(struct cdev *p, dev_t dev, unsigned count);

    完整代码:
    https://pan.baidu.com/s/1TWMMJjYQz81GSj19qqBsIA

    问题:
    驱动模块加载后设备节点只允许root操作,如何提供能供普通用户操作的设备节点呢?(请自我解答)

  • 相关阅读:
    mysql读写分离
    mysql主从同步
    扫描与抓包
    加密与入侵检查
    监控
    selinux
    预期交互
    python发送邮件
    linux下安装虚拟环境
    博弈论
  • 原文地址:https://www.cnblogs.com/llc-blog/p/9537789.html
Copyright © 2011-2022 走看看