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

驱动开发 day3

总结:自动创建设备节点udev的流程

1.如何创建节点

        手动创建:mknod 地址 设备文件类型 主设备号 次设备号(0 - 255)

        自动创建:devfs (创建节点的逻辑在内核 ---> 2.4版本以前使用)

                          udev (创建节点的逻辑在应用层)

                          mdev (轻量级的udev)

2.udev的流程

       

        1> 硬件层接入,将硬件信息加载到内核层

        2> 内核层向应用层提交目录(创建设备类:struct class)

                                   和设备节点(创建设备对象:struct device)

        3>同时发起hotplug event,应用层hotplug进程收到event,通知udev进程

        4>udev进程创建/dev/设备文件,同时在/sys/class/下创建目录和文件(/sys/class/目录/文件)

3.相关API

        1> struct class *class_create(struct module *owner, const char *name)

                功能:向上提交目录,在内核创建一个struct class类型的空间并初始化

                参数: owner:模块指针,填写THIS_MODULE(宏定义,指向当前模块自身的一个指针)                             name:向上提交的目录名

                返回值:成功返回创建好的struct class类型的指针,失败返回错误码指针

        2> void class_destroy(struct class *cls)

                功能:销毁目录

                参数: cls:class_create函数创建的空间首地址

                返回值:无

        3> struct device *device_create(struct class *class, struct device *parent, dev_t devt, void                                                                 *drvdata, const char *fmt, ...)

                功能:向上提交设备节点信息,在内核生成一个struct device空间并赋值

                参数: class:class_create函数创建的空间首地址

                            parent:父节点地址,不知道填NULL

                            devt:设备号

                                        MKDEV(主设备号,次设备号):通过主设备号和次设备号得到设备号 

                                        MAJOR(dev):根据设备号得到主设备号 

                                        MINOR(dev):根据设备号得到次设备号

                            drvdata:传递到device回调函数中的参数,填写NULL即可

                            fmt:  向上提交的设备节点名 ...:可填可不填

                            返回值:成功返回创建成功的struct device空间指针,失败返回错误码指针

        4>void device_destroy(struct class *class, dev_t devt)

                功能:销毁设备节点信息

                参数: class:class_create函数创建的空间首地址

                            devt:向上提交设备信息时提交的设备号

       5> 错误码

                   

        在3-4G的内核区域,最顶层预留了4K的空间,class_create函数执行失败函数返回值对应的指针是指向这4K预留空间的。

        bool IS_ERR(const void *ptr) //(unsigned long)(void *)(x) >= (unsigned long)-MAX_ER

                功能:用于判断指针是不是指向内核顶层预留的4K空间

                返回值:如果指针指向4K预留空间,则返回真,否则返回假        

        long __must_check PTR_ERR(__force const void *ptr)

                功能:通过错误码指针得到一个错误码

相关文章:

驱动开发 day3

总结:自动创建设备节点udev的流程 1.如何创建节点 手动创建:mknod 地址 设备文件类型 主设备号 次设备号(0 - 255) 自动创建:devfs (创建节点的逻辑在内核 ---> 2.4版本以前使用) udev (创建节点的逻辑在应用层) mdev (轻量级的udev) 2.…...

许可license分析 第一章

许可分析是指对软件许可证进行详细的分析和评估,以了解组织内部对软件许可的需求和使用情况。通过许可分析,可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤: 收集许可证信息:首先&#xff0c…...

Goby 漏洞发布|管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞

漏洞名称:管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞 English Name: GJP SelectImage.aspx file upload vulnerability CVSS core: 9.8 影响资产数:2617 漏洞描述: 任我行率先针对中小企业推出了管家婆进销存、财务…...

Android屏幕录制

这里使用Java语言编写实现&#xff0c;完整代码如下&#xff1a; 文件 AndroidMainfest.xml 的主要配置 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"…...

实在智能牵手埃林哲,“TARS-RPA-Agent+云时通”双剑合璧共推企业数字化转型

近日&#xff0c;《数字中国建设整体布局规划》进一步明确了数字化发展的方向和节奏&#xff0c;对企业数字化建设提出了新要求。回看过去几十年&#xff0c;信息化建设如火如荼&#xff0c;各类IT系统如雨后春笋般涌现&#xff0c;系统的自动化操作及系统间数据交互共享等需求…...

拥有这个中文版CustomGPT,你也能定制自己的AI问答机器人

人工智能技术的快速发展为各行各业带来了前所未有的机会&#xff0c;其中之一就是定制化的问答机器人。这些机器人可以用于客户支持、知识管理、虚拟助手等多个领域&#xff0c;帮助企业提高效率&#xff0c;提供更好的用户体验。很多人可能都知道通过CustomGPT能够设计自己的人…...

fastadmin 基本使用配置

fastadmin 版本 1.3.5 thinkphp 版本 5.0.25 配置 cache 为 redis 保存 // ---------------------------------------------------------------------- // | 缓存设置 // ---------------------------------------------------------------------- cache …...

netty 线程组

我们的bossgroup和workgroup都是使用的NioEventLoopGroup。其内部有一个EventExecutor类型的数组用来存储所有的线程组。 NioEventLoopGroup {EventExecutor[] children; }NioEventLoopGroup继承自MultithreadEventExecutorGroup&#xff0c;构造函数不指定线程数默认会根据系…...

Reactor 第十二篇 WebFlux集成PostgreSQL

1 引言 在现代的应用开发中&#xff0c;数据库是存储和管理数据的关键组件。PostgreSQL 是一种强大的开源关系型数据库&#xff0c;而 WebFlux 是 Spring 框架提供的响应式编程模型。本文将介绍如何使用 Reactor 和 WebFlux 集成 PostgreSQL&#xff0c;实现响应式的数据库访问…...

红队打靶:Me and My Girlfriend打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透&#xff08;修改XFF代理&#xff09; 第三步&#xff1a;数据库手工枚举 第四步&#xff1a;sudo php提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行…...

Mysql高级——索引(2)

常见索引 索引分类 在MySQL数据库&#xff0c;将索引的具体类型主要分为以下几类&#xff1a;主键索引、唯一索引、常规索引、全文索引。 分类含义特点关键字主键索引针对于表中主键创建的索引默认自动创建, 只能有一个PRIMARY唯一索引避免同一个表中某数据列中的值重复可以…...

【史上最硬核分享】Docker+jenkinsPipeline 运行实现 python 自动化(超详细)

一、实现思路 在 Linux 服务器安装 docker创建 jenkins 容器jenkins 中创建 pipeline 项目根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境)运行新的 python 容器&#xff0c;执行 jenkins 从仓库中拉下来的自动化项目执行完成之后删除容器 二、环境准备 Linu…...

leetcode 3. 无重复字符的最长子串

2023.9.15 本题我用的暴力双层for循环 unordered_set 解决的&#xff0c;外循环控制字符起始位置&#xff0c;内循环将字符放入 unordered_set&#xff0c;并查找有无重复的元素。 用了一个全局变量记录最长字串的长度&#xff0c;局部变量count记录当前层循环的最长子串长度…...

doccano 文本标注工具使用

最近在做面向大模型的文本标注工作&#xff0c;涉及到多人协同的问题&#xff0c;因此用到了doccano工具。 这个工具可以使用docker进行安装&#xff0c;安装之后的启动也都比较简单。 关于基础使用&#xff08;例如管理员登录、新建任务、上传数据集等&#xff09;&#xff…...

快速排序算法的递归和非递归

基本思路 选择一个基准值&#xff0c;将数组划分三个区域&#xff0c;小于基准值的区域位于左侧&#xff0c;等于基准值的区域位于中间&#xff0c;大于基准值的区域位于右侧。将大于和小于区域继续进行分区&#xff0c;周而复始&#xff0c;不断进行分区和交换&#xff0c;直…...

Maven无法拉取SNAPSHOT依赖的解决办法

背景 自己所在的部门主要是为其他项目组提供基础组件&#xff0c;如果需要使用新特性&#xff0c;其他项目组还会经常引用SNAPSHOT版本的组件进行开发测试。平时自己做测试的时候&#xff0c;因为手里有源码&#xff0c;所以每次都是先执行 mvn install 在本地安装后&#xff…...

day16-面向对象综合练习(上)

1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面&#xff0c;写一个项目&#xff0c;知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello&#xff0c;各位同学大家好。今天&#xff0c;我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们…...

在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境

目录 在Windos 10专业版搭建Fyne&#xff08;Go 跨平台GUI&#xff09;开发环境一 Fyne 和 MSYS2简介1.1 Fyne1.2 MSYS2 二 安装 MSYS22.1 下载MSYS22.2 安装2.3 环境变量设置2.4 检测安装环境 三 参考文档 在Windos 10专业版搭建Fyne&#xff08;Go 跨平台GUI&#xff09;开发…...

漫谈:C、C++字符串的困局

由于历史的原因&#xff0c;C、C字符串是个很让程序员头疼的东西。 字符串被解读为字符数组&#xff0c;但是又不等价于字符数组&#xff0c;而是带有附加的结束符的字符数组。 结束符‘\0’也是一个字符&#xff0c;但是又不计算在字符串长度里面&#xff08;strlen&#xff0…...

基于python+selenium的自动批量添加

场景 点击添加”新增“按钮&#xff0c;弹出”新增对话框“&#xff0c;输入各种数据&#xff0c;然后点击”确定“按钮&#xff0c;如此循环。数量多&#xff0c;这样操作累人。 selenium Selenium 是一个用于自动化 Web 浏览器操作的库&#xff0c;可以实现模拟点击、输入…...

gdb监视

怀疑踩内存了&#xff0c;如何利用gdb监视一段内存的值 在实际情况中&#xff0c;如果怀疑一个进程中的变量被踩内存了&#xff0c;但是不知道什么时候会被踩&#xff0c;就可以用下面的方法进行debug。GDB&#xff08;GNU Debugger&#xff09;是一个功能强大的调试工具&…...

STM32基础知识点总结

一、基础知识点 1、课程体系介绍 单片机概述arm体系结构STM32开发环境搭建 STM32-GPIO编程-点亮世界的那盏灯 STM32-USART串口应用SPI液晶屏 STM32-中断系统 STM32-时钟系统 STM32-ADC DMA 温湿度传感器-DHT11 2.如何学习单片机课程 多听理论、多理解、有问题及时提问 自己多…...

Python vs C#:首先学习哪种编程语言最好?

进入编码可能很困难。 最艰难的部分? 决定先学什么语言。 当谈到 Python 与 C# 时,可能很难知道在您的决定中要考虑哪些因素。 我们为您提供了有关这些全明星编程语言的所有信息。 什么是 C#? 自 2000 年作为 Microsoft Visual Studio 的一部分开发 C# 以来,它一直是开发人…...

代理IP和Socks5代理:跨界电商与全球爬虫的关键技术

跨界电商在全球化市场中崭露头角&#xff0c;而代理IP和Socks5代理则成为实现全球市场洞察和数据采集的不可或缺的工具。本文将深入探讨这两种代理技术在跨界电商、爬虫技术和出海战略中的关键作用。 引言&#xff1a; 介绍跨界电商的崛起和全球市场的机遇与挑战。引出代理IP…...

CentOS 7 调优之周期性的访问中断

文章目录 背景问题描述原因分析解决方案相关版本 背景 操作系统版本&#xff1a;CentOS Linux release 7.6.1810 (Core) 操作系统镜像安装后&#xff0c;未进行任何调整。正常部署应用&#xff0c;应用在 CentOS 7.9 未出现过此类现象。 问题描述 问题描述&#xff1a;负载教…...

SpringBoot表现层数据一致性

1.定义Restful类 说明&#xff1a;使用Data注解是Lombok库提供的一个注解&#xff0c;用于自动生成类的getter、setter、equals、hashcode和toString方法。 package com.forever.controller.utils;import lombok.Data;Data public class Restful {private Boolean flag;//dat…...

vue路由-两个树形结构数据-递归处理方法

1.vue静态路由 const dynamicRoutes [{path: /,name: /,component: () > import(//layout/index.vue),redirect: /home,meta: {isKeepAlive: true,},children: [{path: /home,name: home,component: () > import(//views/home/index.vue),meta: {title: 首页,isLink: ,…...

JSP SSM 成果展示系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP SSM 冬奥建设成果展示系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的 源代码和数据库&#xff0c;系统主…...

脚本:python绘制七夕爱心

文章目录 效果脚本Reference 效果 脚本 import random from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH 640 # 画布的宽 CANVAS_HEIGHT 640 # 画布的高 CANVAS_CENTER_X CANVAS_WIDTH / 2 # 画布中心的X轴坐标 CANVAS_CENTER_Y CANVAS_HEIGHT /…...

L1 项目概述与Hadoop部署

1.技术栈&#xff1a;HadoopHiveSqoopFlumeAzkaban Flume采集Nginx web服务器上的日志&#xff0c;采集完成后存储到Hadoop的平台&#xff0c;最终存储到HDFS上&#xff0c;处理和分析采用Hive的方式&#xff0c;处理完之后利用Sqoop导出到Mysql中&#xff0c;最终利用一个Java…...

O2O网站开发工程师/天津谷歌优化

在使用Subversion时&#xff0c;认证文件AuthzSVNAccessFile能控制每一个目录的权限&#xff0c;但讲解的文档较少&#xff0c;中文文档更少。下面通过实例讲解使用方法。 环境Windows 2003 Server&#xff0c;局域网&#xff0c;域&#xff1a;domain.com.cn Apache 2.0.52…...

京东联盟新手没有网站怎么做推广/百度站内搜索

函数(下) 作用域(重点) 什么是作用域&#xff0c;就是一个变量可以生效的范围变量不是在所有地方都可以使用的&#xff0c;而这个变量的使用范围就是作用域 全局作用域 整个页面起作用&#xff0c;在 在全局作用域中有全局对象window&#xff0c;代表一个浏览器窗口&#xff0…...

佛山制作网站开发公司/怎么给公司做网站

第五章 引用类型 1、Object类型 2、Array类型 1&#xff09;数组的length属性是可读可写的&#xff0c;通过设置这个属性&#xff0c;可以从数组的末尾移除项或向数组中添加新项。 2&#xff09;检测数组&#xff1a;Array.isArray()方法&#xff0c;IE9、Firefox4、Safari5、O…...

好的地产设计网站/就业培训机构有哪些

我正在使用三个对象&#xff1a;StringBuilder,Integer和testobject – 它们被传递给一个方法来改变它的状态.正如所料,StringBuilder和testobject指向同一个对象,状态发生了变化,但它不适用于Integer对象.class testobject{int x 1;}public class test{public static void ma…...

中石化第四建设公司 网站/sem和seo哪个工作好

题目 题意&#xff1a;给出一个长度为n的数组&#xff0c;可一个数m&#xff0c;求该数组不能除以m的最大子数组的长度。 思路&#xff1a;对于两个数一个余m等于0&#xff0c;一个余m不等于0,两数相加&#xff0c;结果余m不等于0 可以通过记录下标&#xff0c;然后找到最大子…...

wordpress微信 群发/客源引流推广

1&#xff0c;在项目中我们常有这样的需求&#xff0c;就是在个人中心的时候&#xff0c;当用户登录后&#xff0c;要显示用户登陆后的头像&#xff0c;然后背景是用户头像的虚化 &#xff0c;接下来就来实现一下这个功能&#xff0c;先看一下效果 2&#xff0c;实现起来也挺简…...