什么是Linux

news2024/11/26 10:43:13

什么是Linux?

不知道大家是什么时候开始接触Linux,我记得我是大三的时候,那时候通过国嵌、韦东山的教学视频,跟着搭bootloader,修改内核,制作根文件系统,一步步,视频真的很简单,没什么异常,但是自己就是搞不了,那个痛苦,现在都记忆犹新。现在工作五年多了,对Linux的认识还是很片面,很肤浅,很多东西看不懂,摸不透,需要持续学习。回头看之前的Linux过程,真的很陡峭,一个小白,需要搞bootloader、内核、根文件系统,太难了,哪有这样子学的,分分钟劝退大家,所以这个时候,就想通过自己对Linux的一些理解,给大家介绍一下,希望可以给大家带来一点帮助。下面通过我对Linux的理解,给大家介绍Linux的浅层面貌,更深处需要各自探讨、摸索了。

名词解释

硬件

百度百科对硬件的介绍就是计算机硬件的简称,是指计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。

我们理解它就是一个看得见摸得着的实体,各种程序可以在上面运行并得到相应结果的物理载体。

软件

软件,一系列按照特定顺序组织的计算机数据和指令的集合。看不见、摸不着的东西,需要在硬件上执行,提供特定的功能的计算机程序。软件离开硬件,啥也不是,硬件没有软件,也不过是废铁。

IP

懂网络的可能知道IP是一种网络协议,但是在半导体中,IP是指IP核心。在集成电路设计中,提供特定功能的集成电路模块,比如可以提供I2C通信功能的I2C控制器电路等。

ARM

ARM既是指ARM这家公司,也是指ARM公司提供的IP。ARM公司是全球知名半导体知识产权(IP)提供商,提供ARM IP相应的指令集,也会设计相应的处理器,将这些IP(比如ARMCortex-A53、Cortex-M3等)打包出售给各个芯片厂商。

CPU

CPU,中央处理器,主要由控制器、运算器组成,主要功能是处理指令、执行操作、处理数据。

SOC

SOC,片上系统,一般的我们理解它是各种IP的集合,比如有CPU、GPU、I2C控制器、GPIO、存储控制器等,SOC上包含了各种各种的功能,基于它进行相应的产品开发。

操作系统

什么是操作系统?首先我们需要知道操作系统是个软件程序,运行在计算机芯片上,如PC上使用的因特尔处理,嵌入式使用的板端SOC等。操作系统简单理解就是一个管理员,向下负责调度、处理SOC上的各种资源,向上提供公共服务,处理用户交互等,包括处理器管理、存储器管理、设备管理、文件管理、作业管理。我们仅介绍嵌入式操作系统,常用的Linux系统。

Linux

它是一个免费使用的类UNIX操作系统,由大大佬Linus Benedict Torvalds创建,基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。

Ubuntu

Ubuntu是Linux的一个发行版,以桌面应用为主的Linux操作系统,一般我们都是基于Ubuntu进行开发和学习。

GCC

一般是指GNU编译器套件,提供C、C++等预研的编译器,Linux开发一般使用GCC进行相应的编译开发。

设备

怎么理解设备呢?平常可以说我们的手机是一个设备,而在嵌入式开发中,板子(PCBA板)上的触摸屏、flash存储芯片、wifi芯片等也是一个设备。设备可以是真实存在的物体,也可以是需要出来的,不存在的一个物体。

驱动

嵌入式经常会听到说什么驱动、驱动。驱动实际上就是一些代码,初始化设备的代码,使设备可以正常工作的代码。

总线

总线应该比较好理解,从自来水厂迁一条管道到镇上,然后再通过各种小管道连接到各家各户。嵌入式开发中,总线有芯片内的总线,比如CPU和各种外设控制器进行数据、命令传输的总线,一个管道;也有软件层面虚拟出来的总线,虚拟上面挂载了各种设备,进行相互的通信和操作。

字符设备

字符设备是指在I/O传输过程中以字符为单位进行传输的设备,比如键盘,触摸屏等。

块设备

块设备是i/o设备中的一类,是将信息存储在固定大小的块中,每个块都有自己的地址,还可以在设备的任意位置读取一定长度的数据,例如硬盘,U盘,SD卡等。

网络设备

网络设备使用套接字来实现网数据的接受和发送。

进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程

线程(thread)是操作系统能够进行运算调度的最小单位,是独立调度和分派的基本单位。它被包含在进程之中,是进程中的实际运作单位。

在了解上述的基本名词后,那么,在深入学习之前,最起码应该先了解LInux长什么样,会提供的操作吧,下面一起看看。

初识Linux

Windows会有系统盘C盘,其他盘D、E、F等供用户使用,在Linux中,没有这样的,以Ubuntu为例,主要目录结构如下:

/				// 根目录
├── bin			// 存放可执行的二进制文件,一般我们执行的命令都会在这个文件夹
├── boot		// 启动相关的文件
├── dev			// Linux系统的设备文件,访问该目录下的文件相当于访问某个设备
├── etc			// 系统配置文件
├── home		// 系统默认的用户目录,一般我们的文件都在保存在该目录下
├── lib			// 库相关
├── lib32
├── lib64
├── root		// 系统管理员root的目录
└──usr			// 该目录下也会存在一些库和可执行文件

Linux系统中,任何的设备都是一个文件,在Linux系统中,文件有三种属性:可读®、可写(w)、可执行(x)。

实例:
-rw-rw-r-- 1 chengwei chengwei 5757 1113 19:26 什么是Linux.md

`-rw-rw-r--`一共10位,文件类型1位,文件拥有者的访问权限、文件所属组用户访问权限以及其他用户访问权限各3位,第一个 `-` 代表的是普通文件,`l`则是链接文件,`d`则是文件夹。

Linux框架

在学习Linux的过程中,给我印象最深刻的一句话就是,任何的设备都是一个文件,而Linux则是管理这些文件。

Linux驱动框架

设备驱动模型,怎么理解呢?

底层芯片各种各样,而产品的应用开发的时候也不想考虑底层的差异,所以必须要一个统一的接口对外,Linux这边就是将设备配置为文件。在软件界,遇到解决不了的问题,给它加一层。所以Linux对接应用的就是VFS(Virtual File System),通过VFS屏蔽底层的差异,应用都是使用同样的接口进行配置。而在内核中,也需要管理各种各样的设备驱动,所以内核提供一套接口,各个平台的驱动按照内核提供的接口进行注册驱动和设备,当驱动和设备一致时,则代表该硬件可用,将会注册节点透给用户层,此时用户将可以使用该设备。如果设备和驱动不一致,则代表不可用。

C语言基础

基本构成

数据类型

C的数据类型包括:整型(short、int、long、long long)、字符型(char)、实型或浮点型(单精度float和双精度double)、枚举类型(enum)、数组类型、结构体类型(struct)、共用体类型(union)、指针类型和空类型(void)。

数组

如果一个变量名后面跟着一个有数字的中括号,这个生命就是数组声明。

指针

一个变量声明时在前面使用*号,表明这是个指针型变量。该变量存储一个地址,而*则是取内容操作符,意思是取这个地址里存储的内容。

关键字

数据类型关键字

关键字作用
short修饰int,短整型数据,可省略被修饰的int
long修饰int,长整型数据,可省略被修饰的int
long long修饰int,超长整型数据,可省略被修饰的int
signed修饰整型数据,有符号数据类型
unsigned修饰整型数据,无符号数据类型
restrict用于限定和约束指针,并表明指针是访问一个数据对象的初始且唯一的方式

复杂类型关键字

关键字作用
struct结构体声明
union联合体声明
enum枚举声明
typedef声明类型别名
sizeof得到特定类型或特定类型变量的大小
inline内联函数用于取代宏定义,会在任何调用它的地方展开

存储级别关键字

关键字作用
auto指定为自动变量,由编译器自动分配及释放。通常在栈上分配。与static相反。当变量未指定时默认为auto
static指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
register指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
extern指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义
const指定变量不可被当前线程改变(但有可能被系统或其他线程改变)
volatile指定变量的值有可能会被系统或其他线程改变,强制编译器每次从内存中取得该变量的值,阻止编译器把该变量优化成寄存器变量

流程控制关键字

关键字作用
return用在函数体中,返回特定值
continue结束当前循环,开始下一轮循环
break跳出当前循环或switch结构
goto无条件跳转语句
if条件语句,后面不需要放分号
else条件语句否定分支,与if连用
switch开关语句,多重分支语句
case开关语句中的分支标记,与switch连用
default开关语句中的“其他”分支,可选

函数

C程序是由一组变量或是函数的外部对象组成的。函数是一个自我包含的完成一定相关功能的执行代码段。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++的继承以及virtual的底层实现

1.继承的基本形式 1.还是举每次讲继承都会举得一个例子:老师和学生都有人类的共同信息----姓名,性别,身份证等等,而学生有学工号,课表。老师有上班时间等等,所以在类中就有了继承这一说,子类继…

UMA 2 - Unity Multipurpose Avatar☀️五.如何使用别人的Recipe和创建自己的服饰Recipe

文章目录 🟥 使用别人的Recipe1️⃣ 导入UMA资源效果展示2️⃣ 更新Library3️⃣ 试一下吧🟧 创建自己的服饰Recipe1️⃣ 创建自己的服饰Recipe2️⃣ 选择应用到的Base Recipe3️⃣ 指定显示名 / 佩戴位置 / 隐藏部位4️⃣ 给该服饰Recipe指定Slot / Overlay🚩 赋予Slot�…

【洛谷 P1105】平台 题解(结构体排序+枚举)

平台 题目描述 空间中有一些平台。给出每个平台的位置,请你计算从每一个平台的边缘落下之后会落到哪一个平台上。注意,如果某两个平台的某个两边缘横坐标相同,物体从上面那个平台落下之后将不会落在下面那个平台上。平台可能会重叠。 如果…

springboot 异常 #Class path contains multiple SLF4J bindings.警告解决

1.异常现象 启动 Maven 项目时,抛出警告信息: 2.排查分析 从报出来的警告信息来看,大致意思是,pom.xml 引入的包 slf4j-log4j12-1.7.20.jar 和包 logback-classic-1.1.7.jar 中,都找到了 /org/slf4j/impl/StaticLogger…

Arrays.copyOf 和System.arraycopy?深拷贝和浅拷贝?

Arrays.copyOf 和 System.arraycopy 1)二者有何不同? System.arraycopy()方法 System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); 需主动创建目标对象dest可定义起始元素,灵活拷贝元素比较重要的一点&…

TCP IP网络编程(五) 基于TCP的服务器端、客户端 (补充)

文章目录 回声客户端的完美实现回声客户端出现的问题回声客户端问题解决方法 TCP原理TCP套接字中的I/O缓冲TCP内部工作原理1:与对方套接字的连接TCP内部工作原理2:与对方主机的数据交换TCP内部工作原理3:断开与套接字的连接 总结 回声客户端的…

CRM软件管理系统的基本功能

CRM管理系统是企业运营的重要工具,它可以帮助企业管理客户关系,提升销售效率,大幅提高客户转化率,实现业绩增长。那么,CRM管理系统一般包含哪些功能呢?下面我们就来说说。 1、销售自动化 销售自动化顾名思…

【面试专题】Spring篇②

📃个人主页:个人主页 🔥系列专栏:Java面试专题 目录 1.spring-bean的循环依赖 2.springMVC执行流程 3.Springboot自动配置原理 4.Spring框架常见的注解(Spring,SpringMVC,SpringBoot&#x…

Ubuntu编译运行socket.io

本篇文章记录一下自己在ubuntu上编译运行socket.io的过程,客户端选用的是socket.io的c的库,编译起来倒不难,但是说到运行的话,对我来说确实是花了点功夫。毕竟程序要能运行起来才能更方便地去熟悉代码,因此今天我就记录…

MySQL——日志

日志的作用 1.用来排错 2.用来做数据分析 3.了解程序的运行情况,是否健康--》了解MySQL的性能,运行情况 分类 mysql很多有类型的日志,按照组件划分的话,可以分为 服务层日志 和 存储引擎层日志 : - 服务层…

数据治理-数据建模和设计

是什么? 数据建模是发现、分析和确定数据需求的过程,用一种称为数据模型的精确形式表示和传递这些数据需求。数据建模是数据管理的一个重要组成部分。建模过程中要求组织发现并记录数据组合的方式。 数据可以采用多种不同的模式来表示,其中最…

【广州华锐互动】电厂三维数字孪生大屏的功能和优势

在工业互联网的背景下,电厂三维数字孪生大屏系统正在逐渐成为电力行业的重要技术。通过创建电厂的虚拟模型,这个数字孪生系统可以实现对实际电厂的实时监控,预测维护需求,优化运营效率,甚至在某些情况下,能…

CrossEntropyLoss() 和 nn.BCEWithLogitsLoss() 举例说明区别

CrossEntropyLoss() 通常用于多分类任务,它接受一个包含类别标签的张量作为目标值,并且假设每个样本只属于一个类别。在多分类任务中,模型的最后一层输出是一个概率分布,表示每个类别的概率。CrossEntropyLoss() 计算模型输出与目…

微信“刷掌支付”上线,扫手就可以付款!你知道怎么开通了吗?

不用扫码!不用刷卡!隔空感应! 刷掌就能支付 没错! 新科技来咯~ 刷 掌 早在今年5月,微信刷掌支付正式面世,目前已应用于交通、健身、校园、零售、餐饮、办公、共享充电等多个场景,如北京地铁…

vue3+ts项目打包后的本地访问

注意:打包之后不可直接点击html访问,需要给项目安装本地服务! 1、安装servenpm i -g serve 2、打包项目npm run build 生成dist文件夹 3、本地访问serve dist 运行service dist之后的控制台 可复制下方的地址运行打包后的项目,运行…

Spring系列文章:Spring中的设计模式

一、简单⼯⼚模式 BeanFactory的getBean()⽅法,通过唯⼀标识来获取Bean对象。是典型的简单⼯⼚模式(静态⼯⼚模 式); 二、⼯⼚⽅法模式 FactoryBean是典型的⼯⼚⽅法模式。在配置⽂件中通过factory-method属性来指定⼯⼚⽅法&a…

英语单词(二)

1.int:整形 2.char:字符型 3.scanner:接受输入,扫描器 4.integer:整数,整形 5.type:类型 6.string:字符串类型 7.double:双精度浮点型

OpenRoads地形模型添加(增补)地形点

创建三维点,将创建的点对象添加到现有地形模型。 在ORD建模工作流: 地形、分析、点、分析点,在需要添加点的位置读出地模的高程(图1); 图1 几何、平面、点添加高程点,特征设为地形随机点、高…

双线性插值以及计算

参考视频:图像处理-双线性插值_哔哩哔哩_bilibili 双线性插值 双线性插值是一种常用的图像处理和计算机图形学技术,用于在离散像素网格上平滑地估算介于两个相邻像素之间的数值。这种插值方法通常用于图像放大、旋转和变换等操作,以改善图像…

操作系统 第二章 进程管理:进程与线程、处理机调度

目录 1.进程与线程 1.1进程的概念、组成、特征 1.1.1概念 1.1.2组成 进程控制块(PCB) 程序段 数据段 1.1.3特征 1.2进程的状态与转换 1.2.1进程的五种状态 1.2.2进程的状态转换 1.3进程控制 1.3.1如何实现原语的“原子性” 1.3.2进程的创建…