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

news/2024/5/2 13:36:36/文章来源:https://blog.csdn.net/thexue/article/details/129340486

小白的疑惑

在我决定从事嵌入式(应用层)方面的工作时,我查询了大量资料该如何学习,几乎所有观点不约而同的都指向了学习好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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_77598.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析

GEE开发之ERA5(气温、降水、压力、风速等)数据获取和分析1.ERA5介绍2.初始ERA5数据2.1 DAILY代码2.2 MONTHLY代码3.遥感影像查看(DAILY之mean_2m_air_temperature)4.逐日数据分析和获取(以mean_2m_air_temperature为例)5.逐月数据…

[神经网络]Swin Transformer网络

一、概述 Swin Transformer是一个用了移动窗口的层级式Vision Transformer。 在图像领域,Transformer需要解决如下两个问题: ①尺度问题:同一语义的物体在图像中有不一样的尺度。(大小不同) ②Resolution过大:若以像素点作为单位&…

呼吸机方案 以 MM32F3270 为主控板,MM32SPIN05PF 为电机控制主控

呼吸机的作用是让氧气进入肺部并排出二氧化碳,帮助病患顺利呼吸。呼吸机连接一条管子到患者的嘴或鼻子,氧气量可以通过监视器加以控制。 基于灵动微控制器的呼吸机,以 MM32F3270 为主控板,MM32SPIN05PF 为电机控制主控&#xff1…

python 操作word库docx 增强接口

前言用python 的docx 库操作word完成一些自动化的文档生成工作,但有时候会遇到docx库提供的操作无法直接满足业务上的需求,需要对其进行一些扩展。接口完善实现在指定的文字后面插入指定的文字任务:以下示例需要在文档中的所有 "人生苦短…

【SpringMVC】springMVC介绍

参考资料 视频资料 03_尚硅谷_SpringMVC_SpringMVC简介_哔哩哔哩_bilibili 笔记资料 第一节 SpringMVC概述 (wolai.com)链接:https://pan.baidu.com/s/1A7BX2TNfbGTpYene4x3Mew 提取码:a8d5 一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思…

js正则表达式以及元字符

0、常用的正则表达式规则 手机号 const reg /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;密码 const reg /^[a-zA-Z0-9]{6,20}$/;验证码 const reg /^\d{6}$/;1、正则表达式的介绍与使用 正则表达式(Regular Expression)是用于匹配字符串中字符组合…

用Python Flask为女朋友做一个简单的网站(附可运行的源码)

🌟所属专栏:献给榕榕🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该专栏系为女友准备的,里面会不定时发一些讨好她的技术作品,感兴趣的小伙伴可以关注一下~👉文章简介…

docker安装即docker连接mysql(window)

一 安装docker 1.什么是docker Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 2.WSL2 WSL,即Windows Subsystem on Linux,中…

【CV学习笔记】之ncnnFastDet多线程c++部署

1、前言 ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型,如pytorch、tensorflow、onnx等,以及多种硬件后端,如x86、arm、riscv、mips、vulkan等。 ncnn项目地址:https://github.com/Tencent/ncnn FastDet是设计…

RK3568触摸屏驱动调试总结

硬件电路分析 RK3568 CPU通过I2C与触控板外设wdt87xx连接。 首先要根据电路图获取如下I2C的信息: 项目Value接在哪个I2Ci2c1I2C 寄存器地址0x2cHID 地址0x20中断B5 1、接在哪个I2C 如图,1接在I2C1: 2、使用哪个GPIO引脚接收触控板的中断 如图&#xf…

Buuctf Younger-drive 题解

目录 一.查壳 二.运行缺少dll 三.主函数 四.hObject线程 五.Thread线程 六.judge函数 七.解题脚本 这题的关键在于了解一定的线程相关知识 一.查壳 32位带壳,用upx脱壳 二.运行缺少dll 后续尝试了各种方法修复dll但是还是运行不了 值得一提的是脱壳后的程序不能动态调试…

MySql启动错误(Mac系统 安装 mysql-8.0.32-macos13-arm64 后每次点击启动 无法启动) --- 已解决

MySql启动的时候: 立即变红! 查看日志如下: 2023-03-04T14:18:01.089671Z 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.32) MySQL Community Server - GPL. 2023-03-04T14:18:10.304169Z 0 [System] [MY-010116] [Server]…

HiveSQL一天一个小技巧:如何精准计算非连续日期累计值【闪电快车面试题】

0 需 求稀疏字段累计求和问题1 问题分析根据图片中数据变换的形式,可以看出是根据字段term补齐数据中缺失的日期,term为连续日期的个数,当为12时,表明由2018-12-21到2019-01-02连续日期个数为12,当补齐日期后&#xff…

计算机网络的166个概念你知道几个 第四部分

HTML:HTML 称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的 Internet 资源连接为一个逻辑整体。HTML 文本是由 HTML 命令组成的描述性文本,HTML 命令可以说…

【LeetCode每日一题】——605.种花问题

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 贪心算法 二【题目难度】 简单 三【题目编号】 605.种花问题 四【题目描述】 假设有一个很长…

K8S 实用工具之二 - 终端 UI K9S

开篇 📜 引言: 磨刀不误砍柴工工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》 像我这种,kubectl 用的不是非常溜,经常会碰到以下情况: 忘记命令,先…

BUU [ZJCTF 2019]Login

这是一道让我感觉很淦的题,整一天了才大致了解了来龙去脉 开始: 首先丢到虚拟机checksec一下看看有啥保护措施: 看到开了Canary,就已经感觉不妙了,接着丢到IDA里看看啥情况 一看,是令人痛苦的c风格的代码…

LeetCode-63. 不同路径 II

题目来源 63. 不同路径 II 递归 class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int row obstacleGrid.length-1;int col obstacleGrid[0].length-1;return process(row,col,0,0,obstacleGrid);}private int process(int row ,int col,int i…

Cesium三维数据格式以及生产流程详解(glb,osgb,obj,bim,ifc)等

最近收到私信问我在cesium上展示的一些三维数据是如何生产和处理的,这篇文章就给大家一次性讲个透彻。 首先我们来做做分类。市面上能接触到的,常见的,cesium上支持展示的三维数据大致分为以下几种: 1.倾斜摄影(osgb,obj) 2.点云数据(las,pts) 3.手工模型(gltf,…

【SpringCloud】SpringCloud详解之Eureka实战

目录前言SpringCloud Eureka 注册中心一.服务提供者和服务消费者二.需求三.搭建Eureka-Server四.搭建Eureka-Client(在服务提供者配置:用户订单)前言 微服务中多个服务,想要调用,怎么找到对应的服务呢? 这里有组件的讲解 → SpringCloud组件…