Linux字符设备驱动开发的一般方法

Posted llc_no1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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操作,如何提供能供普通用户操作的设备节点呢?(请自我解答)

 





















以上是关于Linux字符设备驱动开发的一般方法的主要内容,如果未能解决你的问题,请参考以下文章

(57)Linux驱动开发之三Linux字符设备驱动

Linux设备驱动中的并发

Linux设备驱动开发 新手,创建第一个字符设备驱动时对一些代码的功能不是很了解,能解释一下吗?

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

Linux驱动开发:字符设备驱动开发实战