linux驱动编程——标准、混杂、中断

news2024/12/28 6:05:32

一、优化——自动申请设备号、自动创建节点

设备号类型:①主设备号 ②子设备号       类型:unsigned int <==>dev_t

12  major

(主设备号)

             20     minor

             (子设备号)<区分相同驱动下的不同设备>

编写模块初始化设备流程:

(1)申请设备号的函数为:
int alloc_chrdev_region(dev_t *dev(设备号), unsigned baseminor(设备号起始地址), unsigned count(申请该设备个数), const char *name(设备名称));

(2)初始化cdev,将字符设备与驱动程序关联起来:

void cdev_init(struct cdev *cdev, const struct file_operations *fops);

(3)将注册好的设备添加到操作系统当中:

int cdev_add(struct cdev *p, dev_t dev, unsigned count(次设备号个数));

(4)归还设备号

void unregister_chrdev_region(dev_t from, unsigned count)

(5)创建设备节点(带参宏)

#define class_create(owner, name(设备类型 名字))

注:①owner指向模块的指针,这里只需传THIS_MODULE。

      ②该函数返回struct class *,用宏IS_ERR判断是否合法。

(6)添加节点

struct device *device_create(struct class *class, struct device *parent(设备的父设备指针,传NULL), dev_t devt, void *drvdata(驱动需要的额外参数,这里传NULL), const char *fmt(节点名字), ...);

(7)各销毁函数

void device_destroy(struct class *class, dev_t devt);

void cdev_del(struct cdev *p);

void class_destroy(struct class *cls)

①eg:led实现编写标准字符设备驱动程序。

以上我们编写的是标准字符设备驱动程序,linux内核api接口提供了一种混杂设备驱动程序框架,可以大幅度降低编写字符设备驱动程序复杂性。

其特点:是最简单的字符设备驱动。所有的misc 设备驱动主设备号都为10,不同的设备使用不同的从设备号。misc 设备会自动创建cdev,不需要手动创建。

(1)注册混杂设备:

int misc_register(struct miscdevice * misc);

注:struct miscdevice结构体中我们主要关注3个成员:
        1. minor:子设备号,由于主设备号都是10,子设备号必须指定而且不能冲突, linux/miscdevice.h中定义了几个子设备号,如果需要动态获取,就用MISC_DYNAMIC_MINOR;
        2. name:将来在/dev下的设备名;
        3. fops:指向文件操作结构体变量的指针。

(2)注销混杂设备:

misc_deregister(&led_misc_device);

(3)注册中断:

int request_irq(unsigned int irq(中断号), irq_handler_t handler(中断服务函数), unsigned long flags(中断处理方式),const char *name(中断名字), void *dev(中断服务函数传参,为设备地址));

        中断服务函数:irqreturn_t key_irq_handle(int irq, void *pData);

(4)禁止中断

void disable_irq(unsigned int irq);

(5)注销中断

void free_irq(unsigned int irq, void *dev_id);

②eg:key实现编写混杂设备驱动+linux内核中断

【应用层】

内核中断需要分类、筛选、调度,其响应速度相比与硬件中断大大降低。

命令:用于一次性将文件中的原字改为新字:0,$s/原/新/g

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【课程总结】day29:大模型之深入了解Retrievers解析器

前言 在上一章【课程总结】day28:大模型之深入探索RAG流程中,我们对RAG流程中 文档读取(LOAD) -> 文档切分(SPLIT) -> 向量化(EMBED) -> 存储(STORE) 进行了深入了解,本章将接着深入了解 解析(Retrieval) 的使用 解析器简介 简介:在 RAG(Retrieval-Augmented G…

墙绘产品交易平台:SpringBoot技术实现

4 系统设计 墙绘产品展示交易平台的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没…

矩阵奇异值

一、ATA 任给一个矩阵A&#xff0c;都有&#xff1a; ATA 为一个对称矩阵 例子&#xff1a;A为一个mn的矩阵&#xff0c;A的转置为一个nm的矩阵 对称矩阵的重要性质如下&#xff1a; ① 对称矩阵的特征值全为实数&#xff08;实数特征根&#xff09; ② 任意一个n阶对称矩阵…

思科dhcp的配置

以路由器为例 让pc3 自动获取ip地址并获取的网段为172.16.4.100-172.16.4.200 配置如下&#xff1a; R1(config)#interface GigabitEthernet0/2 R1(config)#ip address 172.16.4.254 255.255.255.0 R1(config)# no shutdown R1(config)#ip dhcp pool 4_pool //创建dhcp地址池…

实际有库存却提示可用量不足保存不了杂发单

财务要统计研发费用&#xff0c;成本的金额。研发人员没有足够的意识配合。开立请购单时兴之所致&#xff0c;任性自由。想弄一个项目号就弄一个。不开心就没有项目号啦。哪管他人死活。 U9的逻辑&#xff0c;请购单如果带入项目号&#xff08;客制化的功能&#xff09;&#x…

c语言200例 067

大家好&#xff0c;欢迎来到无限大的频道 今天给大家带来的是c语言200例 题目要求&#xff1a; 设计一个共用体类型&#xff0c;使其成员包含多种数据类型&#xff0c;根据不同的数据类型&#xff0c;输出不同的结果 要设计一个共用体&#xff08;union&#xff09;类型&…

如何判断主机字节序

测试代码: #include <stdio.h> void byteorder() {union{short value;char union_bytes[sizeof(short)];//union_bytes数组}test;test.value 0x0102;if((test.union_bytes[0] 1) && (test.union_bytes[1]2)){printf("big endian\n");}else if((test…

初识Java反序列化漏洞

目录 为什么需要序列化&#xff1f; 序列化与反序列化基础案例 Serializable 接口 序列化对象 反序列化对象 Java 反序列化漏洞 readObject() 序列化&#xff1a;将对象的状态信息转换为可以存储或传输的形式的过程&#xff0c;即将对象转换为字节序列。反序列化&#x…

如何突破科技服务领域的客户管理困境?

在知识产权与科技服务领域&#xff0c;企业面临着独特的客户管理需求和挑战&#xff0c;这些挑战不仅要求高度的专业性和精细化操作&#xff0c;还涉及复杂的法律流程、数据保密性以及不断变化的客户需求。传统的客户管理方式&#xff0c;如纸质档案、简单的电子表格或人工处理…

[教程]Crystal源码下载及编译

描述&#xff1a; 随着 Crystal Source 代码的更新&#xff0c;用于构建源代码和编译它们的指南已经过时&#xff0c;这导致了很多混淆和寻求帮助。 本指南将是一个完整的分步指南&#xff0c;从下载 Visual Studio 到启动到您的服务器。 此外&#xff0c;请确保下载此存储库中…

如何使用 Python 读取数据量庞大的 excel 文件

使用 pandas.read_excel 读取大文件时&#xff0c;的确会遇到性能瓶颈&#xff0c;特别是对于10万行20列这种规模的 .xlsx 文件&#xff0c;常规的 pandas 方法可能会比较慢。 要提高读取速度&#xff0c;关键是找到更高效的方式处理 Excel 文件&#xff0c;特别是在 Python 的…

Docker版MKVtoolnix的安装及中文显示

本文是应网友 kkkhi 要求折腾的&#xff0c;只研究了 MKVtoolnix 的安装及中文显示&#xff0c;未涉及到软件的使用&#xff1b; 什么是 MKVtoolnix &#xff1f; MKVToolnix 是一款功能强大的多媒体处理工具&#xff0c;用于在 Linux、其他 Unix 系统和 Windows 上创建、修改和…

uniapp/vue项目 import 导入文件时提示Module is not installed,‘@/views/xxx‘路径无法追踪

文章目录 背景解决方案1.IDE配置2.alias&#xff08;别名&#xff09;配置webpackvue-clivite 3.检查 jsconfig.json 或 tsconfig.json 写在最后 前往闪闪の小窝以获得更好的阅读和评论体验 背景 Vue3在我自学Vue的时候看过一点&#xff0c;实操过一点&#xff0c;但是太久没用…

css 下拉框展示:当hover的时候展示下拉框 z-index的用法解释

代码如下&#xff1a; <template><div class"outer"><div class"left"></div><div class"aTest2"><div class"box">显示方框</div><div class"aTest3"></div></…

2024年度全球前2%顶尖科学家榜单发布!大陆10687人上榜,占比仅4.92%,附大陆Top 1000榜单!

9月16日&#xff0c;美国斯坦福大学的John Ioannidis教授团队新近在爱思唯尔(Elsevier)出版集团官网上发布了2024年全球各学科前2%科学家榜单(第七版)&#xff0c;通过统计每个科学家发表的论文数及其引用次数&#xff0c;采用6种指标建模进行综合评分(模型和指标附后)&#xf…

MIC麦克风工作原理:【图片+公式计算讲解】

Mic一个声电传换装置&#xff0c;广泛应用于电子产品中&#xff0c;最常见的就是手机。我们通常也叫它送话器&#xff0c;今天我们就来好好学习一下Mic的电路和它的工作原理。 1&#xff1a;电路结构图 1&#xff1a;C&#xff1a;Mic的核心部件&#xff0c;是一个可以膜片震动…

Linux之Docker虚拟化部署

上传docker安装包 解压安装包 将解压后的docker文件夹移动到/usr/local/文件夹下 docker 启动命令/usr/local/docker/dockerd 但是启动报错&#xff0c;意思是没有docker用户组 创建docker用户组&#xff0c;执行完会生成套接字文件 将套接字文件加入该用户组管理 第二个错误原…

【Lcode 随笔】C语言版看了不后悔系列持续更新中。。。

文章目录 题目一&#xff1a;最长回文子串题目描述&#xff1a;示例输入与输出&#xff1a;题目分析&#xff1a;解题思路&#xff1a;示例代码&#xff1a;深入剖析&#xff1a; 题目二&#xff1a;合并K个有序链表题目描述&#xff1a;示例输入与输出&#xff1a;题目分析&am…

k8s中,ingress的实现原理,及其架构。

图片来源&#xff1a;自己画的 图片来源&#xff1a;k8s官网 首先&#xff0c;什么是ingress? 是服务还是控制器&#xff1f; 都不精确 ingress是一个api资源 service和deployment也是api资源。 这几个相互协作&#xff0c;组建成一个对外提供服务的架构。 ingress提供的…

java学习-idea编辑器基础使用设置

首先打开电脑中的idea编辑器&#xff0c;点击头部&#xff1a;File按钮 → Settings… 打开设置界面&#xff1b; 设置idea的主题 设置idea代码注释的字体颜色 设置idea编辑器的字体和字体大小 设置idea通过提示回车自动导入包 设置idea输入忽略大小写进行提示