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

现代操作系统——Linux架构与学习

小白的疑惑

在我决定从事嵌入式(应用层)方面的工作时,我查询了大量资料该如何学习,几乎所有观点不约而同的都指向了学习好Linux,大部分工作都是在Linux环境下来进行工作的。于是我雄心勃勃的去下载Linux,可能大部分人的经历都与我类似,下载虚拟机、学习指令、学习文件操作等API。但是我在学习的过程中,总是觉得不得劲。不知道自己学Linux到底是在学什么?仿佛是盲人摸象,越学越迷糊。
初窥门径
前期花了十分多的精力学习了各种函数、线程进程的概念。总是晕晕乎乎,直到后面接触到一种学习方法,框架式学习法,使用框架式学习法后我犹如醍醐灌顶,瞬间有了学习的欲望自己也不茫然了。为了帮助更多的人,所以 我把这种学习方法来分享给大家,帮助更多不知道Linux该如何学习的人,能够踏入Linux的大门。
所谓框架式学习,就是自顶向下的学习,先从全局来把握Linux,下面给出一张图来简要说明
在这里插入图片描述

从上面的图中不难看出,Linux位于硬件上层与系统API下层。而我们常说的C\C++开发屏蔽了硬件层,你无须认识各类硬件,也能自如的使用这些硬件。这是因为Linux为我们封装好了使用这些硬件的方法。而更上层的应用框架,也就是我们后续学习的高端编程,都是基于这之上来搭建的。学习框架可以帮我们快速的搭建一个可用的应用。但是缺点是我们很难知道底层的一些细节,也就是不断调用写好的函数,而不知所以然。值得注意的是,越下层的东西原理越固定,也就是迭代的速度越慢。而越上层的应用,则日新月异,我们时常会感受到,学习Linux做不出什么东西来,这是十分正常的。想要短时间实现应用,就该学习一些框架。
举个例子吧,想要以linux为操作系统做个人脸识别机器人,还能语音播报,可以用window控制,可以存储视频数据。
考虑一个最小子系统,我们需要用一个摄像头来当眼睛,需要一个语音模块来当嘴巴,需要一颗主控板上面跑着Linux操作系统来当作大脑(可以用树莓派)。我们可以用Opencv来做图像处理,只需要调用几个函数几百行代码就能实现一个简单的人脸识别,可以使用FFMPEG来做语音识别和音频处理,如果只是简单的语音播报功能学习起来也十分的快。有了这些功能,组织起来,你的下位机也就是机器人就已经制作完毕了。穿插着学习一下线程和进程的知识,简单的组装一下他就可以用几个Linux命实现相应的功能。针对性的去学习相应的函数,其它用不上的一概不学的情况下。这大概只需要花费十来个小时,
只有下位机显然是不够的,如果我们想要用个PC机来作为上位机控制这个机器人呢?那我们需要有个前端界面,可以是用Qt,Qt可以拖拽生成界面,假设不考虑美观性,只实现获取摄像头、开始识别、语音播报两个功能。那PC机需要和树莓派进行通信,我们需要学习Socket网络编程,如果需要存储数据可以学习Sqlite。同样的广度优先学习,只学一个皮毛调用相应的API即可。这不会花费特别多的时间,现代框架拥有的强大功能可以帮助你快速搭建起一个这样的体系。
让我们回头看看我们做了一个什么东西,是不是和我们现在用的产品已经十分类似了,完全可以当作一个毕设的级别的小Demo。然鹅做一个这样东西的时间,其实不需要花费太久,只要你知道有这个函数,知道环境怎么搭建,你不需要知道太多的底层知识,只需要知道个大概流程。长则一个月短则几周,完全可以独立的开发出一个这样的东西(照猫画虎)很多代码网络上都有了,跟着视频去做即可。这也是自顶向下学习的第一步,从应用层进行学习。
渐入佳境
完成这样的一个机器人,我们看似用了很多技术,那么这些技术究竟从何而来?我们调用的API函数究竟是怎么实现的?框架又是怎么搭建的?为什么短短几行代码就能实现如此强大的功能?如果你有强烈的求知欲,而不满足只是在巨人的肩膀上来实现这样一个应用。让我们接着往下走,这里假设你已经有了C语言的基础,看看Linux到底帮助我们完成了什么工作。
首先我们回忆一下我们开机时候的场景,第一步按下电源键,屏幕开始显示,恭喜你,已经成功开机。让我们停下来,看看具体发生了什么,为什么按下开机键就可以有如此大的威力?开机键按下,它会产生一个电流,一切的一切都可以从这开始。电流进入一个名叫bootloder(一个写在单片机里的引导程序)的身体,bootloder被电流唤醒,开始引导Linux内核(Kernel):喂喂喂!开始工作了,Kernel按照定义开机的步骤,点亮屏幕、输出一些信息、连接鼠标…挂载文件系统。启动成功,欢迎用户。这时候你可以自由的使用Linux系统,可以敲一些指令。
添加图片注释,不超过 140 字(可选)

而那些屏幕、鼠标、键盘称之为IO设备,是人和机器沟通的工具。我们可以有一些输入,然后得到一些输出。Linux又是怎么来调用这些硬件的呢?这些硬件有不同的原理图,但是我们可以同一用一个USB接口(或者蓝牙之类的)来识别,然后使用,这又是怎么实现的呢?答案是驱动程序,比如一个鼠标,它的产家根据它独有的芯片来设计一个驱动程序,然后Linux加载这个驱动程序,用户就可以使用这个鼠标了。大部分时候用户都会被屏蔽这个过程,有时候操作系统缺少驱动时,会提醒你安装,或者你需要自己到官网来下载一些驱动程序…
在这里插入图片描述

这时候我们大致明白什么是 BootLoader 引导程序,什么是 Linux 操作系统内核 Kernel,什么是文件系统,不同硬件和Linux是怎么进行交互的,怎么使用这些硬件的。
让我们回到最初的问题,框架是怎么来的,框架你也可以认为是一种应用,而它调用的就是最基础的Linux提供的API,像是我们学习的fopen,fwrite的函数。驱动程序则赋予fopen真正的意义,因为外设也是一种文件。那么框架通过抽象出大部分的流程,封装好繁琐的步骤,留下一个薄薄的调用接口,可以帮助我们实现各种强大的功能。

在这里插入图片描述

总结
上文我简单的带大家去识别了究竟一个实际的产品的背后,涉及到的是什么东西。它到底和我们学习的Linux、C语言有什么关系。可能大部分使用单纯的用C或者Linux我们做不成什么有用的产品,这是因为我们没有接触一些现在流行的框架,我鼓励大家去接触到底该怎么开发一个产品,你大可以根据我上面描述的制作机器人的步骤去一步一步学习。当然你需要善于使用搜索引擎,好歹你现在知道该怎么去做了,你脑海里面有了清晰的计划,只要一个个问题去解决,终究是可以实现一个有用的产品。在这一步骤,大家可以不求甚解,面向需求编程,需求是什么,就去用什么,学习相应的内容,不要全学,用到什么学什么。可以复制黏贴的绝不自己手敲。大部分培训班干的就是这件事情。
但是完成了一个小项目后,我希望你能回过头来,静下心的去弄明白,这些东西到底是怎么实现的?它涉及到哪些我之前学习过的知识点?原理是什么?大师们是怎么解决这些难题的?其实所有的专业术语都是为了解决一些出现的难题,像TCP\IP协议并非无中生有,网络的多层模型也是为了解决网络通信的难题。学校学习的知识,不会从应用出发,常常是自底向上,或者从中间往上走,让人云里雾里,稀里糊涂,好像学了又好像没学。实际不会用,理论学不懂,相信是绝大多数人迷茫的地方。所以在遇到一个新的知识时,不妨从另外一个角度来思考问题,这个知识,它能解决什么实际问题?这往往会为你打开一个新世界的大门,也可以帮助你将这个知识点领悟的更加深刻。我是一个爱编程的小白,今天的文章到这里就结束啦!期待和大家下次再见!
相关视频:https://www.bilibili.com/video/BV1HE411w7by?p=1&vd_source=d15a0ea5c86399d259f6febe12d6ea1a

相关文章:

现代操作系统——Linux架构与学习

小白的疑惑 在我决定从事嵌入式(应用层)方面的工作时,我查询了大量资料该如何学习,几乎所有观点不约而同的都指向了学习好Linux,大部分工作都是在Linux环境下来进行工作的。于是我雄心勃勃的去下载Linux,可…...

中文代码82

PK 嘚釦 docProps/PK 嘚釦羸 r docProps/app.xml潙蚽?勶曻Q顗濔S? 錞礖剅D柍珘m?鳞?ぷ辷f硌?2?upc厭Y樐8 rU y搪m眾&a?珪?紓 玺鶋瑣襚? ?i嘲rN?布倖儇?攊橌??嚗猝)芻矂2吟腊K湞?CK臶>鸘\?ΔF滋齢q旮T?桀?;偉 A軥v蕯朾偤佷3?е…...

顺序表(一篇带你掌握顺序表)

目录 一、顺序表是什么 1.1 概念 1.2 分类 1.3 结构 二、顺序表的基本操作 2.1 前绪准备 2.2 初始化 2.3 扩容 2.5 尾插 2.6 打印 2.7 尾删 2.8 头插 2.9 头删 2.10 在pos位置插入 2.11 删除pos位置的数据 2.12 查找 三、完整代码 3.1 Test.c文件 3.2 SeqList.h…...

【SpringCloud】SpringCloud教程之Feign实战

目录前言SpringCloud Feign远程服务调用一.需求二.两个服务的yml配置和访问路径三.使用RestTemplate远程调用(order服务内编写)四.构建Feign(order服务内配置)五.自定义Feign配置(order服务内配置)六.Feign配置日志(oder服务内配置)七.Feign调优(order服务内配置)八.抽离Feign前…...

嵌入式linux必备内存泄露检测神器

Valgrind介绍 Valgrind是一个可移植的动态二进制分析工具集,主要用于发现程序中的内存泄漏、不合法内存访问、使用未初始化的内存、不正确的内存释放以及性能问题等,可在Linux和Mac OS X等平台上使用。 Valgrind由多个工具组成,其中最常用的…...

设计模式之行为型模式

四、行为型模式 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在…...

解密 三岁的三岁到底为什么叫做三岁?

机缘 那一年,一次奇奇怪怪的挫折与一次奇奇怪怪的成长。 在学习Python的路上总觉得少了点什么,是心情?是机遇?还是力量? 都不是又都是! 缺少一个实践和记忆的平台 记性不好是硬伤 前一天学的下一秒就忘记了…...

id选择器

id选择器可以为特定的id的标签进行css美化 使用方法: 标签内设好 id值, CSS的id选择器以“#id名”来调用 注意 所有标签都有id值id属性值类似于身份证号码,在一个页面中是唯一的值,不可重复一个标签上只能有一个id属性值一个id属性…...

《科技之巅3》读书笔记

文章目录书籍信息人工智能,“吃一堑长一智”的机器人机交互,为解决“交流障碍”问题而生硬件与算法,好马还需好鞍模式创新,赋予技术新的定义云与数据共享,灵活应对信息的爆发式增长“机器人”,从电影和小说…...

18.用于大型程序的工具

文章目录用于大型程序的工具18.1异常处理18.1.1抛出异常栈展开栈展开过程中对象被自动销毁析构函数与异常异常对象18.1.2捕获异常查找匹配的处理代码重新抛出捕获所有异常的处理代码18.1.3函数try语句块与构造函数18.1.4noexcept异常说明违反异常说明异常说明的实参noexcept运算…...

mysql一主键uuid和自增的选择

文章目录 1.自增ID的优缺点1.1 优点1.2 缺点1.3 不适合以自增ID主键作为主键的情况2.UUID作为主键2.1 介绍2.2 优点2.3 缺点3.有序UUID作为主键3.1 介绍3.2 演示使用3.2.1 前提知识3.2.1.1 数据类型 - binary3.2.1.2 函数 - hex()3.2.1.3 函数 - unhex()3.2.2 数据库层3.2.3 JA…...

【EDA工具使用】——VCS和Verdi的联合仿真的简单使用

目录 1.芯片开发所需的工具环境 2.编译仿真工具 3.三步式混合编译仿真(最常用)​编辑 4.两步式混合编译仿真​编辑 5.VCS的使用 ​6.verdi的使用 1.产生fsdb文件的两种方法​编辑 1.芯片开发所需的工具环境 2.编译仿真工具 3.三步式混合编译仿真…...

【Java学习笔记】4.Java 对象和类

前言 本章介绍Java的对象和类。 Java 对象和类 Java作为一种面向对象语言。支持以下基本概念: 多态继承封装抽象类对象实例方法重载 本节我们重点研究对象和类的概念。 对象:对象是类的一个实例(对象不是找个女朋友)&#x…...

39. 实战:基于api接口实现视频解析播放(32接口,窗口化操作,可导出exe,附源码)

目录 前言 目的 思路 代码实现 需要导入的模块 1. 导入解析网站列表,实现解析过程 2. 设计UI界面 3. 设置窗口居中和循环执行 4. 注意事项 完整源码 运行效果 总结 前言 本节将类似34. 实战:基于某api实现歌曲检索与下载(附完整…...

基于灵动 MM32 微控制器的便携式血氧仪方案

基于灵动 MM32 微控制器的便携式血氧仪: - Cortex-M0() 最高主频 72MHz 可实现血氧饱和度信号采集、算法操作和 LED 显示操作 - 高性能的 1Msps 12b ADC 能对光电采样结果进行大数据量的暂存和处理,提高采样的效率并有助于对结果做高精度的计算 - 100…...

2022秋-2023-中科大-数字图像分析-期末考试试卷回忆版

今天晚上刚考完,心累,在这里继续授人以渔(仅供参考,切勿对着复习不看ppt,ppt一定要过两遍)。 注意:往年的经验贴,到此为止,全部作废,一个没考。千万不要只对着复习,SIFT没考&#x…...

【matplotlib】条形图及垂线显示小技巧 |一些有用参考帖子收集

最近在画图。一方面看论文看思路,一方面用数据跑图出论文雏形。 有些帖子写得很好,不记录的话下次还想看就只能随缘了。 帖子 博客:nxf_rabbit75 matplotlib技巧—9.共享坐标轴、创建多个subplot、调整横坐标、放置文本框、latext文字、平移…...

Go的bytes.Buffer

Go的bytes.Buffer 文章目录Go的bytes.Buffer一、bytes.Buffer 的基础知识二、bytes.Buffer类型的值,已读计数的作用三、bytes.Buffer的扩容策略四、bytes.Buffer的哪些方法会造成内容的泄露一、bytes.Buffer 的基础知识 与strings.Builder一样,bytes.Bu…...

k8s学习之路 | Day19 k8s 工作负载 Deployment(上)

文章目录1. Deployment 基础1.1 什么是 Deployment1.2 简单体验 Deployment1.3 Deployment 信息描述1.4 如何编写 Deployment2. Deployment 简单特性2.1 赋予 Pod 故障转移和自愈能力2.2 更新 Deployment2.3 回滚 Deployment2.4 暂停、恢复 Deployment 的上线过程2.5 Deploymen…...

php宝塔搭建部署实战六零导航页LyLme_Spage源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的六零导航页LyLme_Spage源码。感兴趣的朋友可以自行下载学习。 技术架构 PHP7.0 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码,宝塔添…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

react更新页面数据,操作页面,双向数据绑定

// 路由不是组件的直接跳转use client&#xff0c;useEffect&#xff0c;useRouter&#xff0c;需3个结合&#xff0c; use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…...

mcts蒙特卡洛模拟树思想

您这个观察非常敏锐&#xff0c;而且在很大程度上是正确的&#xff01;您已经洞察到了MCTS算法在不同阶段的两种不同行为模式。我们来把这个关系理得更清楚一些&#xff0c;您的理解其实离真相只有一步之遥。 您说的“select是在二次选择的时候起作用”&#xff0c;这个观察非…...