什么是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.mzph.cn/news/75243.shtml

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

相关文章

两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送

本套模板非常适合生活类,两性类,减肥类等等类型的网站,这类型网站比较好做流量,因为客户群体众多, 可以自行改内容为其他类型网站模板总体非常简洁漂亮,配色合理,视觉舒服,并且配合…

HarmonyOS实现几种常见图片点击效果

一. 样例介绍 HarmonyOS提供了常用的图片、图片帧动画播放器组件,开发者可以根据实际场景和开发需求,实现不同的界面交互效果,包括:点击阴影效果、点击切换状态、点击动画效果、点击切换动效。 相关概念 image组件:图片…

IP175LLF基本参数和引脚图

特性 宽工作温度范围IP175LLF(0C至70C) IP175LLFI(-40C至85C)内置5个MAC和4个PHY 每个端口可配置为10base-t、100Base-TX 最多2K个MAC地址支持自极性10Mbps 汽车MDI-MDIX 支持1个MII/RMII端口Layer2-4多字段分类器 支持8-MultiField输入支持交通政策支持多字段过滤器 支…

静态链表处理

静态链表是指使用数组来表示节点。在C中,可以使用数组来创建静态列表,其中每个元素都有固定的位置和索引。可以通过下标寻址的方式来访问和操作列表中的元素。 单向列表: struct linkednode{int data;int next; }node[N]; 双向链表&#x…

K8S1.23.6版本详细安装教程以及错误解决方案(包括前置环境,使用部署工具kubeadm来引导集群)

准备工作(来自官方文档) 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令。每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存&#xf…

HJ23 删除字符串中出现次数最少的字符

描述 实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。 数据范围:输入的字符串长度满足 1≤n≤20 ,保…

vue使用wangEditor

vue版本2.0;editor5.1.23版本;editor-for-vue:1.0.2版本 api文档入口 效果图 点击查看如何封装 安装步骤入口 npm install wangeditor/editor --savenpm install wangeditor/editor-for-vue --save代码(未封装过的)…

Layui快速入门之第三节栅格布局

目录 一:栅格布局的基本概念 二:栅格布局规则 三:始终等比例水平排列案例 四:响应式规则 五:移动设备、桌面端的组合响应式展现案例 六:移动设备、平板、桌面端的复杂组合响应式展现案例 七&#xf…

day35 线程

程序:是为了完成特定的任务,用某种语言编写的一组有序指令的集合,是一段静态的代码 进程:是程序的一次执行过程 线程:线程是进程中的一个执行单元 线程是调度和执行的单位 处理器和线程间的关系 创建线程(重点) 创建…

大数据课程L5——网站流量项目的实时业务系统搭建

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握网站流量项目的 Flume—>Kafka 连通; ⚪ 掌握网站流量项目的实时业务系统搭建; 一、Flume—>Kafka 连通 1. 实现步骤 1. 启动三台服务器。 2. 启动 Zookeeper 集群。 执行指…

2023国赛 B题论文 基于多波束测深技术的海洋探测建模与分析

因为一些不可抗力,下面仅展示小部分论文,其余看文末 一、问题重述 1.1 问题背景 海洋测深是测定水体深度与海底地形的重要任务,有两种主要技术:单波束测深与多波束测深。单波束适用于简单任务,但多波束可提供更精确…

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献 1 题目 1.1 问题背景 多波束测深系统是利用声波在水中的传播特性来测量水体深度的技术,是在单波束测深的基础上发展起来的,该系统在与航迹垂直的平面内一次能发射出数十个乃至上百个…

【C刷题】day1

一、选择题 1.正确的输出结果是 int x5,y7; void swap() { int z; zx; xy; yz; } int main() { int x3,y8; swap(); printf("%d,%d\n",x, y); return 0; } 【答案】: 3,8 【解析】: 考点: &#xff…

Linux DirtyPipe权限提升漏洞 CVE-2022-0847

Linux DirtyPipe权限提升漏洞 CVE-2022-0847 漏洞描述 CVE-2022-0847-DirtyPipe-Exploit CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而可将普通权限的用户提升到特权…

(其他) 剑指 Offer 67. 把字符串转换成整数 ——【Leetcode每日一题】

❓ 剑指 Offer 67. 把字符串转换成整数 难度:中等 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为…

Mybatis复杂查询及动态SQL

文章目录 一. 较复杂的查询操作1. 参数占位符#{}和${}2. SQL注入3. like查询4. resultType与resultMap5. 多表查询5.1. 一对一表映射5.2. 一对多表映射 二. 动态SQL1. if标签2. trim标签3. where标签4. set标签5. foreach标签 本篇中使用的数据表即基础映射类都是基于上一篇博客…

【C++进阶】多态

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

Unity实现2D游戏跟随摄像机(平滑移动)

文章目录 玩家角色脚本字段跟随逻辑 完整代码其他相关文章连接 玩家角色 首先创建一个可用的玩家角色,写好移动逻辑,如果要使用在Unity商店中购买的资源,可以点击Window菜单栏> Package Manager选项,来打开Package Manager窗口…

应急响应-Windows挖矿实战

0x00 主机表现 windows主机cpu拉满,主机卡顿,初步判断为中了挖矿病毒 0x00 处置 通过cpu拉满状态,定位初步的进程文件, 通过进程得到的文件上传沙箱,结果显示为恶意文件, 定位到文件夹, 存…

【C++ Core Guidelines解析】深入理解现代C++的特性和原理

文章目录 👨‍⚖️《C Core Guidelines解析》的主要观点👨‍🏫《C Core Guidelines解析》的主要内容👨‍💻作者介绍 🌸🌸🌸🌷🌷🌷💐&a…