linux驱动--内核和驱动关系

Windows内核--驱动程序和内核(1.6) 内核态驱动程序一般是和内核共同属于内核空间,驱动程序有能力访问内核大部分数据结构。内核根据需要,调用驱动程序执行相应的IO操作,如果驱动程序有异常,可以认为内核不稳定。一般情况下发生故障处理,典型的就是崩溃(dump)并重启, Windows的典型行为是蓝屏。 阅读详情

 

关键词: linux驱动,内核

 

 

概述

Linux设备驱动属于内核的一部分,Linux内核的一个模块可以以两种方式被编译和加

载:

(1)直接编译进Linux内核,随同Linux启动时加载。

(2)编译成一个可加载和删除的模块。

驱动程序向内核添加了一些函数,是内核的一部分。例如Open(), Release(), Read(), Write()。这些函数由内核在适当的时候来调用,可以用来完成硬件访问等操作。驱动程序占kernel源代码超过50%。

内核中printk()函数的设计目的并不是为了和用户交流,它实际上是内核的一种日志机制,用来记录下日志信息或者给出警告提示。如果syslogd 和klogd 守护进程在运行的话,则不管是否向控制台输出,消息都会被追加进/var/log/messages 文件。klogd只处理内核消息,syslogd 处理其他系统消息,比如应用程序。

Linux内核模块关系图

 模块关系图

设备驱动的并发控制

自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环查看是否该自旋锁的保持者已经释放了锁,“自旋”就是“在原地打转”。自旋锁适合于保持时间非常短的情况,它可以在任何上下文使用。

信号量则引起调用者睡眠,它把进程从运行队列上拖出去,除非获得锁。信号量适合于保持时间较长的情况,会只能在进程上下文使用。

 

如果被保护的共享资源需要在中断上下文访问(包括底半部即中断处理句柄和顶半部即软中断),就必须使用自旋锁。

 

设备驱动的内存与IO访问

         内核虚拟内存映射到连续的物理内存。

 内存映射

CPU 通常并没有为这些已知的外设I/O内存资源的物理地址预定义虚拟地址范围,驱动程序并不能直接通过物理地址访问I/O 内存资源,而必须将它们映射到核心虚地址空间内(通过页表),然后才能根据映射所得到的核心虚地址范围,通过访内指令访问这些I/O内存资源。Linux 在io.h 头文件中声明了函数ioremap(),用来将I/O 内存资源的物理地址映射到核心虚地址空间(3GB-4GB)。

 

         驱动中使用的地址是虚拟地址。外设的IO地址需要映射到虚拟地址。

 

 

 

 

参考资料

Linux设备驱动开发详解(第2版)    Linux设备驱动调试、移植  

http://zh.wikipedia.org/zh/Linux%E5%86%85%E6%A0%B8        Linux内核 

 

689-电脑的外部设备&驱动程序 电脑的外部设备 设备管理 (1)回顾计算机结构 图: (2)常见的外部设备 1)如何判定是不是外部设备 只要挂接在外设IO接口上的都是外部设备,与所在位置关系不大,可能在芯片内部、也可能在芯片外部,可能在机壳内部,也可能在机壳外部。 2)外部设备大致分为三类 按照用途分的话,大致分为三大类。 (a)数据的传输:比如网卡,负责数据的发送和接收,即是输入也是输出设备 (b)数据的存储:比如像磁盘,SSD(固态硬盘),负责数据的存储,既能读数据也能里写数据,所以即是输入也是输出设备。 c)数据的翻译:比如输入设 阅读详情

相关推荐

1.操作系统——内核

计算机资源 计算机中资源分为软硬件两类: 其中,硬件资源有 总线:主要负责连接其他设备,是其他设备工作的基础。 CPU:中央处理器,负责执行程序和处理数据运算。 内存:负责储存正在运行时的代码和数据。 硬盘:长期储存用户文件数据。 网卡:负责计算机与其他计算机之间的通信。 显卡:用于显示工作。 I/O设备:显示器,鼠标,键盘 总之,就是以一条总线连接,各个硬件设备。 而软件资源主要时是各种文件和软件程序。 操作系统内核与驱动 操作系统内核是计算机硬件和软件资源的管理者 主要表现在: 管理CPU:CPU

strive for the best 的博客 1022

一文带你深入了解linux驱动

很多程序员在学习技能时,盲目追求技术实现,而忽略了整个生态环境的观察和基础理论铺垫,导致学完后似是而非,不能举一反三,遇到项目依然拿不出合理的解决方案。 作为一个技术开发者,大家要明白“技术只是工具,有用的是产品”,我们要用技术去解决问题,而不是单纯地做个技术控,自我娱乐。 想要学习一门新技术,我们首先要对它有个清晰的了解,不能什么都不懂就开始往上面扑,就像很多人到庙里面就上香求佛祖保佑,可能根本都不知道这个佛是哪一路神仙。 那今天我们就先带大家来深入了解下嵌入式开发中至关重要的一环:linux驱动。 在学

aa804738534的博客 5465

qt如和调用linux底层驱动_Linux系统下程序、内核与硬件的关系

硬件与软件的关系在任何一个计算机系统中,大至服务器、PC机、小至手机、mp3/mp4播放器,无论是复杂的大型服务器系统还是一个简单的流水灯单片机系统,都离不开驱动程序的身影,没有硬件的软件是空中楼阁,没有软件的硬件只是一堆废铁,硬件是底层的基础,是所有软件得以运行的平台,代码最终会落实到硬件上的逻辑组合。但是硬件与软件之间存在一个驳论:为了快速、优质的完成软件功能设计,应用程序工程师不想...

weixin_39640762的博客 1187

应用程序、库、内核、驱动程序之间的关系

1.概述 在计算机系统的软件系统里面,从上到下可以分为四部分:应用程序、库、操作系统(内核)、驱动程序。它们之间是一个层次的关系,如下图所示: 从上图可以看出: 1. 应用程序调用应用程序函数库完成功能; 2. 应用程序以文件形式访问各种资源、应用程序函数库、部分函数来直接完成功能; 3. 由内核完成内核处理系统调用,调用设备驱动程序; 4. 设备驱动直接与硬件通信。 2.实例分析 下面以点亮一...

qq_40642828的博客 2199

Linux——Linux驱动之使用Menuconfig进行Linux内核的裁剪总结(Menuconfig操作、Kconfig和.config文件的关系)

0 引言 嵌入式操作系统都是可以按需裁剪的,保留需要的部分,裁掉项目中不用的部分,可以精简系统,减小ROM和RAM的占用,Linux内核的裁剪是编译器通过.config文件确认哪些编译进内核,哪些被裁剪掉的,而.config文件是通过Menuconfig生成的。本博文就Menuconfig操作和.config文件进行学习总结。 1 Menuconfig的操作 配置Linux内核可以使用以下命令: make config——基于文本的最传统的配置界面,不推荐使用; make xconfig—...

数字世界 万物互联 1018

英飞凌IGBT驱动芯片2ED020I12F2去饱和电路设计总结整理收集

记录下英飞凌IGBT驱动芯片限流电阻阻值设计

nizhenyuchina的博客 5996

linux内核和驱动的关系,Linux内核模块和驱动程序的详细编写

Linux内核是一个整体是结构。因此向内核添加任何东西。或者删除某些功能 ,都十分困难。为了解决这个问题。引入了内核机制。从而可以动态的想内核中添加或者删除模块。模块不被编译在内核中,因而控制了内核的大小。然而模块一旦被插入内核,他就和内核其他部分一样。这样一来 就会曾家一部分系统开销。同时,如果模块出现问题。,也许会带来系统的崩溃。模块的实现机制:启动时,由函数 void inti_module...

weixin_39608118的博客 709

海康威视摄像机SDK二次开发--提取音频保存至文件

由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中CameraInfo内容可以参看海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中 HIKSDKSaveRealData中的内容 package ClientDemo; import ClientDemo.CameraInfo; import com.sun.jna.NativeLong; import

RichardoMu的博客 3173

linux内核、驱动和硬件之间的关系和通信

linux驱动是直接和硬件打交道的软件程序。层次结构上它处于操作系统和硬件之间。 驱动与linux内核的关系 驱动程序提供的一组设备驱动接口函数Device Driver Interface给操作系统在linux中,这一组设备驱动接口函数一般包括open,close,read,write,ioctl等。 这一组函数是通过一个叫做file operations的结构体注册给linux内核的。 ...

Mr0cheng的专栏 5726

cosmos-curate工业级视频数据预处理引擎/终端用户指南( end-user-guide)

摘要:Cosmos-Curate是一个用于视频和自动驾驶数据处理的开源工具,提供从本地到集群的完整部署方案。文档针对三类用户:终端用户(配置运行现有管道)、开发者(修改/创建管道)和贡献者(改进代码库)。核心功能包括容器化设计(Docker+NVIDIA工具链)、多平台支持(本地/Slurm/云)、集成HuggingFace/NGC模型,以及可扩展的管道架构。使用需满足硬件(如Ampere架构GPU)和软件(Ubuntu22.04+Python3.10)要求,通过CLI工具构建镜像、下载模型并运行示例管道(

qq_45053161的博客 1203

基于单片机自行车码表控制系统设计

*单片机设计介绍,基于单片机自行车码表控制系统设计。

QQ2193276455的博客 1488

linux嵌入式内核驱动,linux驱动--内核和驱动关系

概述Linux设备驱动属于内核的一部分,Linux内核的一个模块可以以两种方式被编译和加载:(1)直接编译进Linux内核,随同Linux启动时加载。(2)编译成一个可加载和删除的模块。驱动程序向内核添加了一些函数,是内核的一部分。例如Open(), Release(), Read(), Write()。这些函数由内核在适当的时候来调用,可以用来完成硬件访问等操作。驱动程序占kernel源代码超过...

weixin_42099987的博客 533

不用买机械臂!用Python+ROS仿真实现RGB-D物体抓取全流程(Gazebo/MoveIt教程)

本文详细介绍了如何利用Python和ROS仿真环境(Gazebo/MoveIt)实现RGB-D物体抓取全流程,无需购买昂贵机械臂硬件。从环境搭建、机械臂模型导入、深度视觉系统配置到MoveIt运动规划,提供完整的实战指南,特别适合个人开发者和学生团队进行机械臂抓取算法验证与开发。

weixin_29061041的博客 340

Linux驱动里的内核框架和驱动工程师的工作的关系

最近在回看之前学韦东山驱动大全的pinctrl子系统时写的笔记,感觉第二遍看笔记理解了更多更整体的关系,记录一下由此和chatgpt讨论的关于Linux驱动和内核的关系,作为驱动工程师到底是要干什么的问题,内容是和chatgpt讨论以后让chatgpt总结讨论(不要骂我很蠢啊啊之前第一遍学的时候在看每个子系统的数据结构和设备树解析流程包括在编写子系统控制器的驱动代码时都更倾向于只是跟着韦东山老师讲的过了一遍,像死记硬背完全不知道自己在干什么,后来找了实习,然后现在又重新开始看之前学过的内容,感觉有了更多理解

m0_75087254的博客 595

使用基于物质点法(MPM)的Anura3D模拟沙柱坍塌

本博客使用开源软件Anura3D软件模拟了一个沙柱坍塌的过程,这个软件是基于基于物质点法(MPM)设计的

weixin_59902634的博客 4043

库存管理系统项目部署方案(基于jdk8)

不需要安装到服务器,运维本地安装就行,主要是用来编译前端代码的。构建完成后将dist文件夹复制到服务器内。

程序员诚哥 2576

linux内核,驱动,应用程三者的概念和之间的关系

驱动程序属于内核的一个部分。准确的说是内核的一个组件。不包含驱动的内核也叫做内核,并且这也是我们常说的内核。内核要干的事情无非5件。 1,内存管理 2,虚拟文件系统 3,进程调度 4,网络接口 5,进程间通信 驱动更像是内核的扩展组件来帮助内核实现硬件的连接和操控。内核通过提供统一的驱动操作接口供用户层使用,驱动就是在这层统一的接口下实现硬件的操控的中间层。 首先,要理解操作系统的概念,操作系统

CatEatApple的专栏 3909

【报错解决】OpenClaw 报错 EACCES: permission denied:安装权限不足

本文针对国产操作系统环境下使用 npm 安装 OpenClaw 时出现的 EACCES 权限错误,提供了专业解决方案。文章首先分析了问题本质是 npm 全局安装路径与 Linux 权限模型的冲突,然后给出三种解决方案:1)配置用户级 npm 全局目录(推荐);2)使用 nvm 管理 Node.js;3)临时使用 sudo(不推荐)。特别强调在企业环境中应避免使用 root 权限安装,并详细说明了如何正确设置用户级 npm 路径,确保符合生产环境的安全审计要求。该方案同样适用于 OpenEuler、OpenC

博客 3190

ANDROID驱动LINUX内核、HAL和JNI关系

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33853794的博客 428

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Linux驱动学习一(各级Kconfig和Makefile、Linux内核菜单配置界面的关系)

这里记录一下字符设备驱动Kconfig的作用。 1.在Linux内核代码中的drivers/char/Kconfig中有如下代码: (1). menu "Character devices"是菜单名,下面会看到。 (2). source "drivers/tty/Kconfig"通过source语句引入别的Konfig。 (3). config是一个关键字,定义一个设备驱动的名字,这里...

forwardjia的博客 706

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux内核是什么意思呢?和英伟达显卡驱动版本有对应关系吗?

新版本的内核通常会修复Bug、提升安全性,并带来更好的硬件支持(尤其是新显卡、新CPU等)。简而言之,Linux内核相当于系统的大脑,负责系统的底层控制和资源调度。Linux内核是什么意思呢?和英伟达显卡驱动版本有对应关系吗?:若你的显卡型号较新,可能需要更新内核和驱动以获得最佳性能。中,找到你的显卡型号并确认兼容的内核版本范围。:若你的系统运行稳定,且显卡性能表现良好,

weixin_43501408的博客 1040

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[150312]linux内核,驱动,应用程三者的概念和之间的关系

http://zhidao.baidu.com/link?url=TZ14V5nI4ba0Ym2KcT08PesVpijMO0F6wWQ5JkYtV_NGtB5d0VBr6u4pcBcE2u29kNcN9kuZ-pHGV94aOpUSCa Q:我知道三者是怎么下载到开发板的,linux内核是编译以后利用u-boot下载到开发板的,那驱动程序是单独下载的还是编译好后放在linux内核中

AxisLamb的专栏 772

Linux中config等几个文件夹,linux 内核驱动动态加载和静态加载和 .config makefile kconfig 三个文件之间关系...

1 静态编译驱动进内核当我们编写完一个驱动后,我们要把它以模块形式编译或者直接编译进内核时,需要修改相关文件,其中最重要的便是kconfig ,makefile。主要是分析一下三者之间的关系,然后就其语法简要的谈一下。当我们在内核源码目录下执行make命令时,实际上是根据makefile 来进行编译的。在mini2440开发板上编写了一个按键控制led灯的驱动。文件名为buttons_leds.c...

weixin_39653320的博客 284

linux 内核驱动动态加载和静态加载和 .config makefile kconfig 三个文件之间关系

1 静态编译驱动进内核   当我们编写完一个驱动后,我们要把它以模块形式编译或者直接编译进内核时,需要修改相关文件,其中最重要的便是kconfig ,makefile。 主要是分析一下三者之间的关系,然后就其语法简要的谈一下。     当我们在内核源码目录下执行make命令时,实际上是根据makefile 来进行编译的。     在mini2440开发板上编写了一个按键控制led灯

u012590688的专栏 1639
上一篇: python爬虫
下一篇: linux驱动--调试方法总结
cutter2002
博客等级 码龄20年 51粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值