Linux驱动学习环境搭建
背景常识
一、程序分类
程序按其运行环境分为:
1. 裸机程序:直接运行在对应硬件上的程序
2. 应用程序:只能运行在对应操作系统上的程序
二、计算机系统的层次结构
所有智能设备其实都是计算机,机顶盒、路由器、冰箱、洗衣机、汽车的中控……
计算机系统两种层次结构:
2.1 无操作系统的简单的两层结构
2.2 有操作系统的复杂的四层结构
安卓就是中间层、ios也是,但是说那么细致非专业人士也不懂就统称了。
鸿蒙其实更多的也是在中间层做文章。系统层修改不大。
三、 什么是操作系统
狭义的操作系统:给应用程序提供运行环境的裸机程序,也被称为操作系统内核
广义的操作系统:一组软件集合,它包含:
1. 最核心的一个裸机程序 ----------内核 (kernel)
3. app开发常用的一些功能库(如:C语言标准函数库、线程库、C++标准类库、QT类库等等)
4. 一些管理用的特殊app(如桌面、命令行、app包管理器、资源管理器、系统设置、一些常用后台服务程序)
由于现在开源的操作系统很多,所以做一个操作系统已经没什么太大难度了,就是太大了,需要很多的人。操作系统存在的价值就是方便我们操作机器。一个新的操作系统问世没人用那就没有存在的意义了。我们国家做过很多国产操作系统但是都失败了。因为很多行业应用只能在windows上跑,他们也不愿意在别的操作系统上在开发一遍APP。不过随着Linux的普及,微软的地位可能会收到冲击。鸿蒙开发出来也面临推广问题,怎么让程序员愿意接纳鸿蒙,在鸿蒙上开发好的APP。intel和三星合作开发过一个操作系统但是也卡在了推广,两家这么强的公司也没把他推起来。安卓会火就是因为他代替了一个操作系统叫做塞班。程序员们为塞班提了很多改进意见。但是他没改。这时候正好安卓出了程序安装卸载功能并且用java能开发。市场上的Java程序员还多就火起来了。
四、操作系统内核的实现模式
内核:操作系统最核心的那个裸机程序,主要负责硬件资源的驱动和管理。
一个操作系统内核主要包括如下几个子模块:
1. 任务管理:多任务支持、任务调度、任务间通讯
2. 内存管理:物理内存管理,虚拟内存实现(出现段错误不影响系统运行)
3. 设备驱动:各种外部设备的I/O支持
4. 网络协议支持
5. 文件系统支持
6. 启动管理
两种典型的内核实现模式:
1. 单内核(宏内核):所有子模块代码编译到一个比较大的可执行文件(镜像文件)中,各子模块代码共用同一套运行资源,各模块间的交互直接通过函数调用来进行
(3、4、5在微内核中被做成了服务进程,APP和内核之间使用进程间通信来调用这些服务。
在宏内核中函数是通用的直接用函数就行。新增加功能时微内核直接加个模块就行。但是宏内核需要重新编译内核。这样太麻烦了所以宏内核加了一个机制提高扩展性。)
2. 微内核:只将任务管理、内存管理、启动管理最基本的三个子模块编译到一个微型的可执行文件中,其它子模块则各自编译成独立的后台服务程序,这些服务程序与微型内核以及app间主要通过各种IPC进行通讯
单内核特点:效率高,稳定性低,扩展性差,安全性高,典型操作系统:UNIX系列、Linux
微内核特点:效率低,稳定性高,扩展性高,安全性低,典型操作系统:Windows,QNX
五、什么是设备驱动程序
英文:Device Driver
简称:驱动(Driver)
一种添加到操作系统中的特殊程序,主要作用是协助操作系统完成应用程序与对应硬件设备之间数据传送的功能
简言之,设备驱动程序就是操作系统中“驱动”对应硬件设备使之能正常工作的代码。
一个驱动程序主要完成如下工作:
1. 初始化设备,让设备做好开始工作的准备
2. 读数据:将设备产生的数据传递给上层应用程序
3. 写数据:将上层应用程序交付过来的数据传递给设备
4. 获取设备信息:协助上层应用程序获取设备的属性、状态信息
5. 设置设备信息:让上层应用程序可以决定设备的一些工作属性、模式
6. 其它相关操作:如休眠、唤醒、关闭设备等
其中最核心的工作就是设备数据的输入和输出,因此计算机外部设备(外设)也被称为IO设备
向下驱动外设向上提供接口
学习方法
一、为什么要学驱动开发
1. 理想原因:兴趣、成就感
2. 现实原因:高薪
看看华为、大疆、还有汽车企业的薪资十分诱人。
二、学习Linux驱动开发的前提条件
1. 精通C语言
2. 能看懂硬件原理图
3. 阅读芯片手册不怵头
(很多芯片手册都是英文的。暂时没遇到过中文的。)
4. 有Linux操作系统的一些背景知识,比如说
a. Linux常用命令的使用
b. Linux常用系统调用函数的编程,尤其是IO相关函数
三、怎么学?
1. 学习任何方面编程的共同准则--------用代码来检验所学
2. 从简易入手,逐步深入,切忌太强的好奇心
3. 重点花在掌握原则、总结套路,知识点、相关函数不要死记硬背
4. 会搜善套(网络、笔记、芯片手册)
(需要大量时间来时间,光看视频查资料没用。)
(开发环境和前面系统移植需要的一样,详情可参考我前面的博客)
相关文章:

Linux驱动学习环境搭建
背景常识 一、程序分类 程序按其运行环境分为: 1. 裸机程序:直接运行在对应硬件上的程序 2. 应用程序:只能运行在对应操作系统上的程序 二、计算机系统的层次结构 所有智能设备其实都是计算机,机顶盒、路由器、冰箱、洗衣机、汽…...

Java基础之异常
目录1 异常1.1 异常的概述1.2 常见异常类型1.3 JVM的默认处理方案1.4 编译时异常的处理方式1.4.1 异常处理之 try ... catch ... [ktʃ](捕获异常)1.4.2 异常处理之 throws(抛出异常)1.5 Throwable 的成员方法1.6 编译时异常和运行…...
感慨:大三了,未来该何去何从呢
笔者曾在十一月份通过了字节跳动的三次面试, 但是最终因为疫情原因不能满足公司的入职时间要求, 没有拿到offer。近期也是投递了大量大厂的实习岗, 但是要么已读不回, 要么明确告诉我学历至少要985硕士(天天被阿里cpu)。 说实话一…...

分账系统逻辑
一、说明 主体与业务关系方进行相关利益和支出的分配过程 使用场景: 在分销业务中,主营商户收到用户购买分销商品所支付的款项后,可以通过分账逻辑,与分销商进行佣金结算。在零售、餐饮等行业中,当销售人员完零售等…...

SpringCloud篇——什么是SpringCloud、有什么优缺点、学习顺序是什么
文章目录一、首先看官方解释二、Spring Cloud 的项目的位置三、Spring Cloud的子项目四、Spring Cloud 现状五、spring cloud 优缺点六、Spring Cloud 和 Dubbo 对比七、Spring Cloud 学习路线一、首先看官方解释 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式…...

TCP核心机制之连接管理详解(三次握手,四次挥手)
目录 前言: 建立连接 建立连接主要两个TCP状态: 断开连接 断开连接的两个重要状态 小结: 前言: TCP是如何建立对端连接,如何断开连接,这篇文章会详细介绍。 建立连接 首先明确连接的概念:…...
前端—环境配置
前端开发建议用 Google Chrome 浏览器 vscode https://code.visualstudio.com 1、open in browser 插件:可以在 vscode 中直接运行查看浏览器效果 2、Live Server 插件:可以使代码修改浏览器页面实时刷新。 用户代码片段 … JavaScript 与 TypeScri…...

大学生常用python变量和简单的数据类型、可迭代对象、for循环的3用法
文章目录变量和简单的数据类型下划线开头的对象删除内存中的对象列表与元组debug三酷猫钓鱼记录实际POS机小条打印使用循环找乌龟可迭代对象📗理解一📘理解二2️⃣什么是迭代器✔️注意3️⃣迭代器对象4️⃣有关迭代的函数for循环的3用法🌸I …...

Java集合:Map的使用
1.Map框架l----Map:双列数据,存储key-value对的数据 ---类似于高中的函数: y f(x)|----HashMap:作为Map的主要实现类, 线程不安全的,效率高;可以存储null的key和value|----LinkedHashMap:保证在遍历map元素时,可以按照…...

【Datawhale图机器学习】第一章图机器学习导论
图机器学习导论 学习路径与必读论文清单 斯坦福CS224W(子豪兄中文精讲)知识图谱实战DeepwalkNode2vecPageRankGNNGCNGragh-SAGEGINGATTrans-ETrans-R 图无处不在 图是描述关联数据的通用语言 举例 计算机网络新冠肺炎流行病学调查传播链食物链地铁图…...

window 配置深度学习环境GPU
CUDA 11.6 CUDNN Anaconda pytorch 参考网址:https://zhuanlan.zhihu.com/p/460806048 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 电脑信息 RTX 2060 GPU0 1. CUDA 11.6 1.1 确认信息 C:\Users\thzn>nvidia-smi (CUDA Versi…...

VS Code 用作嵌入式开发编辑器
使用 Keil MDK 进行嵌入式开发时,Keil 的编辑器相对于主流编辑器而言有些不方便,比如缺少暗色主题、缺少智能悬停感知(鼠标停在一个宏上,能自动展开最终的宏结果)、代码补全不好用等等,所以推荐使用 VS Cod…...
【Python】网络爬虫经验之谈
爬虫经验之谈对爬虫的认识网站分析技术选型JS逆向反爬机制结语近段时间,因为工作需要做一些爬虫的开发,分享一下走过的坑和实战的经验吧!对爬虫的认识 F12查看的网络请求,找到相应的接口查看一下json数据来源和构造。我爬取的网站…...

数学建模美赛【LaTeX】公式、表格、图片
数学建模美赛【LaTeX】公式、表格、图片 1 宏包 \package{ } 就是在调用宏包,对计算机实在外行的同学姑且可以理解为工具箱。 每一个宏包里都定义了一些专门的命令,通过这些命令可以实现对于一类对象(如数学公式等)的统一排版&a…...

【大数据】YARN节点标签Node Label特性
简介 YARN 的 Node-label 特性能够将不同的机器类型进行分组调度,也可以根据不同的资源要求进行分区调度。运维人员可以根据节点的特性将其分为不同的分区来满足业务多维度的使用需求。YARN的Node-label功能将很好的试用于异构集群中,可以更好地管理和调…...

C# SolidWorks二次开发 API-命令标签页的切换与按钮错乱问题
这是一个网友咨询的问题,说他想控制默认打开文件之后solidworks上方工具栏的当前激活标签页。 之前我们提到过,制作Solidworks的插件也会在上面增加一个标签页,用来放自己开发的命令,经常开发的人肯定会遇到有时候更新版本,或者标…...
ElasticSearch 7.6.1
疑问 ES为什么这么快? 全文检索 听过一个程序扫描文本的每一个单词,针对单词建立索引,并保存该单词在文本中的位置,以及出现的次数。在检索查询时候,通过建立好的索引进行查询,将索引中单词对应的文本位…...

Linux系列 操作系统安装及服务控制(笔记)
作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.操作系统 1.Linux系统三大类 (1)ubu…...

Linux基础 - NTP时间同步
🏡博客主页: Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 🌐所属专栏:『Linux基础』 🌌上期文章: Linux基础 - DNS服务进阶 📰如觉得博主文章写的不错或对你有所帮助…...

golang 入门教程:迷你 Twitter 后端
请记住,这个项目主要是为了稍微熟悉下Golang,您可以复制架构,但该项目缺少适当的 ORM,没有适当的身份验证或授权,我完全无视中间件,也没有测试。 我将在其自己的部分中讨论所有这些问题,但重要的…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...