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

什么是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程序是由一组变量或是函数的外部对象组成的。函数是一个自我包含的完成一定相关功能的执行代码段。

相关文章:

什么是Linux

什么是Linux? 不知道大家是什么时候开始接触Linux,我记得我是大三的时候,那时候通过国嵌、韦东山的教学视频,跟着搭bootloader,修改内核,制作根文件系统,一步步,视频真的很简单&…...

学习笔记|定时器|STC中断|定时器时间计算|STC32G单片机视频开发教程(冲哥)|第十一集:定时器的作用和意义

文章目录 1.定时器的作用和意义定时器中断定时器是定时器和计数器的统称。 2.STC32G单片机定时器使用原理2.1 先设置功能为定时器/计数器(本质都是加法计数器)2.2、在定时器模式下,设置不分频或者12分频∶Tips:选择不分频还是12分频2.3、定时器的工作模式…...

第28节-PhotoShop基础课程-图层操作

文章目录 前言1.像素图层2.删除 Delete3.合并 Ctrl E4.盖印 Ctrl Shift Alt5.图层顺序-拖动就可以6.编组-Ctrl G 管理图层-分类存放7.锁定图层-背景图层8.不透明度9.查找图层 2.智能图层1.能保持图片放大缩小(Ctrl T)的时候不丢失分辨率2.和滤镜配合使…...

CGAL 闵可夫斯基和(Minkowski Sums)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设给定两个集合 A , B ∈ R d A,B∈R^d A,B...

Layui快速入门之第二节布局容器(固定宽度与完整宽度)

目录 一&#xff1a;固定宽度 二&#xff1a; 完整宽度 一&#xff1a;固定宽度 将栅格放入一个带有 class"layui-container" 的特定容器中&#xff0c;以便在小屏幕以上的设备中固定宽度&#xff0c;让列可控(两侧有留白效果) <!--固定宽度(两侧有留白效果)--&…...

异地容灾系统和数据仓库中数据同步的设计软件的功能模型

&#xff08; 1&#xff09;初始同步模块 该模块主要是在表进行初始同步时使用的&#xff1b;它能够根据实际需要生成物化视图 及其索引的创建语句&#xff0c;并完成表的初始同步。如果没有特别的要求&#xff0c;则调用普通初 始同步子模块进行目的端表的初始同步&#xff…...

分布式调度 Elastic-job

分布式调度 Elastic-job 1.概述 1.1什么是任务调度 我们可以思考一下下面业务场景的解决方案: 某电商平台需要每天上午10点&#xff0c;下午3点&#xff0c;晚上8点发放一批优惠券某银行系统需要在信用卡到期还款日的前三天进行短信提醒某财务系统需要在每天凌晨0:10分结算…...

第 2 章 线性表(学生健康登记表实现)

1. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值正确 */ #define INFEASI…...

第三周晨考自测(3.0)

1.获取元素的偏移量 offsetLeft和offsetTop 分别获取的是元素元素左边的偏移量和上边的偏移量 语法&#xff1a;元素对象.offsetLeft /元素对象.offsetTop 返回值&#xff1a;就是该元素对应的偏移量&#xff0c;是一个具体的数字 offsetLeft&#xff1a;该元素相对于参考…...

C++ 结构体

前文 C中的结构体是一种非常有用的数据类型&#xff0c;它允许我们将不同的变量组合在一起&#xff0c;形成一个自定义的数据结构。 结构体在C中的应用非常广泛&#xff0c;它可以用来表示和管理各种实体、对象或数据的属性。比如&#xff0c;在一个学生管理系统中&#xff0c…...

如何使用聊天GPT自定义说明

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 OpenAI ChatGPT正在席卷全球。一周又一周&#xff0c;更新不断提高您可以使用这种最先进的语言模型做什么的标准。 在这里&#xff0c;我们深入研究了OpenAI最近在ChatGPT自定义指令上发布的公告。此功能最初以测试版…...

mac pyenv无法切换python版本问题

看是zsh还是bash echo $SHELLzsh 配置到&#xff5e;/.zshrc 文件 vim ~/.zshrcexport PYENV_ROOT"$HOME/.pyenv" command -v pyenv >/dev/null || export PATH"$PYENV_ROOT/bin:$PATH" 执行 source ~/.zshrc bash vim ~/.bashrc export PYENV_R…...

API接口接入电商平台案例,采集淘宝天猫拼多多1688京东LAZADA数据按关键字搜索商品示例

按关键字搜索商品数据API接口可以让用户轻松地在海量商品中找到自己需要的商品。这个接口包括多种搜索方式&#xff0c;例如利用关键字搜索商品名称、商品描述、商品分类、商家信息等。同时&#xff0c;还可以通过不同的排序方式进行筛选&#xff0c;例如销量排行、价格排行、评…...

持安-大连万达集团零信任项目入选中国信通院2023零信任优秀案例

2023年8月25日&#xff0c;以“链接云端&#xff0c;可信而安”为主题的“2023首届SecGo云和软件安全大会”在京隆重召开。会上&#xff0c;中国信息通信研究院重磅揭晓了“安全守卫者计划”优秀案例评选结果。 零信任办公安全技术创新企业持安科技&#xff0c;与用户大连万达…...

python28种极坐标绘图函数总结

文章目录 基础图误差线等高线polar场图polar统计图非结构坐标图 &#x1f4ca;python35种绘图函数总结&#xff0c;3D、统计、流场&#xff0c;实用性拉满 matplotlib中的画图函数&#xff0c;大部分情况下只要声明坐标映射是polar&#xff0c;就都可以画出对应的极坐标图。但…...

C#编程基础(万字详解,这一篇就够了)

C#及其开发环境简介 C#概述 C#的编程功能 C#与.Net的关系 .Net C# C#的集成开发环境 Windows上编写C#程序 Linux/Mac OS上编写C#程序 运行第一个HelloWorld程序 C#基本语法 程序实例 C#基本语法 using关键字 class关键字 注释 成员变量 成员函数 实例化一个类…...

SpringBoot中自定义注解

目录 SpringBoot中自定义注解 关于注解的解释 元注解 Documented Target Retention Inherited Native 自定义注解 自定义注解与SpringBoot全局异常处理完成参数校验 约束验证器 自定义全局异常处理器 自定义注解完成数据脱敏 定义脱敏策略枚举 自定义注解 实行脱…...

《TCP/IP网络编程》阅读笔记--地址族和数据序列

目录 1--IP地址和端口号 2--地址信息的表示 3--网络字节序与地址变换 4--网络地址的初始化与分配 5--Windows部分代码案例 1--IP地址和端口号 IP 地址分为两类&#xff1a; ① IPv4 表示 4 字节地址族&#xff1b; ② IPv6 表示 16 字节地址族&#xff1b; IPv4 标准的 4 …...

【C++】可变参数模板

2023年9月9日&#xff0c;周六下午 这个还是挺难学的&#xff0c;我学了好几天... 在这里我会举大量的示例程序&#xff0c;这样可以有一个更好的理解&#xff0c; 不定期更新。 目录 推荐文章&#xff1a; 示例程序一&#xff1a;拼接字符串 示例程序二&#xff1a;求整…...

WPF Flyout风格动画消息弹出消息提示框

WPF Flyout风格动画消息弹出消息提示框 效果如图&#xff1a; XAML: <Window x:Class"你的名称控件.FlyoutNotication"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xam…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...