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

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是如何建立对端连接,如何断开连接,这篇文章会详细介绍。 建立连接 首先明确连接的概念&#xff1a…...

前端—环境配置

前端开发建议用 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,没有适当的身份验证或授权,我完全无视中间件,也没有测试。 我将在其自己的部分中讨论所有这些问题,但重要的…...

ChatTTS 语音合成中如何高效添加语气词:原理与实战指南

最近在做一个语音播报项目,用到了ChatTTS,发现生成的语音虽然清晰,但总感觉少了点“人味儿”。特别是那些“嗯”、“啊”、“哦”之类的语气词,插进去之后特别生硬,像机器人在念稿,用户体验大打折扣。这让我…...

2026年专业深度测评:防蛀牙儿童牙膏排名前五权威榜单

核心结论: 基于对产品配方科学性、成分安全性、防蛀功效验证及品牌专业资质的四维量化评估,德国原装进口的宝儿德儿童牙膏在本次权威测评中综合表现位列榜首,其经百年验证的经典防蛀配方、全面的“无有害添加”体系及适配儿童误吞的安全性设计…...

ChatGPT大模型语音开发入门:从API调用到实战避坑指南

背景痛点:语音交互的“暗礁” 当我们从文本交互迈向语音交互时,面临的挑战是立体的。新手开发者常常在兴致勃勃地调用API后,被一连串的“暗礁”绊倒。 音频格式的迷宫:大模型语音API通常对音频格式有严格要求,例如采…...

MOS管技术详解:从基础到工程应用

MOS管技术详解:从基础原理到工程应用1. MOS管基础概念与分类1.1 场效应管基本类型场效应管(FET)主要分为两大类型:结型场效应管(JFET):Junction Field-Effect Transistor金属氧化物半导体场效应管(MOSFET):Metal-Oxide-Semiconduc…...

如何高效完成输入法词库转换:实用工具指南

如何高效完成输入法词库转换:实用工具指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾经因为更换输入法而烦恼词库无法迁移?是否…...

AlphaFold实战指南:如何利用Colab+开源代码复现蛋白质结构预测(避坑版)

AlphaFold实战指南:如何利用Colab开源代码复现蛋白质结构预测(避坑版) 蛋白质结构预测一直是计算生物学领域的圣杯级难题。2021年DeepMind发布的AlphaFold2以原子级精度解决了这一挑战,彻底改变了结构生物学的研究范式。本文将带你…...

【内存心法】别用玄学猜栈大小了!撕碎 RTOS 堆栈溢出的遮羞布,用 ARM MPU 构筑硬件级“死亡红区”与绝对沙箱

摘要:在错综复杂的多任务 RTOS 环境中,一个微小的局部数组越界,就能像癌细胞一样悄无声息地摧毁整个系统的内存空间。无数开发者迷信 FreeRTOS 的 vApplicationStackOverflowHook,却不知道它在真正的“跳跃式内存踩踏”面前形同虚…...

4步掌握glTF-Blender-Exporter实现3D模型高效导出

4步掌握glTF-Blender-Exporter实现3D模型高效导出 【免费下载链接】glTF-Blender-Exporter Moved to https://github.com/KhronosGroup/glTF-Blender-IO. 项目地址: https://gitcode.com/gh_mirrors/gl/glTF-Blender-Exporter glTF-Blender-Exporter是一款由Khronos Gro…...

VSCode调试Python示例json文件

使用vscode调试python的示例文件,可参考其中的传参方式、环境变量导入方式。其他内容均为自动生成 {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.m…...

惊艳效果展示:实时手机检测-通用镜像识别复杂场景手机案例

惊艳效果展示:实时手机检测-通用镜像识别复杂场景手机案例 1. 开箱即用的手机检测神器 想象一下这样的场景:你需要快速检测一张照片中有多少部手机,可能是为了分析会议记录、监控考场纪律,或者统计零售店铺的顾客行为。传统方法…...