Linux字符设备驱动及设备节点自动创建

Linux 字符设备驱动结构(二)—— 自动创建设备节点 上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号。 第一种是使用mknod手工创建:mknod filename type major minor 第二种是自动创建设备节点:利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置。在驱动初始化代码里调用class_create为该设备创建一个 阅读详情

27.1 前言

字符设备是一种以字节流来存取的设备,查看正在使用的设备驱动可用命令:cat /proc/devices;字符设备文件第一个为c开头,可使用命令:ls –l /dev/* 如下图示:

在老版的Linux内核中,注册一个Linux字符设备需要调用多个函数完成,如下图示:先申请设备号,然后分配字符设备空间,初始化完毕后就添加以完成注册。

在后来内核中,可以直接调用register_chrdev()一个函数,传入对应的参数便可完成字符设备的添加,极大方便了驱动人员的开发编程。

在编写字符设备驱动的时候,一开始我们学习的是,要手动的进行mknod去创建设备节点文件着实会有点小麻烦。在Linux中是有一组函数在驱动代码中直接创建/dev目录下的设备节点的,但要支持这个必须要求系统支持udev,udev名称为用户层的设备管理器,主要用来管理/dev目录下的设备节点,具有热插拔的属性。

    自动创建设备文件函数组为:class_create(),device_create(),device_destroy(),class_destroy(),调用上述四个函数便可,完成设备节点的自动创建。

 

27.2 相关函数说明

register_chrdev(major,devName,fops)

注册字符设备,主设备号填0时,系统自动分别设备号,设备名及fops

unregister_chrdev(major,devName)

注销字符设备

class_create(owner,className)

创建设备类,owner指定所属谁一般为:THIS_MODULE,className类名,返回指向一个类的指针

device_create(*class,parentClass,evID,drvData,*devName)

类指针,NULL,设备ID,驱动私有数据,驱动名

unregister_chrdev(mayjor,devName)

注销字符设备;设备号;设备名

device_destroy(*class,mayjor)

删除class下的设备;major为设备号

class_destroy(*class)

删除class;要删除的class指针

27.3 驱动实例

#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/device.h> 	//class_create
#define I_DEVICE_NAME			"iTestDev"

static int major;
static struct class *iTest_class;
static struct device *iTest_device;

static int iRead(struct file * file, const char __user * buffer, size_t count, loff_t * ppos)
{
	return -1;
}

static const struct file_operations stfops = {
	.owner	= THIS_MODULE,
	.read   = iRead,
};

static int __init iTest_Init(void)
{
	/* 主设备号设置为0表示由系统自动分配主设备号 */
	major = register_chrdev(0, I_DEVICE_NAME, &stfops);

	/* 创建iTest_class类 */
	iTest_class = class_create(THIS_MODULE, "iTestClass");

	/* 在iTest_class类下创建设备,并在/dev/目录下创建iTestDevice节点*/
	iTest_device = device_create(iTest_class, NULL, MKDEV(major, 0), NULL, "iTestDevice");
	return 0;
}

static void __exit iTest_Exit(void)
{
	unregister_chrdev(major, I_DEVICE_NAME);
	device_unregister(iTest_device);
	class_destroy(iTest_class);	
}

module_init(iTest_Init);
module_exit(iTest_Exit);

MODULE_LICENSE("GPL");

Insmod 驱动模块之后,便可以在/dev/目录下看到设备文件节点:/dev/iTestDevice

 

linux字符设备驱动中自动创建设备节点 本文简述在linux字符设备驱动编程中自动创建设备节点。至于手动创建设备节点的编程 阅读详情

相关推荐

linux 添加字符设备驱动程序及测试程序

linux下采用模块方法,添加一个新的设备驱动程序。 要求添加字符设备的驱动。 另附一个应用程序,测试添加的驱动程序

【Linux驱动】字符设备驱动模板(四)—— 自动创建 / 删除设备节点

【Linux驱动】字符设备驱动模板(四)—— 自动创建 / 删除设备节点

challenglistic的博客 1249

手把手教你用示波器搞定PCIe 5.0 REFCLK时钟信号测量(附完整参数解读)

本文详细介绍了如何使用示波器进行PCIe 5.0 REFCLK时钟信号测量,包括示波器与探头的选择、关键参数的测量方法及解读,以及实战中的常见问题与解决方案。通过手把手教学和完整参数解读,帮助硬件工程师高效完成时钟信号测量,确保系统稳定性。

weixin_28704565的博客 359

Linux驱动(二)之自动创建设备节点

linux驱动自动创建设备节点,alloc_chrdev_region、cdev_add、class_create 、 device_create 接口解析

cesheng3410的博客 618

ZYNQ平台上基于SGMII接口的IEEE1588/PTP协议高效实现方案

本文深入探讨了在Xilinx ZYNQ平台上,利用SGMII接口实现高精度IEEE1588/PTP协议的方案。通过将硬件时间戳单元集成在PL端的AXI以太网子系统IP核中,该方案绕过了软件协议栈和外部PHY的延迟,实现了亚微秒级的时间同步精度。文章详细解析了硬件设计、Vivado IP配置、Linux驱动移植及PTP协议栈部署等关键步骤,为工业控制、通信等领域的高精度网络同步提供了高效、灵活的解决路径。

q5r6s7的博客 604

pycharm添加Anaconda解释器显示不出来

因为我之前下载的是pycharm最新版本2024.1的,所以我抱着试一试的心态卸载重装了2021.3.3的,创建新文件的时候立刻就自己识别好了conda环境。就是图中画圈的地方,之前一直显示为python的图标,但是再Python Interpreter后面跟的路径确实是我下载anaconda的地方。另外一种方法就是使用Virtualenv Environment方式配置,但是我的pycharm还是没有识别出conda的图标。首先是这位的方法,先添加系统解释器,再重启,但是我的图标还是python。

2202_75803271的博客 4006

Linux驱动.之字符设备驱动框架,及手动,自动注册创建/dev下设备节点详解(一)

可以看出分配的结构体指针数组有255个元素,由于有的主设备号大于254,故需要除以255取余,这样,当主设备号为256时,除以255取余为1,故存在数组chrdev[1]中,但chrdev也可存主设备号为1的元素,故使用链表,使主设备号为1的char_device_struct的next成员指向主设备号为256的char_device_struct。用 ls -l命令可以看到如下的显示:sda,sda1是磁盘设备的节点,8就是主设备号,后面的0,1 ,2 就是次设备号,有好几个分区。

rjszcb的博客 825

AD20/Altium designer——如何进行DRC检查、冲突的错误如何改正

对于一个画完的PCB,我们常常需要进行DRC检查,确保板子的电器连接及制作工艺在设定规则的范围内,本篇将介绍如何对PCB进行后期DRC检查处理,确保电路板出现不必要错误。 1.DRC检查入口 2.DRC设置 3.错误分析 对于错误的内容,依据个人实际情况不同,其出现的原因都是因为与设计规则中的设定标准冲突,这里按遇到的错误进行修改讲解,其他错误同理。 4.常见错误分析及解决方法 (1) 解决方法:将未连接网络连接(...

嵌入式创客工坊的博客 5万+

Linux2.6驱动开发

目前Linux2.6并不能直接生成设备文件,需要手动生成,接下来就是如何解决这一问题。

有人住高楼,有人在深沟;有人光万丈,有人一身锈。 782

【Unity】【2D】用连续图片生成动画Animation的简明步骤

本文介绍了Unity中使用2D连续图片制作2D动画Animation的简明步骤。

O青草O的博客 Unity和游戏制作知识分享 718

数据科学技术与应用【中国大学MOOC】:数据可视化_第五次作业_答案

数据科学技术与应用 数据可视化 第五次作业 答案 题目来源:中国大学MOOC-东华大学-宋晖等-数据科学技术与应用 1 ( 30分 ) 2012—2017年我国人均可支配收入为[1.47, 1.62, 1.78, 1.94, 2.38, 2.60](单位:万元)。按照要求绘制以下图形。 1)模仿例4-1和例4-3,绘制人均可支配收入折线图。用小矩形标记数据点,黑色虚线,用注解标注最高点,图标题为“Income chart”,设置坐标轴标题,最后将图形保存为JPG文件。 2)模仿例4-2,使用多个子图分别绘制

Herbert胡不归 6140

嵌入式Linux字符设备自动创建设备节点

Linux 驱动实验中, 当我们通过 insmod 命令加载模块后, 还需要通过 mknod 命令来手动创建设备节点, 这样使用起来太麻烦了, 并且不可能每个设备都去这样操作, Linux 系统的存在就是为了方便使用, 所以我们来看一下如何实现自动创建设备节点, 当加载模块时, 在/dev 目录下自动创建相应的设备文件。怎么自动创建一个设备节点呢? 在嵌入式 Linux 中使用 mdev 来实现设备节点文件的自动创建和删除。

yangxueyangxue的博客 1531

STM32F103/F407/H743不同GPIO速度配置(HAL库)对应的最高速度

详细介绍了STM32F103/F407/H743不同GPIO速度配置(HAL库)对应的最高速度。

kevin1499的博客 5589

Linux字符设备驱动(三)自动创建设备节点

Linux字符设备驱动(三)自动创建设备节点 在前面的字符设备中需要手动运行mknod创建设备节点,但其实linux中可以通过udev自动创建设备节点,通过下面两步即可实现。 class_createdevice_create struct class *class_create(struct module *owner, const char *name); struct dev...

rbin_yao的博客 553

(计算机组成原理)第二章数据的表示和运算-第二节:数字电路基础知识

本文介绍了计算机组成原理中的逻辑门电路、多路选择器和三态门。逻辑门电路包括基本逻辑运算(与、或、非)和复合逻辑运算(与非、或非、异或、同或),这些运算通过门电路实现,并满足分配律和结合律。多路选择器(MUX)用于从多个输入信号中选择一个输出,广泛应用于数据选择、资源共享和逻辑函数实现等场景。三态门则具有三种输出状态(高电平、低电平、高阻态),常用于总线控制和信号隔离。这些元件在数字电路设计和计算机系统中具有重要作用。

快乐江湖的博客 2474

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

linux字符设备驱动中自动创建设备节点【转】

来自:http://blog.youkuaiyun.com/smilefyx/article/details/40402603 简述 本文简述在Linux字符设备驱动编程中自动创建设备节点。以下内容不在本文描述范围内: 1、设备号、驱动等概念性问题;       相关内容请看:http://blog.youkuaiyun.com/zjjyliuweijie/article/details/7001383

shareinfo2018 486

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【Linux驱动实战】:初识字符设备,内核自动创建设备节点的原理

本文介绍了Linux字符设备驱动的开发入门经验,重点讲解了如何实现自动创建设备节点的方法。作者通过一个简单的字符设备驱动示例代码,展示了如何动态申请设备号、使用class_create和device_create函数自动生成设备文件,而不需要手动执行mknod命令。文章详细分析了代码结构,包括指针判错的特殊处理方式、goto语句在错误处理中的优雅应用,以及编译运行的具体步骤。实验结果表明,通过这种方法,udev守护进程能够自动在/dev目录下创建设备节点,简化了驱动开发流程。这篇文章为Linux驱动开发初学

分享一些嵌入式Linux相关知识 396

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

linux驱动设备节点名称,Linux字符设备驱动及设备节点自动创建

27.1 前言字符设备是一种以字节流来存取的设备,查看正在使用的设备驱动可用命令:cat /proc/devices;字符设备文件第一个为c开头,可使用命令:ls –l /dev/* 如下图示:在老版的Linux内核中,注册一个Linux字符设备需要调用多个函数完成,如下图示:先申请设备号,然后分配字符设备空间,初始化完毕后就添加以完成注册。在后来内核中,可以直接调用register_chrdev...

weixin_33907300的博客 1088

linux字符设备驱动总结之:全自动创建设备及节点

/***************************************************************************************************                          linux字符设备驱动总结之:全自动创建设备及节点 看了LDD3,深入浅出LDD,以及各个博文,还是需要总结下的。 张永辉 2012年10月9

BPC's Domain 689

(8)Linux 字符设备驱动基础:从设备号到 cdev 注册(自动创建设备节点)

在 Linux 字符设备驱动开发中,手动通过mknod命令创建设备节点的方式虽直观,但在实际场景中不够便捷 —— 每次加载驱动都需手动执行创建命令,且卸载后需手动清理设备文件。更高效的方式是通过内核提供的和函数,实现设备节点的,核心依赖udev系统(Linux 主流发行版默认内置)的热插拔事件机制。本文将详细讲解 “设备号注册 → cdev 绑定 → 自动创建设备节点” 的完整流程,无需手动干预,驱动加载时自动在/dev目录下生成设备文件,卸载时自动清理,符合实际驱动开发规范。

m0_48287567的博客 704

Linux字符设备驱动开发:从file_operations到自动创建设备节点

本文详细介绍了Linux字符设备驱动开发的全过程,从理解file_operations结构体到设备号管理(包括register_chrdev动态注册),再到自动创建设备节点。内容涵盖驱动函数实现要点、完整初始化清理流程及实战经验,帮助开发者掌握字符设备驱动开发的核心技术。

lll78的博客 854

编写Linux 字符设备驱动 dmeo (自动创建设备节点)

编写Linux 字符设备驱动 dmeo (自动创建设备节点) 若有纰漏,欢迎大家在评论区留言指正~【抱拳】

weixin_43621710的博客 297

Linux字符设备驱动自动创建设备节点

Linux可使用udev、mdev的机制来自动创建设备节点。在驱动层面,我们需要首先调用class_create创建一个class类,然后在class类下,调用device_create来创建一个class_device,即类下面创建类的设备。(此方法仅适用于2.6以上的内核)。内核中定义的struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了

were0415的博客 1680
上一篇: Linux GPIO驱动实例及GPIOLib简介
下一篇: Linux内核定时器简介及使用
Chasing_Chasing
博客等级 码龄10年 233粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值