linux驱动笔试题总结

2023-11-07

linux驱动笔试题总结

试题取之于网络,用之于民。最近在学习linux驱动,驱动开发在笔试的时候考的知识点是有规律可循的,并且这些面点也是平时驱动工作中的理论指导,深刻的理解这些面点还是很有必要的,所以在此总结记录,相信会用到的。
ps:以后面试驱动,谁在问我这些问题,我鄙视死他。权威答案整蒙b他。


1:linux中内核空间及用户空间的区别?用户空间与内核通信方式有哪些?

答:
-在32位架构cpu中,物理内存大小限制在4G。linux将4G内存分为两部分,0~1G为kernel使用,1~4G为用户使用;进程运行在kernel,就是运行在0-1G,进程运行在用户空间,就是运行在1-4G。
-用户空间和内核空间通信方式有那些?
1. 使用API:这是最常使用的一种方式了
A.get_user(x,ptr):在内核中被调用,获取用户空间指定地址的数值并保存到内核变量x中。
B.put_user(x,ptr):在内核中被调用,将内核空间的变量x的数值保存到到用户空间指定地址处。
C.Copy_from_user()/copy_to_user():主要应用于设备驱动读写函数中,通过系统调用触发。
2. 使用proc文件系统:和sysfs文件系统类似,也可以作为内核空间和用户空间交互的手段。
3. netlink
4. 使用mmap系统调用
5. 信号
内核空间和用户空间通信方式

2:linux中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化,高端内存概念?

 1. 用户虚拟地址
     这是在用户空间进程所能看到的常规地址。每个进程多有自己的虚拟地址,并且可以使用大于物理内存大小的空间。
 2. 物理地址
     该地址在处理器和系统内存之间使用,对应与真是物理地址。
 3. 总线地址
     没看懂,不说了。
 4. 内核逻辑地址
     内核逻辑地址组成了内核的常规地址空间。该地址映射了部分(或者全部)内存,并经常被视为物理地址。
     逻辑地址使用硬件内建的指针大小,因此在安装了大量内存的32位系统中,它无法寻址全部的物理内存。
     逻辑地址通常保存在unsigned long或者void *这样类型的变量中。kmalloc返回的内存就是内核逻辑地址。
     (上面这段话很重要,一定要理解,建议自己使用记号笔标红)
 5. 内核虚拟地址
     内核虚拟地址与物理地址的映射不必是一对一的,而这是虚拟地址的特点。

     所有逻辑地址都是内核虚拟地址,但是许多内核虚拟地址不是逻辑地址。vmalloc分配的内存就是一个虚拟地址。
     可以参考下面的地址:  

内存详解

内存结构图

总结:高端内存的作用就是用于建立临时地址映射,用于kernel申请user空间内存

3: linux中中断的实现机制,tasklet与workqueue的区别及底层实现区别?为什么要区分上半部和下半部?

答:
tasklet和workqueue区别?
tasklet运行于中断上下文,不允许阻塞 、休眠,而workqueue运行与进程上下文,可以休眠和阻塞。
为什么要区分上半部和下半部?
中断服务程序异步执行,可能会中断其他的重要代码,包括其他中断服务程序。因此,为了避免被中断的代码延迟太长的时间,中断服务程序需要尽快运行,而且执行的时间越短越好,所以中断程序只作必须的工作,其他工作推迟到以后处理。所以Linux把中断处理切为两个部分:上半部和下半部。上半部就是中断处理程序,它需要完成的工作越少越好,执行得越快越好,一旦接收到一个中断,它就立即开始执行。像对时间敏感、与硬件相关、要求保证不被其他中断打断的任务往往放在中断处理程序中执行;而剩下的与中断有相关性但是可以延后的任务,如对数据的操作处理,则推迟一点由下半部完成。下半部分延后执行且执行期间可以相应所有中断,这样可使系统处于中断屏蔽状态的时间尽可能的短,提高了系统的响应能力。实现了程序运行快同时完成的工作量多的目标。

4:linux中断的响应执行流程?中断的申请及何时执行(何时执行中断处理函数)?

中断的响应流程:cpu接受终端->保存中断上下文跳转到中断处理历程->执行中断上半部->执行中断下半部->恢复中断上下文。
中断的申请request_irq的正确位置:应该是在第一次打开 、硬件被告知终端之前。

5:linux中的同步机制?spinlock与信号量的区别?

linux中的同步机制:自旋锁/信号量/读取所/循环缓冲区
spinlock在得不到锁的时候,程序会循环访问锁,性能下降
信号量在得不到锁的时候会休眠,等到可以获得锁的时候,继续执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux驱动笔试题总结 的相关文章

  • printk函数的用法

    printk在内核源码中用来记录日志信息的函数 只能在内核源码范围内使用 用法和printf非常相似 printk函数主要做两件事情 第一件就是将信息记录到log中 而第二件事就是调用控制台驱动来将信息输出 1 日志级别 printk相比p
  • 一文讲透!Windows内核 & x86中断机制详解

    搞内核研究的经常对中断这个概念肯定不陌生 经常我们会接触很多与中断相关的术语 按照软件和硬件进行分类 硬件CPU相关 IRQ IDT cli sti 软件操作系统相关 APC DPC IRQL 一直以来对中断这一部分内容弄的一知半解 操作系
  • keil C51 常见错误和警告

    C51编译器识别错类型有三种 1 致命错误 伪指令控制行有错 访问不存在的原文件或头文件等 2 语法及语义错误 语法和语义错误都发生在原文件中 有这类错误时 给出 提示但不产生目标文件 错误超过一定数量才终止编译 3 警告 警告出现并不影响
  • 异步通知实验(信号)

    目录 异步通知 异步通知简介 驱动中的信号处理 应用程序对异步通知的处理 硬件原理图分析 实验程序编写 修改设备树文件 程序编写 编写测试APP 运行测试 编译驱动程序和测试APP 运行测试 在前面使用阻塞或者非阻塞的方式来读取驱动中按键值
  • 隔离式栅极驱动器输入级对电机驱动应用的影响

    介绍 在电机驱动应用中为功率级选择隔离式栅极驱动器时 您有多种选择 栅极驱动器可简单可复杂 具有集成米勒箝位 分离输出或绝缘栅双极晶体管 IGBT 发射极的欠压 UVLO 锁定参考等功能 输入级有两个选项 电压输入级或电流输入级 在本文中
  • [技术讨论]PT100采样电路设计

    本来不论PT100还是PT1000 他们的采样电路网上都很多 而且之前直接用的是现成的MAX31865方案 奈何领导说太贵 用集成运放搭吧 领导动动嘴 属下跑断腿 于是各方论坛 度娘 终于整了个有希望的方案 仅以此文记述这段硬件方案设计的经
  • sel4白皮书翻译

    首发地址 http trialley top pages 53ac44 CSDN地址 https blog csdn net lgfx21 article details 117606097 翻译与转发许可 作者 Gernot Heiser
  • late_initcall和module_init

    late initcall和module init 分类 linux驱动程序设计 2012 11 04 15 14 3680人阅读 评论 0 收藏 举报 所有的 init函数在区段 initcall init中还保存了一份函数指针 在初始化
  • platform 设备驱动实验

    目录 Linux 驱动的分离与分层 驱动的分隔与分离 驱动的分层 platform 平台驱动模型简介 platform 总线 platform 驱动 platform 设备 硬件原理图分析 试验程序编写 platform 设备与驱动程序编写
  • <Linux开发>驱动开发 -之-基于pinctrl/gpio子系统的LED驱动

    Linux开发 驱动开发 之 基于pinctrl gpio子系统的LED驱动 交叉编译环境搭建 Linux开发 linux开发工具 之 交叉编译环境搭建 uboot移植可参考以下 Linux开发 之 系统移植 uboot移植过程详细记录 第
  • 深入解决Linux内存管理之page fault处理

    说明 Kernel版本 4 14 ARM64处理器 Contex A53 双核 使用工具 Source Insight 3 5 Visio 1 概述 内核实现只是在进程的地址空间建立好了vma区域 并没有实际的虚拟地址到物理地址的映射操作
  • 嵌入式Linux构建yaffs根文件系统

    嵌入式Linux构建yaffs根文件系统 开发环境说明 ubuntu1404 i686 天嵌光盘里的交叉编译链 版本4 4 3 busybox 1 13 0 下载地址 https busybox net downloads 一 编译busy
  • USB之基础知识

    1 USB概述 USB Universal Serial Bus 通用串行总线 是一个外部总线标准 用于规范电脑与外部设备的连接和通讯 USB接口支持设备的即插即用和热插拔功能 USB接口有4个pin脚 分别为VCC GND Data Da
  • linux设备驱动makefile入门解析

    以下内容仅作参考 能力有限 如有错误还请纠正 对于一个普通的linux设备驱动模块 以下是一个经典的makefile代码 使用下面这个makefile可以 完成大部分驱动的编译 使用时只需要修改一下要编译生成的驱动名称即可 只需修改obj
  • 磁盘数据线接触不良的故障排查

    手头有个小型主机 运行centos 发现工作很不稳定 经常启动不起来 就算启动起来也会在几分钟内出现各种IO错误 可能出现以下几种报错 1 只读文件系统 Read only file system 尝试对磁盘写入的时候可能出现这个错误 2
  • Linux源码编译开启cgroup blk限制io性能

    编译选项 内核5 9 General Setup gt Control Group support gt io controller Enable the block layer gt Block layer bio throttling
  • Windows驱动开发(一)第一个驱动程序

    首先我们需要了解 在操作系统中 是分两种权限的 一种是内核态 我们也称为0环 一种是用户态 称之为3环 而在我们的电脑中 驱动程序是运行在内核态的 这意味着和操作系统内核是在同一权限的 而普通的应用程序的权限是最低的 高权限谁不想拥有呢 因
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 添加字库,显示文字

    之前已开箱拆解了开发板 需要看内部的请跳转到 SWM166 SPI Y1 28C1测评 开箱及拆解 https bbs 21ic com icview 3343100 1 1 html这次先把内部的图片更新几张看看 打开 红色圈圈内的一定都
  • [屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 有点惊艳的开箱

    耳闻华芯微特许久了 看到论坛得评测活动赶紧上了末班车 毕竟对有屏幕得板子也是很喜欢得 京东快递小哥客客气气 微笑着把快递给了我 好评 直接拆了包 在此之前没看过视频号 所以这个圆盘盘得模具还是有点惊喜的 正面照如下 开机有灯光秀 还有动画
  • [MM32硬件]搭建灵动微MM32G0001A6T的简易开发环境

    作为学习单片机的经典 自然是通过GPIO点亮LED 或者是响应按钮的外部中断例程 这我们看看SOP8封装的芯片MM32G0001A6T得引脚 除了VDD和GND固定外 我们可以使用PA14 PA1 PA13 PA15 PA2 PA3这六个G

随机推荐

  • Python出现Could not find a version that satisfies the requirement openpyxl (from versions: )

    一 环境使用python3 7时 用pip安装openpyxl出现如下错误 系统环境 windows10家庭版Python版本 python3 7 1IDE sublime text 3二 解决方案按照提示所示是其中一个原因是pip版本过低
  • GPU对应的cuda以及cuDNN驱动安装

    cudnn 临时个性化版本切换 https blog csdn net sslfk article details 123053540 1 查看自己的cuda 最高支持的版本 查看方法 sudo cat usr local cuda ver
  • Spring到底是一个什么东西呢?

    转自 Spring到底是一个什么东西呢 Spring 自面世以来 一直深受大家的喜爱 它延申出很多优秀的框架 如 Spring framework SpringMVC SpringBoot Spring Cloud Spring Data
  • 那些会阻碍程序员成长的细节[5]

    全文共 1304字 预计阅读时间 4分钟 断断续续的写成一个系列 也出乎我的意料 越展开内容越多 有点收不住 Let s 继续吧 进入主题 不依规范行事 这个很常见 嘴上一套 行动时另一套 也就是知行不一 实际是知易行难 不自我监督 不自我
  • (四)RTL级低功耗设计

    前面介绍了系统级的低功耗设计 换句话说就是在系统级降低功耗可以考虑的方面 系统级的低功耗设计 主要是由系统级设计 具有丰富经验的人员实现 虽然还轮不到我们设计 我们了解一下还是比较好的 我们前端设计人员的重点不在系统级设计上面 而是在RTL
  • webapi添加html页面,webApi添加视图出现/Index.cshtml”处的视图必须派生自 WebViewPage 或 WebViewPage。...

    是因为webApi Views文件夹下缺乏web config文件 从mvc项目相同目录拷贝一个web Config文件放入 删除多余的namespaces 即可 web config配置如下 Index period cshtml 处的视
  • 零基础玩转树莓派(四)—GPIO端口控制(LED灯)

    一 GPIO介绍 树莓派3B 和普通电脑不一样的地方在于它还带了40个可编程的GPIO General Purpose Input Output 可以用来驱动各种外设 如传感器 步进电机等 GPIO General Purpose I O
  • Markdown学习

    标题 Hello world hello world 引用 选择java走向人生巅峰 格式 gt 回车 分割线 回车 图片 图片名字 超链接 格式 链接名字 点击跳转4399游戏 列表 有序列表 格式 数字 空格 无序列表 格式 空格 表格
  • 移植OpenHarmony 3.0到ARM单片机

    9月30日 OpenHarmony 3 0 LTS版本发布 本文将介绍如何移植OpenHarmony 3 0到星空派开发板上 1 星空派开发板介绍 星空派 GD 开发板是由旗点科技推出的一款GD32开发板 板载GD32F303ZET6芯片
  • Linux终端打印

    student myhost echo h h h h h h student myhost echo h h h h h h student myhost echo h h h h h h 我们可以看到echo命令执行完后自带一个换行符并
  • 相关滤波跟踪(MOSSE)

    相关滤波跟踪 MOSSE 在信号处理中 有这么一个概念 相关性 correlation 用来描述两个因素之间的联系 而相关性又分为cross correlation 互相关 两个信号之间的联系 和auto correlation 自相关 本
  • 拍档的快速排序怎么写?

    我可以提供一个快速排序的算法 1 选择一个基准元素 2 遍历数组 将小于基准元素的放入一个新的数组中 将大于基准元素的放入另一个新的数组中 3 递归地 recursively 对小于基准元素的数组和大于基准元素的数组进行排序 4 将排序后的
  • 用jquery插件实现自动添加用户

  • Android-CheckBox和RadioButton调整间距(有坑,注意)

    经常遇到设计师要求button部分和文字的添加间距 总结以下几种方式吧 修改button素材 将button素材周围添加透明区域 缺点 增大图片素材 间距不好控制 文字部分增加空格 缺点 虽然控制相对方便 但是还是受限于字体的样式和大小对于
  • Unity shader 初学 玻璃透明效果

    Properties BumpMap BumpMap 2D Bump CubeMap CubeMap Cube Dist Dist range 0 100 0 Amount Amount range 0 1 0 SubShader Tags
  • typeScript基础类型

    ts基础类型包括 布尔值 数字 字符串 数组 元组 枚举 Any Void Null Undefined Never Object等 1 布尔值 boolean let isDone boolean false 2 数字 number le
  • [深度学习入门]Numpy基础(上)

    目录 一 前言 二 Numpy概述 三 生成Numpy数组 3 1 从已有数据中创建数组 3 2 利用random模块生成数组 3 3 创建特定形状的多维数组 3 4 利用arange和linspace函数生成数组 四 获取元素 五 Num
  • 爱普生EPSON实时时钟芯片-RX8900SA

    爱普生EPSON实时时钟芯片 RX8900SA 一 引脚连接 二 使用方法 寄存器配置 1 实时时间读取 设置 2 闹钟时间读取 设置 三 代码 Rx8900sa c文件 Rx8900sa h文件 一 引脚连接 近期由于项目需求 被指定使用
  • Java区块链代码

    Java是一种流行的编程语言 它可以用来开发区块链应用程序 区块链是一种分布式数据存储技术 其中的数据存储在许多节点之间 并使用密码学算法进行加密 要使用Java来开发区块链应用程序 需要了解区块链的基本原理以及Java编程语言的基础知识
  • linux驱动笔试题总结

    linux驱动笔试题总结 试题取之于网络 用之于民 最近在学习linux驱动 驱动开发在笔试的时候考的知识点是有规律可循的 并且这些面点也是平时驱动工作中的理论指导 深刻的理解这些面点还是很有必要的 所以在此总结记录 相信会用到的 ps 以