驱动开发-杂项设备注册和模块解释

Linux字符设备驱动——杂项设备驱动模型 文章目录杂项设备驱动模型杂项设备驱动的特征头文件核心结构杂项设备注册函数杂项设备驱动示例代码杂项设备的驱动编写方法杂项设备驱动模型示例驱动程序zx_misc_led.c源代码应用程序app.c源代码实例代码测试 杂项设备驱动模型 杂项设备驱动的特征 1、 主设备号固定不变,为10 2、 注册后会自动在/dev目录下生成设备文件 3、 使用一个核心结构struct miscdevive封装起来 杂项... 阅读详情

驱动开发

模块和编译进内核

Makefile中,obj-m是编译成模块,形成.ko的文件,用insmod指令进行加载模块。
obj-y是编译进内核,这无疑会加大内核的体积,所以我们练习的时候用的都是obj-m,随时裁剪内核,方便快捷。
如果用的是编译进内核,那需要重新把内核烧进SD卡或eMMC上,再重新启动开发板。

模块格式

#include <linux/kernel.h>
#include <linux/module.h>

void myfun_module(void);
static int __init onemodule_init(void)  
{
	myfun_module();
	return 0;
}

static void __exit onemodule_exit(void)
{

}
module_init(onemodule_init); //声明
module_exit(onemodule_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("HY");

杂项设备注册

杂项设备是一个杂物间,本来各个设备应该是有各自的分类,这杂项呢就是各种分类的设备都可以放进这个杂物间。
杂项设备的主设备号是10,子设备号写成255表示由系统分配子设备号。

示例代码

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/io.h>
#include <linux/miscdevice.h>

#define LED1(x) x?(*((unsigned int *)GPM4_DAT)&=~(0xF)):(*((unsigned int *)GPM4_DAT)|=0xF)

void __iomem * GPM4_CON = NULL;
void __iomem * GPM4_DAT = NULL;

struct file_operations myfops;
struct miscdevice mymisc;

int myopen (struct inode *inode,struct file *file)
{
	LED1(1);
	return 0;

}
int myclose (struct inode *inode,struct file *file)
{
	LED1(0);
	return 0;
}


static int __init myled1_init(void)
{
	GPM4_CON = ioremap(0x110002E0,4);
	GPM4_DAT = ioremap(0x110002E4,1);

	//config led1
	*((unsigned int *)GPM4_CON) |= 0x1111;

	myfops.owner = THIS_MODULE;
	myfops.open = myopen;
	myfops.release = myclose;

	mymisc.minor = 255;
	mymisc.name = "led1";
	mymisc.fops = &myfops;

	misc_register(&mymisc);	
	return 0;
}

static void __exit myled1_exit(void)
{
	misc_deregister(&mymisc);
}

module_init(myled1_init);
module_exit(myled1_exit);
MODULE_LICENSE("GPL");

Linux——Linux驱动之杂项设备(基本概念、注册流程、杂项设备的驱动编写) 【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《嵌入式Linux开发实战》 长期持续带来更多案例与技术文章分享; 欢迎商业项目咨询,10年+软硬全栈内功,助力解决您的尊贵需求。 —————————————————————————————————— 目录 0 引言 1 什么是杂项设备? 2 杂项设备的描述 3 注册杂项设备的流程 4 编写杂项设备驱动实践 5 小结 0 引言 杂项设备是开... 阅读详情

相关推荐

大模型选型实战指南|教育行业:108个模型「闭卷考试」实测,这3类应用场景直接抄作业!

教育行业大模型选型必读 1.闭卷考试!独家评测集:用最新K12真题(小学-高中全学科)构建“闭卷考场”,108个模型同台竞技,数据污染率<5%(传统评测集污染率超60%) 2.价格透明对比:40元/M tokens的阿里系模型VS 2元/M tokens的字节系、腾讯系模型,谁更值? 3.四大选型禁区:>60元但得分<75的模型被列入不推荐名单(附避坑清单) 4.核心结论直出:教学核心环节必须用专用模型,90%场景用通用模型可降本50%+

easyllm的博客 1522

迅为IMX6ULL开发板-Linux MISC驱动-编写实验程序

首先我们回想一下注册杂项设备的三大流程,我们在 Windows 上面新建 misc.c 文件,并用 sourceinsight打开。我们可以将上次编写的 helloworld.c 里面的代码拷贝到 misc.c 文件,并修改为如下图所示: 添加头文件 /*注册杂项设备头文件*/ #include /*注册设备节点的文件结构体*/ #include 填充 miscdevice 结构体 struct miscdevice misc_dev = { .minor = MISC_DYNAMIC_MINOR,

mucheni的博客 266

【张量分解(二)】CP分解

一、CP分解 1.1 定义 CP分解就是将一个张量分解成多个单秩张量的和。例如,给定一个三阶张量X∈RI×J×K\mathcal{X}\in\mathbb{R}^{I\times J\times K}X∈RI×J×K,则CP分解可以写为 X≈∑r=1Rar∘br∘cr\mathcal{X}\approx\sum_{r=1}^{R}\textbf{a}_r\circ\textbf{b}_r\circ...

bqw的博客 2万+

g-sensor唤醒系统

/* For AllWinner android platform. * * mir3da.c - Linux kernel modules for 3-Axis Accelerometer * * Copyright (C) 2011-2013 MiraMEMS Sensing Technology Co., Ltd. * * This software is licensed u...

阿赞的专栏 2053

海康VisionMaster零代码开发实战:从PLC工程师到视觉专家的捷径

本文为PLC工程师提供了利用海康VisionMaster视觉平台实现零代码视觉开发的实战指南。文章详细阐述了如何通过图形化流程设计替代传统编程,快速搭建视觉检测应用,并实现与PLC的无缝通讯,是工程师从设备控制迈向视觉系统集成的有效捷径。

weixin_29201859的博客 293

Win10家庭版中文用户名改英文全攻略:从注册表到环境变量一步不落

本文详细介绍了Windows 10家庭版中文用户名改为英文的完整流程,包括注册表编辑、环境变量调整等关键步骤。通过激活管理员账户、重命名用户文件夹、修改注册表键值等操作,彻底解决因中文路径导致的软件兼容性问题,并提供常见错误解决方案和系统维护建议。

weixin_29227425的博客 427

Linux驱动开发笔记(四):设备驱动介绍、熟悉杂项设备驱动和ubuntu开发杂项设备Demo

驱动的开发需要先熟悉基本概念类型,本篇讲解linux杂项设备基础,还是基于虚拟机ubuntu去制作驱动,只需要虚拟机就可以尝试编写注册杂项设备的基本流程。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 1万+

手把手教你用Gazebo插件实现阿克曼底盘仿真(附Navigation2适配指南)

本文提供了一份完整的ROS2 Navigation2与Gazebo阿克曼底盘仿真全栈指南。从阿克曼运动学原理出发,详细讲解了如何构建URDF/SDF模型、集成gazebo_ros_ackermann_drive插件并进行PID调优,并重点阐述了如何深度适配Navigation2,包括配置Ackermann运动模型、调整规划器与恢复行为,最终实现从建图到自主导航的全流程仿真。

weixin_29310631的博客 398

Linux驱动开发之杂项设备注册和Linux2.6设备注册

杂项设备注册是Linux驱动开发中的一种设备注册方式。在Linux系统中,杂项设备是一类没有明确分类的设备,它们不属于字符设备、块设备或网络设备等特定类型。杂项设备可以包括各种不同类型的设备,如传感器、LED灯、温度计等。杂项设备注册的目的是将这些杂项设备描述成设备文件,以便通过文件操作来控制和访问设备。通过设备文件,应用程序可以打开、关闭、读取和写入杂项设备,实现对设备的控制和数据交互。在杂项设备注册中,使用​​结构体来描述设备的属性和设备文件的名字。

qq_58288010的博客 1863

动态刷新曲线_【GhPython应用】利用反射刷新Image sampler组件

【版权声明】| 作者:月之眼|案例图片来源:Sergiu Radu Pop的facebook| 如有侵权,请联系大水牛平台|如果觉得文章不错,欢迎分享效果展示利用python刷新Image sampler组件,主要的思路就是X输入端:输入要切换的图片路径,我的案例中输入了9张图片。然后通过100毫秒切换一张图片显示,来达到动态显示效果。代码分析run输入端类型:bool (I...

weixin_42393829的博客 531

记录思科cisco交换机升级iso步骤

Cisco Nexus 93180交换机版本升级

a635161812的博客 4377

Linux嵌入式驱动开发03——杂项设备驱动(附源码)

文章目录Linux三大设备驱动字符设备块设备网络设备杂项设备驱动杂项设备和字符设备区别主设备号和次设备号 Linux三大设备驱动 字符设备 IO的传输过程是以字符为单位的,没有缓冲,比如I2C,SPI都是字符设备 块设备 IO的传输过程以块为单位,跟存储相关的,都属于块设备,比如TF卡 网络设备 与前两个不一样,是以socket套接字来访问的 杂项设备驱动 杂项设备是字符设备的一种,可以自动生成设备节点 系统中也有很多的杂项设备,输入下面的命令可以查看 cat /proc/misc 可以看到misc的所

“逛丢一只鞋”的博客 2695

DDD系列 - 第6讲 仓库Repository - Mybatis篇

书接上回,之前通过一个关于拆解、微服务、面向对象的故事,向大家介绍了如何从微服务、面向对象一步步演进到DDD的,整个演进过程如下图:其中在领域层,我们定义了富血模型的领域模型,包括聚合、聚合根、实体、值对象等。聚合在代码层面中的表现形式即是一个包Package,起到了边界的作用,聚合内的对象间高内聚,而聚合间低耦合。聚合中放着实体、值对象、仓库等,实体相较于值对象的一个典型区别就是实体存在唯一标识,并且可通过该唯一标识查询到该实体并对其进行相关操作,值对象不存在唯一标识且通常作为实体。

罗小爬的技术宝书 1785

Linux驱动学习—杂项设备驱动注册

②杂项设备出来比字符设备代码简单。其他区别是杂项设备的主设备号是相同的,均为是10,次设备号是不同的。主设备号相同就可以节省内核的资源。①杂项设备驱动是属于字符设备的一种。设备号包含主设备号和次设备号,主设备号在Linux系统里面 是唯一的,次设备号不一定唯一。字符设备:IO的传输过程是以字符为单位的,没有缓冲。比如I2C,SPI都是字符设备。块设备:IO传输过程是以块为单位的。设备号是计算机识别设备的一种方式,主设备号相同的被视为同一类设备。主设备号比做成电话号码的区号。③主设备号和次设备号是什么?

suifen_的博客 1123

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【linux驱动开发】在linux内核中注册一个杂项设备与字符设备以及内核传参的详细教程

使用开发环境: windows + ubuntu18.04 + 讯为rk3568开发板,在linux内核中注册一个杂项设备与字符设备的详细教程,并且成功在讯为rk3568开发板上成功运行。 在本文中,还支持给内核驱动传递参数,即本文也是内核传参的详细案例教程。

黑心萝卜三条杠的博客 2110

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

安卓驱动框架:字符设备和杂项设备

安卓驱动框架:字符设备和杂项设备

似霰的博客 862

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

驱动-杂项设备

看杂项设备还是要和标准字符设备对比来看,主设备号固定为10,次设备号动态分配,简化了字符设备驱动的注册流程,适用于功能简单的设备杂项设备也有自己的结构体miscdevice 、file_operations ,却别与标准字符设备的 设备号结构体dev_t ,注册的字符设备结构体cdev ,文件操作集合结构体file_operations。

十年饮冰,难凉热血 816

驱动程序开发--杂项设备驱动实验

本文介绍了Linux内核中的杂项设备驱动开发。杂项设备是字符设备的特殊封装,具有节省主设备号(固定为10)和使用简单的优势。文章详细讲解了miscdevice结构体的定义与填充方法,重点阐述了misc_register()和misc_deregister()函数的用法。通过一个完整的实验示例,展示了杂项设备驱动的编写、编译、加载和测试过程,包括Makefile编写、模块加载、设备节点创建等关键步骤。测试结果显示驱动成功注册并自动创建了/dev/test设备节点,验证了杂项设备驱动开发的完整流程。

m0_74323630的博客 950

Linux驱动编程 - 注册misc杂项设备

Linux杂项设备驱动

hinewcc的博客 1185

【Linux驱动】Linux杂项设备驱动

杂项设备是字符设备的一种,杂项设备可以自动生成设备节点。Linux内核中将字符设备抽象成一个具体的数据结构(struct cdev),我们可以理解为字符设备对象, cdev记录了字符设备的相关信息(设备号、内核对象),字符设备的打开、读写、关闭等操作接口(file_operations), 在我们想要添加一个字符设备时,就是将这个对象注册到内核中,通过创建一个文件(设备节点)绑定对象的cdev, 当我们对这个文件进行读写操作时,就可以通过虚拟文件系统,在内核中找到这个对象及其操作接口,从而控制设备。

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 1752

【 Linux 杂项设备驱动】

本文介绍了Linux杂项设备驱动的开发技术,重点分析了其特点和开发流程。作为字符设备驱动的特殊形式,杂项设备驱动具有统一管理、自动分配主设备号和轻量级开发三大优势,特别适用于小型设备驱动开发。文章详细阐述了开发流程:包括引入头文件、定义设备结构体和文件操作函数、注册设备等关键步骤,并通过计数器设备实例进行说明。最后总结了杂项设备驱动的应用场景及开发注意事项,强调其在简化开发、提高效率方面的重要价值。这种驱动方式为快速实现小型设备功能提供了有效解决方案。

highersister的博客 962

深入探索 Linux 杂项设备驱动:从理论到实践

杂项设备驱动是 Linux 内核提供的一种驱动框架,用于管理一些不属于其他标准字符设备、块设备等类型的设备。它的主要特点是简单易用,适合一些功能相对简单、不适合单独划分为一种特定设备类型的设备。在 Linux 内核中,杂项设备驱动的注册和管理通过miscdevice结构体来实现。这个结构体包含了设备的主设备号、次设备号、设备名称以及设备操作函数等重要信息。// 定义杂项设备的操作函数// 实际读取操作代码,这里简单返回一个固定字符串// 定义杂项设备结构体。

m0_57836225的博客 932

Linux——驱动——杂项设备

misc的结构体。

m0_71703182的博客 1347

深入探究 Linux 杂项设备驱动开发:从理论到实践

杂项设备(Miscellaneous Device)在 Linux 内核中是一种特殊的设备类型。它被设计用来处理那些不属于字符设备、块设备或网络设备等标准类型的设备。这些设备通常功能相对简单,但却有着独特的用途。例如,一些系统级的辅助设备、自定义的小型硬件模块等都可以通过杂项设备驱动来管理。杂项设备驱动的优势在于其简洁性和通用性。它基于 Linux 内核提供的miscdevice结构体进行实现,开发者只需填充相应的字段,就能够快速地将设备注册到内核中,并实现基本的设备操作功能,如打开、关闭、读写等。

m0_57836225的博客 563

Linux MISC杂项设备驱动

misc的意思是混合的杂项的,所以misc设备驱动也叫做杂项设备驱动,当开发板上某个设备没有办法分类的时候,就可以使用misc设备驱动。他的注册和使用比较简单,所以比较适用于功能简单的设备。所以它通常嵌套在 platform总线驱动中,配合总线驱动达 到更复杂,多功能的效果。杂项设备是字符设备的一种,杂项设备可以自动生成设备节点。回顾几个概念:1、设备结点:进入内核的dev目录下,如图所示:系统里也有很多杂项设备:cat /proc/misc。

ttdffmm的博客 849

Linux杂项设备驱动

一、概念 杂项设备是一种特殊的字符设备,在linux2.6之后出现,与platform虚拟总线相关。通常嵌套在 platform 总线驱动中,实现复杂的驱动。其主设备号固定为10,设备注册是用主设备号10来调用register_chrdev()来实现。调用class_create()和device_create()为每个杂项设备创建设备类和设备节点。杂项设备是对字符设备驱动的再次封装,降低了字符设备驱动的难度,同时节约了主设备号资源。 二、字符设备与杂项设备实现对比 1、字符设备驱动开发...

the_wan的博客 1739
上一篇: 内核配置和文件系统制作
下一篇: 通信协议_
keepAlive_
博客等级 码龄3年 63粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值