Linux驱动

字符设备驱动模型

在这里插入图片描述
在字符设备中使用struct cdev这种结构来描述设备。
在这里插入图片描述
应用程序:读写文件,点灯;获取按键。用一些接口调用驱动程序去实现一些引用。

open这些函数,是C库实现的。从而进入内核,C库怎么进入内核?本质上,这些函数对应的汇编指令会引发一个异常,类似于中断一样,发生了就会进入相应的异常处理函数(进入到了内核空间)。根据发生异常的原因,调用不同的处理函数,比如sys_open,sys_read函数等 (内核的接口处就是系统调用的接口)。

最简单的莫过于led:
在这里插入图片描述
中间就依赖于驱动程序框架。

过程:

  1. 应用程序是有设备号的。应用程序会经过C库进入内核,内核最后会去调用驱动。
  2. 具体怎么通过内核找到驱动中的具体实现,就是框架中实现的。
  3. 在chrdev这个数组中找到file_operation这个 结构。这个结构是从驱动程序实现的。(驱动程序中就实现了这些led_open ,led_read ,led_write函数,以及file_operation结构体,这个结构体就有.open,指向我们写的led_open。)
  4. 然后入口函数这边,用register_chrdev函数,将结构体放到主设备号中。
    在这里插入图片描述
    file_operations 的结构体,此结构体就是 Linux 内核驱动操作函数集合。

驱动运行的方式有两种,其中有一种就是将驱动编译为模块,启动内核的时候,就使用命令加载驱动模块。这里就涉及到两个函数:

module_init(xxx_init); //注册模块加载函数  入口函数
module_exit(xxx_exit); //注册模块卸载函数 出口函数

字符设备注册和注销:

static inline int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)
static inline void unregister_chrdev(unsigned int major, const char *name)

一般字符设备的注册在入口函数中进行,字符设备的注销在出口函数中进行。

现在,我们可以看到已经定义了file_operations结构体,这个结构体就是设备的具体操作函数。现在就需要对用到的函数尽心初始化。比如open /realease/read/write。

附上面试题:

  1. TCP和UDP的区别?
  2. I2C驱动的框架
  3. 双链表怎么删除节点
  4. 编译的条件
  5. makefile的作用?gcc的作用?
  6. 代码生成可执行程序的过程?
  7. 中断切换的过程?
  8. 中断前的进程上下文保存在栈里,保存在哪个栈?
  9. 为什么有MMU,MMU有什么作用?
  10. 用过哪些系统调用,切换到内核态的接口API?
  11. 编译过程
  12. 链接分为哪些种类(动,静,装载时链接)
  13. 栈的大小由什么决定
  14. 栈的增长方式socket三种类型
  15. 内核中如何查找优先级
  16. MMU的简单介绍,具体实现
  17. new和malloc的区别
  18. 内核分配内存的方法
  19. 智能指针的底层实现
  20. 如何避免内存泄漏
  21. I2C和SPI 的区别
  22. 线程池和进程池的区别
  23. 同步与竞争
  24. 自旋锁和互旋锁的区别
  25. 数据结构中队列和栈的区别
  26. SD与EMMC。(汇川)
  27. PWM设置的流程
  28. SPI是全双吗?怎么判断
  29. CPU主频是多少
  30. 面向对象和面向过程的区别
  31. RTOS的实时性是如何保的
  32. CAN通信了解吗
  33. 内核管理硬件的方式
  34. 对缓存的理解
  35. SPI通信过程
  36. 对中断的理解。优先级反转用抢占不会乱掉吗
  37. ARM有多少个寄存器
  38. 字符设备有哪些?和块设备的区别

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

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

相关文章

【开源】基于JAVA语言的企业项目合同信息系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…

【大厂面试】之 美团(一面经含答案)

美团 一面 tcp三次握手,四次挥手。time-wait、close-wait状态。MSL代表什么?为什么time-wait是2MSL,可不可以更长?如果不设置time-wait有什么影响 time-wait是主动关闭方的一个状态;close-wait是被动关闭方的一个状态…

微擎模块 出现Error: template source ‘common/message’ is not exist!解决方法

今天有会员反馈微课堂分销中心打不开,错误提示模板找不到:Error: template source ‘common/message’ is not exist!,看了下这模板应该微擎框架通用的,进公众号会员管理-会员中心网址居然也打不开,提示一样的错误&…

多播ip地址配置和通信理解

经常有朋友问,为什么相同局域网的ip需要相同网段,为什么组播的网段可以不同? 比如: 在您的局域网(192.168.1.0/24 网段)中设置多播组时,您可以选择一个在本地网络范围内尚未使用的多播组地址。…

绿色装配式建筑——气膜建筑

伴随新时代的到来和发展理念的深入实施,装配式绿色建筑已经成为建筑业发展的主流趋势。本文将深入分析气膜建筑,采用绿色建筑技术和装配式的建筑模式,形成了一套完善的建筑体系。 气膜建筑以气膜结构为主体,采用新型高强度柔性薄膜…

批量归一化

目录 一、BN层介绍 1、深层神经网络存在的问题 2、批量归一化的解决方案 3、BN层作用位置 4、BN层在做什么 5、总结 二、批量归一化从零实现 1、实现批量归一化操作 2、创建BN层 3、对LeNet加入批量归一化 4、开始训练 三、简明实现 1、对LeNet加入批量归一化 2…

【Spring实战】02 配置多数据源

文章目录 1. 配置数据源信息2. 创建第一个数据源3. 创建第二个数据源4. 创建启动类及查询方法5. 启动服务6. 创建表及做数据7. 查询验证8. 详细代码总结 通过上一节的介绍,我们已经知道了如何使用 Spring 进行数据源的配置以及应用。在一些复杂的应用中,…

mybatis的二级缓存使用以及禁用

目录 mybatis 二级缓存配置有两处 全局设置 mapper 设置 测试代码 执行结果 源码执行逻辑 创建 SqlSession 二级缓存配置是否添加 解析 cache 标签 XMLMapperBuilder MapperBuilderAssistant CacheBuilder PerpetualCache SerializedCache LoggingCache 将 cach…

电商数据分析-01-电商数据分析指标

电商数据指标 电商数据分析涉及多个指标,这些指标可以帮助企业了解其业务表现、用户行为和市场趋势。以下是一些常见的电商数据分析指标: 销售指标: 总销售额(GMV): 衡量特定时期内所有销售交易的总值。 平…

算法学习系列(十一):KMP算法

目录 引言一、算法概念二、题目描述三、思路讲解三、代码实现四、测试 引言 这个KMP算法就是怎么说呢,就是不管算法竞赛还是找工作笔试面试,都是非常爱问爱考的,其实也是因为这个算法比较难懂,其实就是很难,所以非常个…

【环境配置】虚拟环境配置

创建虚拟环境 conda create -n pytorch python3.9安装成功提示 激活虚拟环境 activate pytorch安装pytorch 查看 python 版本——python 退出 python——exit() 对照 python 与 pytorch 的对应关系 pytorch 地址: https://pytorch.org/get-started/previous-…

Python in Visual Studio Code 2023年12月发布

作者:Courtney Webster 排版:Alan Wang 我们很高兴地宣布 Visual Studio Code 的 Python 和 Jupyter 扩展将于 2023 年 12 月发布! 此版本包括以下公告: 可配置的调试选项已添加到“运行”按钮菜单可以使用 Pylance 显示类型层次…

JAVA JDK8时间类之Period、Duration、ChronoUnit的使用【详解】

JAVA JDK8时间类之Period、Duration、ChronoUnit的使用 1. Duration1.1 简介:用于时间间隔(秒、毫秒、纳秒等)1.2 案例 2. Period时间间隔(年、月、日)2.1 简介2.2 案例 3. ChronoUnit3.1 简介案例 4. 案例所有代码: 1. Duration 1.1 简介:用…

边缘计算AI智能盒子的视频源必须是固定点监控摄像头吗?

边缘计算AI盒子的视频输入源,要求是RTSP或者GB28181,可以是固定点监控摄像头(枪机、球机等),也可以是移动摄像头,例如执法记录仪、智能安全帽、布控球等,但由于RTSP输入要求摄像头有固定IP&…

中庸 原文与译文

《中庸》是中国古代论述人生修养境界的一部道德哲学专著,是儒家经典著作之一,原属《礼记》第三十一篇,相传为战国时期子思所作。 其内容肯定“中庸”是道德行为的最高标准,认为“至诚”则达到人生的最高境界,并提出“…

算法——哈希表

哈希表简介 **是什么:**存储数据的容器有什么用:快速查找某个元素,时间复杂度O(1),空间复杂度O(n)**什么时候使用哈希表:**频繁查找某一个数(这里不要忘了之前的二分,时间复杂度O(logN)&#x…

sqlilabs第三十二三十三关

Less-32(GET - Bypass custom filter adding slashes to dangerous chars) 手工注入 由 宽字符注入可知payload 成功触发报错 http://192.168.21.149/Less-32/ ?id1%df 要写字符串的话直接吧字符串变成ascii码 注意16进制的表示方式 自动注入 sqlmap -u http:…

三相电机转差率为负值的情形

1.电机开始发电的特征 注意,电机因为有输入频率对原始旋转磁场的影响,在正常工作时,应该处于稳态,因为旋转磁场决定了这个系统的运转方向和运转的大致频率区间。它会处于力矩平衡态。但是,如果,此时电机处…

智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.指数分布算法4.实验参数设定5.算法结果6.…

《Halcon 100项目-2》Halcon查找零件个数

Halcon查找零件个数 read_image (Image20231225201927, D:/image/bilibili/photo/屏幕截图 2023-12-25 201927.png) rgb1_to_gray (Image20231225201927, GrayImage)threshold (GrayImage, Region, 0, 128) draw_rectangle1 (200000, Row1, Column1, Row2, Column2) gen_recta…