00_linux_最简单构建字符设备 2.4版本之前使用

news/2024/5/2 11:16:13/文章来源:https://blog.csdn.net/weixin_43898067/article/details/128067932

背景:怎么构建一个最简单的字符设备驱动并且可以使用app进行操作

名称大致意思
设备proc/devices/设备名称 简单来说 insmode出来的
设备节点/dev/xxx 对这个设备进行操作的文件 mknode使用主次设备号对设备关联

大致方法
1.写驱动文件(file_operation),构造对应的read write 函数
2.分配设备名称(/proc/devices/设备名称)
3.注册进内核 使用主次设备号,设备名称 ,insmode 注册后 在/proc/devices/设备名称 就能找到对应设备
4.对这个设备进行设备文件注册,mknode 命令,生成 /dev/设备文件名称
5.应用程序打开 设备文件 获得设备的 file_operation 结构体 对设备进行操作

1实现底层驱动程序

linux中万物皆为文件
图中的一个设备会有各种调用参数 open read write 来组成这个设备的 file_operation结构体
内核层中 在驱动程序里面 各种调用参数来对底层的硬件进行操作 作为驱动程序注册进内核变成一个设备 也会有 open read write等操作接口

2 注册这个驱动程序到内核变成一个设备

开始有了驱动程序的 file_operation结构体
主次设备号 和 file_operation 结构体进行内核中的注册
注册到内核中 变成一个设备驱动程序

major = register_chrdev(DEV_MAJOR, DEV_NAME, &led_fops); //注册到内核

注册到内核后 有了 proc/devices/DEV_NAME

mknod [选项]… 名称 类型 [主设备号 次设备号]

2.1 驱动层注册详细描述

其实在驱动层中是构造了一个char_device_struct 结构体,char_device_struct 结构体继承了驱动结构体
char_device_struct 是驱动的基本对象, 把这个对象保存在内核中

static struct char_device_struct {//指向下一个链表节点struct char_device_struct *next;//主设备号unsigned int major;//次设备号unsigned int baseminor;//次设备号的数量int minorct;//设备的名称char name[64];//内核字符对象(已废弃)struct cdev *cdev;      /* will die */} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];

3 对设备构建设备文件

上一步已经有proc/devices/DEV_NAME
对这个DEV_NAME设备构建出对应的设备文件进行操作
使用mkmod /dev/test c 2 0 命令 构建对应设备的设备文件,通过查找内核设备所有的主次设备号挑选出对应的 设备
/dev/test 设备文件的文件名
c 文件为字符设备文件
2 主设备号
0 次设备号

4 应用程序使用设备文件进行操作

应用程序是一个进程
进程有自己的结构体 task_srtuct
在这里插入图片描述

task_srtuct->files_struct->fd_array[]->file_operations
//里面保存了打开的文件 inode 节点  对这个节点 进行 write read 操作

使用 open(/dev/xxx) 打开这个文件 把这个文件的file_operation 保存在 inode 数组里面
后续使用 read write 调用 inode节点的各种操作函数 对文件 /dev/xxx 这个设备文件进行操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_37942.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

叠氮荧光染料:Azide-FL-BDP|1379771-95-5|BDP FL N3叠氮

BDP FL叠氮化物是一种类似于BODIPY FL叠氮化物的荧光染料,是一种具有点击化学性质的荧光染料。该荧光团是硼二吡咯甲基类荧光染料的代表,在水环境中具有较高的量子产率。azide系列产品包括可用于进一步连接的azide-acid;azide-amine&#xff…

Faster R-CNN详解

Faster R-CNN Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。使用VGG16作为网络的backbone,推理速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。 Faster R-CNN算…

使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

【电源专题】案例:不导这颗MOS管的原因是在电路上不通用?

本案例发生在MOS管替代料导入时。正常情况下在替代料导入、部品导入的时候,我们需要查看规格书。怎么查找规格书可以看文章【电子通识】芯片资料查询方法 对于一些关键的信息我们要做对比,一般来说要通过列表进行对比。但因为不同的供应商的测试标准不同,有很多是很难对比的…

浅析数据仓库和建模理论

第一章 认识数据仓库 1.1 数据仓库概念 数据仓库,英文名称为 Data Warehouse,可简写为 DW 或 DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决…

第41讲:MySQL内置的QL性能分析工具

文章目录1.SQL性能分析的概念2.分析数据库中SQL的执行频率3.数据库中的慢查询日志3.1.开启慢查询日志功能3.2.模拟慢SQL查询观察日志内容4.Profile查看SQL每个阶段的耗时4.1.开启Profile操作4.2.随便执行一些查询语句4.3.查询执行SQL的耗时4.4.查询某一条SQL每个阶段的耗时4.5.…

Java项目:jsp+servlet实现的新闻发布系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台; 前台主要功能为: 首页、娱乐新闻、经济新闻、文化新闻、小道新闻、用户评价等; 后台主要…

目标检测论文解读复现之二十:基于改进Yolov5的地铁隧道附属设施与衬砌表观病害检测方法

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

ipv6地址概述——配置ipv6

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…

TMS Echo数据复制的Delphi框架

TMS Echo数据复制的Delphi框架 TMS Echo是用于数据复制的Delphi框架。它是TMS Business产品阵容的一部分,它取决于TMS Aurelius的运营。 TMS Echo允许您至少拥有两个数据库并在它们之间同步信息。您对单个客户数据库所做的更改(插入、更新、删除)可能会传输到其他数…

jenkins关联github

将Jenkins和github关联起来,实现自动化集成 GitHub侧 1、生成secret.txt secret在github上被称为token 进去GitHub --> Settings --> Developer settings --> Personal access tokens -> Generate new token创建一个新的token,勾选两处标红的地方 点…

COLMAP生成MVSNet数据集

一. colmap2mvsnet.py COLMAP可以给图像数据集标定一套相机外参及视图选择。如果想用COLMAP导出的结果输入MVSNet测试,需要把数据集(图片、相机参数等)转化为MVSNet的输入格式。MVSNet的作者yaoyao在Github上提供了colmap2mvsnet.py代码&…

Jsoup爬虫入门实战

一、Jsoup介绍 jsoup 是一款基于 Java 的HTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用。 相关…

Nuxt 3.0.0正式发布,集成Element Plus、Ant Design Vue和Arco Design Vue脚手架

发布说明 Nuxt 是使用简便的 Web 框架,用于构建现代和高性能的 Web 应用,可以部署在任何运行 JavaScript 的平台上。 Nuxt 3.0 11天前正式发布了稳定版,3.0 基于 Vue 3,为 TypeScript 提供了 “一等公民” 支持,并进行…

汽车销量数据库(分车型、分品牌月度销量数据 2005-2021)

1、数据来源:汽车工业协会 2、时间跨度:2005年1月-2021年5月 3、区域范围:全国 4、指标说明: 该份数据包含全国各种汽车销量数十个相关指标! 该份数据包含如下指标: 轿车:一汽大众、上海大…

steam搬砖项目月入过万靠谱吗

大家好,我是阿阳 什么是国外steam游戏装备汇率差项目 一、项目介绍 其实,Steam就是一个美国的游戏平台,搬砖主要是搬的一款火遍全球的游戏CSGO的装备和饰品。CS听说过吧,这款游戏就是CS的一个系列。(通俗易懂的理解就…

2023年天津财经大学珠江学院专升本管理学原理专业考试大纲

天津财经大学珠江学院2023年高职升本科专业课考试《管理学原理》考试大纲一、本大纲系天津财经大学珠江学院2023年高职升本科《管理学原理》课程考试大纲。所列考试范围出自徐碧琳主编的教材《管理学原理(第二版)》,机械工业出版社&#xff0…

最全面的SpringMVC教程(二)——SpringMVC核心技术篇

前言 本文为 【SpringMVC教程】核心技术篇 相关详细介绍,具体将对视图和模型拆分,重定向与转发,RequestMapping与其衍生注解,URL 模式匹配,牛逼的传参,设定字符集,返回json数据(序列…

全球价值链GVC总出口分解(2011-2014年)

1、数据来源:ICIO数据库 2、时间跨度:2011-2014年 3、区域范围:世界 4、指标说明: 全球价值链分析(Global Value Chain analysis,简称GVC分析)为解决传统贸易统计中…

【Hack The Box】linux练习-- seal

HTB 学习笔记 【Hack The Box】linux练习-- seal 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月17日🌴 &#x1f36d…