当前位置: 首页 > article >正文

嵌入式 Linux 设备驱动:自动创建设备节点详解

文章目录

前言

一、设备节点简介

二、自动创建设备节点的原理

三、实现自动创建设备节点

四、测试


前言

在嵌入式 Linux 设备驱动开发中,设备节点是用户空间与内核空间交互的桥梁。传统的手动创建设备节点方式(mknod)不仅繁琐,而且容易出错,在每次加载设备驱动时都要手动对设备的节点进行创建。本文将详细介绍如何在 Linux 驱动中实现设备节点的自动创建。


一、设备节点简介

设备节点是 Linux 系统中用于访问硬件设备的特殊文件,位于 /dev 设备目录下。设备节点分为:

  • 字符设备节点:用于字符设备(如 LED、按键等)。
  • 块设备节点:用于块设备(如硬盘、U 盘等)。

二、自动创建设备节点的原理

Linux 内核提供了 udev 机制(用于动态管理设备文件的一个用户空间工具),可以根据设备信息自动创建设备节点。驱动开发者只需在内核中注册设备,并提供必要的信息(如设备号、设备名称等),udev 会自动在 /dev 目录下创建设备节点,无需再手动进行设备节点的创建。

三、实现自动创建设备节点

主要的自动创建设备节点的代码定义如下所示:

newchrled.class = class_create(THIS_MODULE, NEWCHRLED_NAME);
	if (IS_ERR(newchrled.class)) {
		return PTR_ERR(newchrled.class);
	}

	newchrled.device = device_create(newchrled.class, NULL, newchrled.devid, NULL, NEWCHRLED_NAME);
	if (IS_ERR(newchrled.device)) {
		return PTR_ERR(newchrled.device);
	}

 首先,创建一个新类并将这个类的指针赋值给newchrled.class成员变量,在创建了类后,接下来使用device_create()函数在之前创建的类下创建一个实际的设备节点。在device_create函数中第一个参数newchrled.class是指向前面创建的类的指针。第二个参数表示父设备。第三个参数newchrled.devid包含了设备号(主次设备号),这是由系统分配的。第四个参数表示是否传递私有数据到设备。最后一个参数为设备的名字,它将作为/dev下的设备文件名。

四、测试

嵌入式Linux设备上电加载uboot,linux内核,根文件系统启动后使用lsmod查看当前加载到内核中的模块,发现在没有加载设备驱动时,没有对应的设备节点

 

 随后,使用modprobe加载设备驱动,发现在加载设备驱动时,系统分配了主设备号和从设备号,无需在使用mknod命令来手动创建设备节点,提高了开发的效率。

最后在设备驱动使用结束后,可使用 rmmod命令来卸载设备驱动。


http://www.kler.cn/a/550606.html

相关文章:

  • CNAPPgoat:一款针对云环境的安全实践靶场
  • Linux-C/C++《C/8、系统信息与系统资源》
  • elementUI rules 判断 el-cascader控件修改值未生效
  • C++函数指针与回调函数详解:从青铜到王者,一文搞懂`std::function`的降维打击!
  • vtkCamera类的Dolly函数作用及相机拉近拉远
  • sass报错:[sass] Undefined variable. @import升级@use语法注意事项
  • s1K 数据集:是一个用于提升语言模型推理能力的高质量数据集。包含 1,000 个问题,每个问题都配有详细的 推理路径 和 答案。
  • Lua脚本核心语法介绍
  • 图解卷积神经网络(CNN)
  • stm32高级TIM的常用功能
  • 期权隐含波动率是什么意思?
  • 构建了一个 Linux 发行版,基于Debian和WattOS的
  • Node.js 异步并发控制:`p-map` 和 `p-limit` 的使用与对比
  • Day4 25/2/17 MON
  • 阅读论文笔记《Efficient Estimation of Word Representations in Vector Space》
  • 1 Flask路由和试图函数
  • seata基本使用
  • Android车载应用开发常用adb命令
  • 【含文档+源码】基于Web的在线课堂测试课程考评系统的开发与实现
  • Mac zsh使用相关问题之一