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

Linux驱动面试题

1.导出符号表的原理?

image-20240321094442214

2.字符设备驱动的框架流程

image-20240325113102684

open  read  wirte  close  是系统调用(从用户空间进入内核空间的唯一的方法)会产生swi软中断《也会存在软中断号》(从User模式切换到SVC(管理模式)下因为在内核空间操作硬件SVC才有管理权限),在这个过程中他会去arch/arm/include/generated/calls-eabi.S文件中去找到对应的系统调用号,这是用户层和内核层的接口

通过sys_open找到对应的设备文件,然后通过文件找到inode号(文件系统识别文件的唯一编号)

(只要一个文件在文件系统上存在内核中,那么就有一个对应inode结构体与之对应)。

通过inode结构体中的dev_t和cdev就可确定唯一的cdev结构体(字符设备驱动)然后来操作下层的硬件。

3.linux内核中并发和竞态的解决方法?

当多个进程同时访问驱动的临界资源的时候竞态就会产生了。

image-20240325145754529

(1)中断屏蔽(了解)

中断屏蔽:中断屏蔽只对单核处理器有效,中断屏蔽就是将中断临时关闭掉。

中断屏蔽的临界区要尽可能的短,如果中断屏蔽的时间很长就可能会造成用户

数据的丢失或者内核的崩溃。(在中断屏蔽期间不需要有延时,耗时,甚至休眠的操作)。

(2)自旋锁(重点)

什么是自旋锁?

当一个进程获取到自旋锁之后,如果此时有另外一个进程也想获取这把锁,

此时后一个进程处于自旋状态(原地打转的状态)。自旋锁又叫做忙等锁。

自旋锁的特点

1.  自旋状态是需要消耗cpu资源的

2.  自旋锁保护的临界区要尽可能的短,只有这样它的效率才会高。

    在自旋锁保护的临界区中不能有延时,耗时,休眠的操作。

3.  在自旋锁保护的临界区内不能够调用copy\_to\_user/copy\_from\_user等函数

4.  自旋锁可能会导致死锁(在同一个进程内多次获取同一把未解锁的锁)

5.  自旋锁可以在中断上下文使用

6.  自旋锁在上锁前会关闭抢占

(3)信号量(重点)

什么是信号量?

当一个进程获取到信号量之后,如果此时有另外一个进程也想获取这个信号量,

此时后一个进程处于休眠状态。休眠状态是不需要消耗CPU资源。

信号量的特点

1.  信号量获取不到资源的时候不消耗CPU
2.  信号量保护的临界区可以很大,里面可以有延时,耗时,甚至休眠的操作
3.  信号量工作进程上下文
4.  信号量不会产生死锁现象
5.  信号量上上锁前也是不会关闭抢占的

(4)互斥体(会用)

什么是互斥锁?

当一个进程获取到互斥体之后,如果此时有另外一个进程也想获取这个互斥体,

此时后一个进程处于休眠状态。互斥体又叫做排它锁。

互斥体的特点

1.  互斥体获取不到资源的时候不消耗CPU
2.  互斥体保护的临界区可以很大,里面可以有延时,耗时,甚至休眠的操作
3.  互斥体工作进程上下文
4.  互斥体不会产生死锁现象
5.  互斥体上锁前也是不会关闭抢占的
6.  互斥体在获取不到资源的时候,会适当的等一会儿再决定是否进入休眠状态,如果 临界区比较大它会进入休眠状态,临界区比较小的时候在等待期间,获取资源就可以直接运行而不休眠了。

(5)原子操作(会用)

什么是原子操作?

原子操作名字就是根据它的特性得到的,在使用原子操作的时候如果执行了原子操作

中间的过程是不允许被打断的,认为原子是可以最小的不可被分割的整体。原子操作

并没有像自旋锁或者信号量那么多特性,它本身就是通过一个原子变量实现的。原子操作

的内部实现:1.保证只有一个核能操作这个变量,2在一个核上对变量的值的修改过程通

过内联汇编完成。

4.IO模型

IO模型的种类:非阻塞,阻塞,IO多路复用,异步通知(信号驱动IO)

5.select/poll/epoll的区别?

select:(位图(表))

1.  select监听的文件描述符是1024个
2.  select有清空表的过程,需要反复构造表,拷贝表,效率比较低
3.  select对应的进程从休眠态被唤醒之后,需要再次bianli文件描述符,效率比较低

poll:(链表)

1.  poll监听的文件描述符没有个数限制
2.  poll不会清空表,效率高于select
3.  poll对应的进程从休眠态被唤醒之后,需要再次遍历文件描述符,效率比较低

epoll:(红黑树+双链表)

1.  epoll监听的文件描述符没有个数限制
2.  epoll不会清空表,效率高于select
3.  epoll对应的进程从休眠态被唤醒之后,它能直接拿到就绪的文件描述符,不需要再次变量效率高

6.ARM工作模式及异常源

工作模式

1.  用户模式           User
2.  系统模式           Sys
3.  SVC模式           管理模式
4.  IRQ模式            普通中断模式
5.  FIQ模式             快速中断模式
6.  终止模式            ABT
7.  未定义模式         UND

异常模式及异常源

异常模式有5种:

1.  SVC异常模式
2.  IRQ异常模式
3.  FIQ异常模式
4.  终止异常模式
5.  未定义异常模式

异常源有7种:

1.  reset异常

2.  swi异常

3.  IRQ异常

4.  FIQ异常

5.  预取终止异常

6.  数据访问终止异常

7.  未定义异常

8.  **Reset异常**:当处理器接收到复位信号时触发的异常,它将处理器状态重置到某种初始状态。

9.  **SWI异常**:SWI(Software Interrupt)指令用于在程序中请求操作系统服务。当这个指令被执行时,处理器会触发SWI异常,然后将控制权转移到操作系统的相应服务例程。

10. **IRQ异常**:IRQ(Interrupt Request)异常是由外部设备发出的中断请求引起的异常。处理器响应这种异常来处理外部设备的事件。

11. **FIQ异常**:FIQ(Fast Interrupt Request)异常是一种高优先级的中断请求,通常用于处理时间敏感性较高的任务。

12. **预取终止异常**:这种异常发生在处理器试图执行指令预取时遇到问题时。可能是由于无效的指令地址或者存储器访问权限不足等原因引起的。

13. **数据访问终止异常**:当处理器试图访问无效的内存地址或者访问权限不足时触发的异常。

14. **未定义异常**:当处理器尝试执行未定义的指令或者遇到无法识别的操作码时触发的异常。

7.中断底半部机制

为什么需要中断底半部?

在中断顶半部中不能够做延时,耗时,或者休眠的操作,也就是说在中断顶半部

只能做紧急的,不耗时的任务。但是有的时候又希望在中断到来的时候做尽可能多

的操作,所以两者就产生了矛盾。linux内核为了解决这一矛盾专门设计了中断底半部

机制。也就是说在中断底半部中可以做不紧急的,耗时的的任务。中断底半部机制

分别是 软中断(个数限制32,留给内核使用),tasklet,工作队列。

例子:软中断

在网卡中断到了的时候需要从网络上接受数据,接收数据的过程就是耗时操作,

如果把它放在中断顶半部中是不可以的。所以linux内核开发者将接收网络数据的过程

放在了软中断这个底半部机制中完成。

(1)tasklet底半部机制

tasklet底半部机制的特点

tasklet是基于软中断实现的,tasklet没有个数限制,因为它是通过链表实现的。

tasklet工作在中断上下文,不能够脱离中断顶半部单独执行,tasklet底半部是在

中断顶半部执行即将结束的时候开启。tasklet底半部中可以做短延时或者耗时操作

但是不能够做长延时或者休眠操作。

(2)工作队列底半部机制

工作队列底半部机制特点

在linux内核启动的时候会创建一个events线程,这个线程默认处于休眠状态,在

这个线程中维护一个队列,如果需要让events线程执行你的任务,只需要向队列

中添加队列项,然后唤醒休眠的线程,工作队列底半部处理函数就会被调用执行。

工作队列工作在进程上下文,它可以脱离中断单独执行。它也是没有个数限制的。

在工作队列的底半部处理函数中可以做耗时,延时,甚至休眠的操作。

8.platform总线驱动

在Linux内核中所有总线驱动都遵从设备驱动的模型,总线驱动的模型如下图:

设备模型

内核在设计这些总线驱动模型的时候将一个驱动分为了三个

部分device、bus、driver。device是用来描述硬件设备的

bus是总线 **用来链接device和driver,**driver是用来描述驱动的

对象。在内核中所有的device放在内核的klist_devices的链表

中管理,而内核中所有的driver放在klist_driver中管理。内核中

的device和driver通过bus完成关联。当device和driver匹配成

功之后执行驱动的probe函数,在probe函数中就可以完成操

作硬件了。当卸载任何一方驱动的时候都会执行驱动中的

remove函数。

主要思想就是将设备信息和设备驱动进行分离

platform总线驱动遵从设备模型,platform是Linux内核抽象

出来的软件代码,并没有真实的总线协议与之对应。platform

总线驱动的思想就是要将设备信息和设备驱动进行分离。

platform_device和platform_driver通过总线匹配成功之后会执

行驱动中probe函数,在probe函数中驱动就能够拿到设备信息。

image-20220518102931467

它有三种匹配信息的方式(1)名字匹配   (2)idtable   (3)设备树匹配方式

相关文章:

Linux驱动面试题

1.导出符号表的原理? 2.字符设备驱动的框架流程 open read wirte close 是系统调用(从用户空间进入内核空间的唯一的方法)会产生swi软中断《也会存在软中断号》(从User模式切换到SVC(管理模式)下因为在…...

git 如何强制下拉某个分支

要强制下拉Git仓库中的某个分支&#xff0c;可以使用以下命令&#xff1a; 第一步&#xff1a; git reset --hard HEAD第二步 git pull origin <分支名> git reset --hard HEAD 是一个 Git 命令&#xff0c;它的作用是将当前分支的头部重置为当前提交&#xff08;HEAD…...

linux-touch指令

目录 语法 选项 示例 touch 是一个在 Linux 系统中常用的命令&#xff0c;它用于创建空文件&#xff0c;或者如果文件已经存在&#xff0c;则更新文件的访问和修改时间戳。下面是 touch 命令的完整使用说明&#xff1a; 语法 touch [选项]... 文件... 选项 -a 或 --time…...

海外仓系统有哪些?主流海外仓系统类型、优缺点,不同海外仓如何选择

作为海外仓的经营者&#xff0c;不管海外仓大小&#xff0c;你都应该知道海外仓系统对提升仓库管理效率有多重要。 不过现在市场上的海外仓系统确实种类太多了&#xff0c;想选到一个适合自己海外仓&#xff0c;性价比又比较高的wms海外仓系统也不是一件容易的事情。 本文会详…...

05-5.4.1 树的存储结构

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…...

Spring事务管理与Spring AOP详解

Spring事务管理与Spring AOP详解 一、引言 在企业级应用开发中&#xff0c;事务管理和面向切面编程&#xff08;AOP&#xff09;是两个至关重要的概念。Spring框架作为Java企业级应用的首选框架之一&#xff0c;为事务管理和AOP提供了强大的支持。本文将详细解析Spring的事务…...

LaTeX 的使用

文章目录 TeX 编辑器文档类型中文编译文档结构preamble 导言区&#xff08;不能放正文内容&#xff09;document body 正文区 正文内容目录段落列表无序列表有序列表 图片表格交叉引用段落图片表格 转义符 数学公式数学符号行内公式行间公式有公式计数器无公式计数器 公式包含文…...

Text2SQL之Vanna优化

文章目录 前言一、优化方向二、干就完了一次性生成多个Question-SQL对先生成一个问题,再根据DDL和业务数据生成SQL总结前言 前阵子写了篇Text2SQL的简单介绍,发现其也是RAG只会,写下了Text2SQL之不装了,我也是RAG 最近也一直在做Text2SQL的优化,于是把自己的一些心得,总…...

船舶行业信息安全解决方案介绍

船舶行业信息安全背景&#xff1a; 近年来随着经济复苏、疫情与国际形势影响国内外船舶海运业务蓬勃发展&#xff0c;在业务量激增的背景下出现多类信息安全事件。其中2017年&#xff0c;马士基集团遭到勒索软件攻击&#xff0c;内部业务系统和码头操作系统均受到严重影响&…...

Typora—适用于 Mac 和 Win 系统的优秀 Markdown 文本编辑器

Typora 是一款适用于 Mac 和 Win 系统的优秀 Markdown 文本编辑器&#xff0c;它以其简洁易用的界面和强大的功能受到了众多用户的喜爱。 首先&#xff0c;Typora 的界面设计非常简洁直观&#xff0c;没有过多繁杂的菜单和按钮&#xff0c;让用户能够专注于写作本身。它采用实时…...

产品经理的未来在哪里?

【同学聚会】 医生说&#xff1a;你生病的话可以找我。 老师说&#xff1a;你孩子成绩不好时找你辅导。 律师说&#xff1a;你遇上官司时我帮你。 程序员说&#xff1a;你电脑坏了时我帮你修理。 产品经理说&#xff1a;我……好像无一技之长。&#xff08;瞬间开始怀疑人…...

火车头采集怎么使用GPT等AI原创文章

火车头采集官方并没有GPT、百度文心一言AI、阿里通义千问AI、Kimi大模型等AI功能&#xff0c;但支持接入插件&#xff0c;可以编写相应人工智能AI原创文章插件&#xff08;火车头采集支持PHP和c#这2种语言的插件编写&#xff09;&#xff0c;或者导入第三方封装好的GPT等AI原创…...

多元多项式的特征列与零点的关系定理

下面这个定理来自《计算机代数》6.1三角列与特征列&#xff08;王东明、夏壁灿著&#xff09; 【定理】 设 C [ C 1 , … , C r ] \mathbb{C }\left\lbrack C_{1},\ldots,C_{r} \right\rbrack C[C1​,…,Cr​]为多项式组 P ⊂ K [ x ] \mathbb{P \subset}\mathcal{K\lbrack}\…...

git - LFS 使用方法

安装Git LFS 访问 Git LFS官网 下载适用于您操作系统的版本。 Linux用户&#xff0c;解压缩下载的.tar.gz文件&#xff0c;并通过终端运行安装脚本。 tar -xvf git-lfs-linux-amd64-vX.Y.Z.tar.gz cd git-lfs-X.Y.Z sudo ./install.sh 初始化Git LFS # 全局启用 git lfs i…...

提高磁盘可靠性的技术:保障数据安全的四大方法

目录 1. 第一级容错技术 磁盘镜像&#xff08;Mirroring&#xff09; 工作原理 RAID 1 工作原理 优点 缺点 适用场景 示例 2. 第二级容错技术 概述 RAID 5 RAID 6 优点 缺点 适用场景 3. 基于集群系统的容错技术 概述 Hadoop HDFS Ceph 优点 缺点 适用场…...

CesiumJS【Basic】- #006 浏览器控制台查看位置角度

文章目录 浏览器控制台查看位置角度1 目标 浏览器控制台查看位置角度 1 目标 浏览器控制台查看位置角度...

Mac 终端报错 zsh: command not found: brew 解决方案

Homebrew安装 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装成功后&#xff0c;在终端输入下面命令 brew -v如果成功输出brew版本&#xff0c;则安装成功 关闭终端重新打开终端&#xff0c;报错zsh: comm…...

详解 HBase 的常用 API

一、环境准备 创建一个 Maven 工程并引入依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>1.3.1</version> </dependency> <dependency><groupId>org.apach…...

JSR303校验

校验的需求 前端请求后端接口传输参数&#xff0c;需要校验参数。 在controller中需要校验参数的合法性&#xff0c;包括&#xff1a;必填项校验、数据格式校验等在service中需要校验业务规则&#xff0c;比如&#xff1a;课程已经审核过了&#xff0c;所以提交失败。 servi…...

04 远程访问及控制

1、SSH远程管理 SSH是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。 SSH协议对通信双方的数据传输进行了加密处理&#xff08;包括用户登陆时输入得用户口令&#xff09;。 终端&#xff1a;接收用户的指令 TTY终端不能远程&#xff0c;它…...

[晕事]今天做了件晕事38 shell里的source 点号

今天碰到一个问题脚本里使用点号引入某个文件形式如下&#xff1a; . /tmp/abc但是脚本运行出现错误&#xff0c;一开始还以为是/tmp没有可执行权限&#xff08;https://mzhan017.blog.csdn.net/article/details/112178736#t16&#xff09;&#xff0c;导致abc运行不了。 后来…...

java如何分割字符串

java要实现对字符串的分割&#xff0c;需要用到split语句 语法格式是 str.split(分隔符) 其中 str是字符串 示例代码如下 public class Stringsplit {public static void main(String[] args) {String a"蒸羊羔&#xff0c;蒸熊掌&#xff0c;蒸鹿尾&#xff0c;烧花…...

胡说八道(24.6.12)——数字电子技术以及Modelsim

上回书说到数电中的最常用的表达式——逻辑表达式(由布尔代数组成)以及常用的两种图表——真值表(真值表表示的是所有的输入可能的线性组合以及输出)和卡诺图(卡诺图则是一种化简工具&#xff0c;排除冗余项&#xff0c;合并可合并项)。 今天&#xff0c;先来看看昨天说的基本逻…...

【Android面试八股文】AsyncTask中的任务是串行的还是并行的

文章目录 串行执行并行执行示例代码串行执行(默认)并行执行总结AsyncTask 的任务执行方式可以是串行的,也可以是并行的,这取决于使用的执行器 ( Executor)。 串行执行 默认情况下,AsyncTask 使用的是 SERIAL_EXECUTOR,即任务按顺序一个接一个地执行。这意味着下一个任务…...

无人机RTMP推流EasyDSS直播平台推流成功,不显示直播按钮是什么原因?

互联网视频云平台/视频点播直播/视频推拉流EasyDSS支持HTTP、HLS、RTMP等播出协议&#xff0c;并且兼容多终端&#xff0c;如Windows、Android、iOS、Mac等。为了便于用户集成与二次开发&#xff0c;我们也提供了API接口供用户调用和集成。在无人机场景上&#xff0c;可以通过E…...

经验分享,xps格式转成pdf格式

XPS 是一种电子文档格式、后台打印文件格式和页面描述语言。有时候微软默认打印机保存的是xps格式&#xff0c;我们如何转换为pdf格式呢&#xff0c;这里分享一个免费好用的网站&#xff0c;可以实现。 网站&#xff1a;https://xpstopdf.com/zh/ 截图&#xff1a;...

基于51单片机的音乐彩灯设计

基于51单片机的音乐彩灯设计 &#xff08;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 由STC单片机ADC0809模块LM386功放模块喇叭音频接口发光二极管电源构成 1.通过音频线输入可以播放电脑、手机、MP3里面的音乐。 2.AD对音频…...

API接口设计的艺术:如何提升用户体验和系统性能

在数字时代&#xff0c;API接口的设计对于用户体验和系统性能有着至关重要的影响。良好的设计可以显著提升应用程序的响应速度、可靠性和易用性。以下是几个关键点&#xff0c;帮助改善API接口的设计&#xff1a; 1. 理解并定义清晰的要求 用户研究&#xff1a;与最终用户进行…...

韩兴国/姜勇团队在《Trends in Plant Science》发表植物根系氮素再分配的观点文章!

氮素是陆地生态系统中的关键限制性营养元素&#xff0c;通过生物固氮和土壤氮供应通常远低高等植物的氮需求。当土壤氮素供应无法充分满足植物茎叶生长需求时&#xff0c;植物会通过自身营养器官&#xff08;如根或根茎&#xff09;再分配来实现氮的内部循环和再利用。尽管植物…...

52.Python-web框架-Django - 多语言编译-fuzzy错误

目录 1.起因 2.原因 3.解决方法 3.1手动移除fuzzy标记 3.2重新生成po文件&#xff0c;并检查是否还存在fuzzy标记 3.3重新编译生成mo文件 1.起因 在Django的国际化和本地化过程中&#xff0c;当你发现某些字段仅显示msgid&#xff0c;而不显示msgstr时&#xff0c;可能是…...

毕业设计资料网站有哪些/淘宝产品关键词排名查询

作者 | 李林锋 编辑 | 小智 《Netty 进阶之路》、《分布式服务框架原理与实践》作者李林锋深入剖析通信层和 RPC 调用的异步化。李林锋在 InfoQ 上开设了 Netty 专题持续出稿&#xff0c;感兴趣的同学可以持续关注。后台回复关键词&#xff1a;Netty&#xff0c;可以获取专栏链…...

网站建设销售怎么样/淘宝推广费用一般多少

作为一个程序员来说&#xff0c;简历可谓是面试的时候一个加分砝码&#xff0c;往往有的面试者只在意自己的技术&#xff0c;其实这是非常不对的。简历对于一个面试者来说非常重要&#xff0c;他是第一个入口&#xff0c;也是面试官认识你的第一个途径。不管是对于刚毕业或者即…...

优化网站打开速度/品牌战略

LoadRunner中的web_get_in_property函数可用于返回上一个HTTP请求的相关信息&#xff0c;包括HTTP请求返回码、下载大小、下载时间等&#xff1a; The web_get_int_property function returns specific information about the previous HTTP request. The meaning of the re…...

摄像机怎么在自己家网站做直播/公司做网络推广怎么做

只需要在工程上右键&#xff0c;”Add Frameworks support...“&#xff0c;然后选择Maven即可转载于:https://www.cnblogs.com/qiang-cnblog/p/9802483.html...

百度上海分公司/青岛建站seo公司

C语言学习笔记1)VC6.0学习笔记进入方法&#xff1a;1、建立一个工程文件——新建——(选择)工程——(选择)Win32 Console Application——位置(选择存贮的位置)——工程名称(要用字母、英文、或拼音都可以)——一路确定到完成2、建立一个文件文件——新建——(选择)文件——(选…...

网站管理建设落实报告/社群营销方案

初次阅读《平凡的世界》实在中考完的那个暑假&#xff0c;高中推荐我们阅读这本书。记得刚刚拿到这本书时&#xff0c;就被它的大块头吓到了&#xff0c;只是觉得太厚了&#xff0c;从来没有阅读过这么厚的书。书一开篇便是描述孙少平打饭的情景&#xff0c;描写了天气的恶劣以…...