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,没有适当的身份验证或授权,我完全无视中间件,也没有测试。 我将在其自己的部分中讨论所有这些问题,但重要的…...
CPP2022-30-期末模拟测试03
6-1 引用作函数形参交换两个整数 分数 5 全屏浏览题目 切换布局 作者 李廷元 单位 中国民用航空飞行学院 设计一个void类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作。 裁判测试程序样例: #include <…...
华为OD机试真题Python实现【最多等和不相交连续子序列】真题+解题思路+代码(20222023)
🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出说明示例二输入输出说明...
二叉搜索树
1.二叉搜索树 1.1.二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一颗空树,或者是具有一下性质的二叉树。 若它的左子树不为空,则左子树上的所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上的所有节点的值都…...
数据结构(三):集合、字典、哈希表
数据结构(三)一、集合(Set)1.封装一个集合类2.集合常见的操作(1)并集(2)交集(3)差集(4)子集二、字典(Map)三、…...
Linux内核驱动开发(一)
Linux内核初探 linux操作系统历史 开发模式 git 分布式管理git clone 获取git push 提交git pull 更新 邮件组 mailing list patch 内核代码组成 Makfile arch 体系系统架构相关 block 块设备 crypto 加密算法 drivers 驱动(85%) atm 通信bluet…...
TCP/IP协议二十问
TCP/IP协议二十问 1. 什么是TCP网络分层? TCP网络分层一般分为五层: 应用层(HTTP):组装数据包传输层(TCP):增加TCP头部,包含端口号等信息网络互联层(IP&am…...
常用Array数组操作方法
定义一个测试数组constplayers[{name:科比,num:24},{name:詹姆斯,num:23},{name:保罗,num:3},{name:威少,num:0},{name:杜兰特,num:35}]复制代码1、forEach参数代表含义item:遍历项index:遍历项的索引arr:数组本身Array.prototype.sx_forEach…...
【C++】set/multiset、map/multimap的使用
目录 一、关联式容器 二、set的介绍 1、接口count与容器multiset 2、接口lower_bound和upper_bound 三、map的介绍 1、接口insert 2、接口insert和operator[]和at 3、容器multimap 四、map和set相关OJ 1、前K个高频单词 2、两个数组的交集 一、关联式容器 vector、…...
vue3语法
vue3教程 //ps 这里是基本写法 一般项目不需要ref 因为需要一直return 这里是根据在不使用ts后缀 来在.vue里面写setup 如下图所示:setup setup是启动页面会自动执行的一个函数 项目里定义的所有变量,都要在setup当中 在setup定义的变量和方法,都需要r…...
对象之间的关系
目录1. 依赖2. 关联3. 聚合4. 组合Java的对象/类之间有四种关系:依赖、关联、组合、聚合。 1. 依赖 依赖(Dependency): 一个对象的功能依赖于另一个对象。 类比:人类生存依赖食物和空气 体现:被依赖者体…...
网站制作整个的流程是什么/百度关键词优化查询
前言:编写kettle的应该是一位爱做饭的程序员 kettle 是 java编写 需要jdk环境 kettle 组成 1.勺子(Spoon.bat/spoon.sh)图形化界面 win选择bat linux选择sh 2.锅(Pan.bat/pan.sh)调用Trans 3.厨房(Kitc…...
网站关键词排名优化推广软件/西安网站建设方案优化
PMP考试难吗? 如果我说"只要好好看书就不难"这样的唯心之论,大家肯定会觉得我站着说话不腰疼。 但客观而言,考试的难度并不大,因为全部都是选择题,不需要大段大段地背诵答题模板,相比于国内的考…...
黄岛开发区做网站的公司/百度收录快的发帖网站
这里写目录标题学习其他模型链接一、引言二、RNN本质三、RNN模型四、RNN的应用五、RNN训练的算法(一)随时间反向传播(backpropagation through time,BPTT)(二)实时循环学习(real-tim…...
有哪些好的网站制作公司/上海seo优化公司bwyseo
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 问题:如何设计一个"猜你喜欢"的推荐系统 问题背景 这是出现在某聘公司笔试中的问题。可见该公司正在计划实现或改进该项推…...
大学网站开发与管理知识总结/seo排名培训学校
很多小伙伴都遇到过win7系统忘记Mysql密码的困惑吧,一些朋友看过网上零散的win7系统忘记Mysql密码的处理方法,并没有完完全全明白win7系统忘记Mysql密码是如何解决的,今天小编准备了简单的解决办法,只需要按照 1、按“WinR”打开…...
高校网站建设需求单/泉州网站建设优化
策略模式【Strategy Pattern】刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵…...