什么是Linux

什么是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.rhkb.cn/news/127837.html

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

相关文章

GRU门控循环单元

GRU 视频链接 https://www.bilibili.com/video/BV1Pk4y177Xg?p23&spm_id_frompageDriver&vd_source3b42b36e44d271f58e90f86679d77db7Zt—更新门 Rt—重置门 控制保存之前一层信息多,还是保留当前神经元得到的隐藏层的信息多。 Bi-GRU GRU比LSTM参数少 …

大数据Flink(七十四):SQL的滑动窗口(HOP)

文章目录 SQL的滑动窗口(HOP) SQL的滑动窗口(HOP) 滑动窗口定义:滑动窗口也是将元素指定给固定长度的窗口。与滚动窗口功能一样,也有窗口大小的概念。不一样的地方在于,滑动窗口有另一个参数控制窗口计算的频率(滑动窗口滑动的步长)。因此,如果滑动的步长小于窗口大…

10.Xaml ListBox控件

1.运行界面 2.运行源码 a.Xaml 源码 <Grid Name="Grid1"><!--IsSelected="True" 表示选中--><ListBox x:Name="listBo

0003号因子测试结果、代码和数据

这篇文章共分为四个部分:第一个部分是因子测试结果,第二个部分是因子逻辑,第三个部分是因子代码,第四个部分是整个因子测试用的数据、代码、分析结果的下载地址。 因子测试结果: 因子描述 因子属性-量价因子因子构建:计算成交量的变化率和日振幅率,计算两者在过去一定…

LASSO回归

LASSO回归 LASSO(Least Absolute Shrinkage and Selection Operator&#xff0c;最小绝对值收敛和选择算子算法)是一种回归分析技术&#xff0c;用于变量选择和正则化。它由Robert Tibshirani于1996年提出&#xff0c;作为传统最小二乘回归方法的替代品。 损失函数 1.线性回…

MySQL学习5:事务、存储引擎

事务 简介 事务是一组数据库操作的执行单元&#xff0c;它要么完全执行&#xff0c;要么完全不执行。事务是确保数据库中的数据一致性和完整性的重要机制之一。 事务具有以下四个特性&#xff08;称为ACID特性&#xff09;&#xff1a; 原子性&#xff08;Atomicity&#xf…

将 ordinals 与 比特币智能合约集成 : 第 1 部分

将序数与比特币智能合约集成&#xff1a;第 1 部分 最近&#xff0c;比特币序数在区块链领域引起了广泛关注。 据称&#xff0c;与以太坊 ERC-721 等其他代币标准相比&#xff0c;Ordinals 的一个主要缺点是缺乏对智能合约的支持。 我们展示了如何向 Ordinals 添加智能合约功…

Spring Boot 中使用 Poi-tl 渲染数据并生成 Word 文档

本文 Demo 已收录到 demo-for-all-in-java 项目中&#xff0c;欢迎大家 star 支持&#xff01;后续将持续更新&#xff01; 前言 产品经理急冲冲地走了过来。「现在需要将按这些数据生成一个 Word 报告文档&#xff0c;你来安排下」 项目中有这么一个需求&#xff0c;需要将用户…

MySQL——主从复制

简介 在实际的生产中&#xff0c;为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff0c;一般都会采用「主从复制」。 主从复制开始前有个前提条件&#xff1a;两边的数据要一样&#xff0c;主必须开启二进制日志 dump thread 线程 基于位置点从是否需要开启二进…

Codeforces Round 895 (Div. 3)

Codeforces Round 895 (Div. 3) A. Two Vessels 思路&#xff1a; 我们可以发现当在 a 拿 c 到 b 其实可以让他们差值减少 2c&#xff0c;所以对a和b的差值除以2c向上取整即可 #include<bits/stdc.h> using namespace std; #define int long long #define rep(i,a,n) …

烟感报警器单片机方案开发,解决方案

烟感报警器也叫做烟雾报警器。烟感报警器适用于火灾发生时有大量烟雾&#xff0c;而正常情况下无烟的场所。例如写字楼、医院、学校、博物馆等场所。烟感报警器一般安装于所需要保护或探测区域的天花板上&#xff0c;因火灾中烟雾比空气轻&#xff0c;更容易向上飘散&#xff0…

如何利用 Selenium 对已打开的浏览器进行爬虫

大家好&#xff01; 在对某些网站进行爬虫时&#xff0c;如果该网站做了限制&#xff0c;必须完成登录才能展示数据&#xff0c;而且只能通过短信验证码才能登录 这时候&#xff0c;我们可以通过一个已经开启的浏览器完成登录&#xff0c;然后利用程序继续操作这个浏览器&…

Redis常见命令

命令可以查看的文档 http://doc.redisfans.com/ https://redis.io/commands/ 官方文档&#xff08;英文&#xff09; http://www.redis.cn/commands.html 中文 https://redis.com.cn/commands.html 个人推荐这个 https://try.redis.io/ redis命令在线测试工具 https://githubfa…

《向量数据库》——向量数据库Milvus 和大模型出联名款AI原生Milvus Cloud

大模型技术的发展正加速对千行百业的改革和重塑,向量数据库作为大模型的海量记忆体、云计算作为大模型的大算力平台,是大模型走向行业的基石。而电商行业因其高度的数字化程度,成为打磨大模型的绝佳“战场”。 在此背景下,Zilliz 联合亚马逊云科技举办的【向量数据库 X 云计…

在FPGA上快速搭建以太网

在本文中&#xff0c;我们将介绍如何在FPGA上快速搭建以太网 &#xff08;LWIP &#xff09;。为此&#xff0c;我们将使用 MicroBlaze 作为主 CPU 运行其应用程序。 LWIP 是使用裸机设计以太网的良好起点&#xff0c;在此基础上我们可以轻松调整软件应用程序以提供更详细的应用…

Chrome 108版(64-bit 108.0.5359.125)网盘下载

还在用Selenium的朋友们注意了&#xff0c;目前Chrome的最新版是116&#xff0c;而官方的Chromedriver只支持到115版。 可惜Google不提供旧版Chrome的下载方式&#xff0c;需要旧版的很难回去了。如果真的想要旧版的Chrome&#xff0c;只能民间自救。 我在2022年12月备份了C盘…

线性代数的学习和整理21,向量的模,矩阵的模,矩阵的模和行列式比较(未完成)

目录 1 模的定义 2 向量的模是距离 2.1 向量的模的定义 2.2 向量的模的计算公式 3 矩阵的模 3.1 矩阵/向量组的模的定义 3.2 矩阵的模的公式 4 矩阵的模和行列式的关系&#xff1f; 1 模的定义 模&#xff0c;又称为范数。范数&#xff0c;是具有“长度”概念的函数。…

机器人任务挖掘与智能超级自动化技术解析

本文为上海财经大学教授、安徽财经大学学术副校长何贤杰出席“会计科技Acctech应对不确定性挑战”高峰论坛时的演讲内容整理。何贤杰详细介绍了机器人任务挖掘与智能超级自动化技术的发展背景、关键技术和应用场景。 从本质来说&#xff0c;会计是非常适合智能化、自动化的。会…

ROS2下使用TurtleBot3-->SLAM导航(仿真)RVIZ加载不出机器人模型

一、问题描述 在使用台式机进行仿真时&#xff0c;大部分例程很顺利&#xff0c;但在SLAM导航时&#xff0c;在RVIZ中却一直加载不出机器人模型&#xff0c;点击Navigation2 Goal选择目标点进行导航时&#xff0c;无响应。 启动后在RVIZ2和终端看到一个错误 按照官网的指令试…

VMware17 下载以及 配置虚拟机 一条龙全教程

前言&#xff1a;在网络安全相关方面的学习时&#xff0c;我们难免要使用虚拟机来模拟实现网络攻击或者防御&#xff0c;在这里&#xff0c;笔者就给大家分享 VMware 17 虚拟机下载安装使用的保姆级教程 目录 虚拟性软件版本推荐 下载 VMware 下载镜像 配置虚拟机 虚拟性软…