深入解析嵌入式Linux系统架构:从Bootloader到用户空间 - 结合B站视频教学

news2025/4/18 8:19:28


B站视频链接,请多多关注本人B站
📌 Yocto项目实战教程:第二章 视频讲解


在这里插入图片描述

目录

  • 第2章 Linux系统架构
    • 2.1 GNU/Linux
    • 2.2 Bootloader
    • 2.3 内核空间
    • 2.4 用户空间
  • 总结

第2章 Linux系统架构 {#linux系统架构}

嵌入式Linux系统是Linux内核的精简版本,广泛应用于物联网设备、工业控制、消费电子等领域。其核心架构由**内核空间(Kernel Space)用户空间(User Space)**构成,两者通过系统调用接口交互。本章将深入分析其关键组件,包括引导加载程序(Bootloader)、内核、文件系统及用户空间组件,为后续学习Yocto项目奠定基础。

系统架构总览

Linux系统的核心设计遵循权限隔离原则

  • 内核空间:拥有最高权限,直接管理硬件资源(如CPU、内存、设备驱动)。

  • 用户空间:运行用户程序,通过系统调用访问内核功能,权限隔离保障系统安全。

    在这里插入图片描述

图2-1:Linux系统架构示意图


2.1 GNU/Linux

2.1.1 GNU/Linux概述

GNU项目始于1984年,旨在构建完全自由的操作系统。然而,其最初的内核GNU Hurd因开发缓慢和技术复杂性未能普及。1991年,Linus Torvalds开发了Linux内核,其快速发展和高度兼容性使其成为GNU项目的理想选择。最终,GNU/Linux操作系统诞生,成为现代开源生态的基石。

2.1.2 Linux系统架构

Linux架构分为两部分:

  1. 内核空间
    • 功能:进程调度、内存管理、设备驱动、文件系统管理、网络通信。
    • 权限:直接访问硬件,执行特权指令。
  2. 用户空间
    • 功能:运行应用程序(如GUI、Shell、服务进程)。
    • 权限:通过系统调用请求内核服务,无法直接操作硬件。

关键设计哲学:内核与用户空间的隔离确保了系统的稳定性。即使应用程序崩溃,内核仍可保持运行。


2.2 Bootloader

2.2.1 Bootloader启动流程

Bootloader是系统启动的第一阶段程序,负责初始化硬件并加载操作系统。其流程分为四步:

  1. CPU上电:执行ROM中的初始代码(如BIOS/UEFI),完成基础硬件初始化。
  2. Bootloader第一阶段:初始化内存控制器,为加载内核做准备。
  3. Bootloader第二阶段:从存储介质(如Flash、SD卡)加载内核和文件系统到内存。
  4. 内核执行:跳转到内核入口地址,移交系统控制权。

在这里插入图片描述

图2-2:Linux系统加载流程

2.2.2 常用Bootloader对比
Bootloader支持的架构特点Yocto支持
U-BootARM、MIPS、x86等嵌入式首选,高度可定制支持
GRUBx86、UEFI多系统引导,桌面/服务器适用支持
bareboxARM、MIPS轻量化设计,类似U-Boot支持
2.2.3 U-Boot:嵌入式系统的引导核心
  • 核心特性
    • 多架构支持(ARM、RISC-V等)。
    • 网络引导(TFTP、NFS),便于远程调试。
    • 命令行接口(CLI),支持动态配置启动参数。
  • 应用场景
    • 嵌入式设备启动Linux内核或Android系统。
    • 通过U-Boot脚本实现自动化测试。
# U-Boot命令行示例:设置内核启动参数
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2
bootm 0x82000000
2.2.4 GRUB:通用系统的引导标准
  • 核心特性
    • 支持多操作系统引导(Linux、Windows、macOS)。
    • 模块化设计,动态加载文件系统驱动。
    • 配置文件(grub.cfg)支持条件逻辑和主题定制。
  • 优势
    • 兼容UEFI固件,适用于现代服务器和PC。
    • 支持加密分区和LVM存储管理。

2.3 内核空间

2.3.1 Linux内核:系统的核心引擎
  • 核心功能

    • 硬件抽象:通过设备驱动管理CPU、内存、外设。
    • 资源调度:进程调度器(如CFS)公平分配CPU时间片。
    • 安全隔离:通过虚拟内存机制防止进程越权访问。
  • 内核版本管理

    版本类型特点适用场景
    稳定版(Stable)经过全面测试,修复已知漏洞生产环境
    长期支持版(LTS)提供2-6年维护企业级嵌入式系统
    主线版(Mainline)包含最新功能,未充分测试开发者验证新特性
2.3.2 控制硬件资源:内核的四大支柱
  1. 设备驱动
    • 功能:将硬件操作抽象为统一接口(如read()/write())。
    • 示例:网卡驱动处理数据包收发,GPU驱动渲染图形界面。
  2. 中断处理
    • 机制:硬件中断触发上下文切换,优先处理高优先级任务。
    • 应用:实时系统(如工业机器人)依赖低延迟中断响应。
  3. I/O管理
    • 优化:I/O调度算法(如CFQ、Deadline)减少磁盘寻道时间。
    • 技术:DMA(直接内存访问)释放CPU负载,提升吞吐量。
  4. 内存管理
    • 虚拟内存:通过MMU实现物理地址到虚拟地址的映射。
    • 内存保护:用户进程无法直接访问内核空间内存。
2.3.3 服务用户空间:内核的桥梁作用
  • 系统调用接口

    • 功能:提供300+系统调用(如open()fork())。
    • 示例:mmap()实现内存映射文件,提升I/O效率。
  • 进程管理

    • 调度策略:CFS(完全公平调度器)确保多任务公平性。
    • 实时扩展:RT-Preempt补丁支持微秒级任务响应。
  • 文件系统

    • 抽象层:VFS(虚拟文件系统)统一EXT4、XFS等接口。
    • 特性:日志功能(Journaling)防止数据丢失。
  • 网络子系统

    • 协议栈:TCP/IP实现可靠数据传输,QoS保障关键流量。
    • 安全机制:Netfilter框架支持防火墙和NAT功能。

    在这里插入图片描述

图2-3:用户空间与内核空间交互


2.4 用户空间

2.4.1 根文件系统:系统启动的基石
  • 目录结构:遵循FHS标准,关键目录包括:

    目录功能
    /bin基础命令(如lscp
    /etc配置文件(如网络设置、服务启动项)
    /lib共享库(如libc.so
    /dev设备节点(如/dev/sda1
  • 定制化:嵌入式系统常使用BusyBox替换GNU工具链,减少存储占用。

2.4.2 标准C库:开发者与内核的纽带
  • 核心作用
    • 封装系统调用,提供fopen()printf()等高级接口。
    • 优化性能(如缓冲区管理减少上下文切换开销)。
  • 实现对比
    库名称特点适用场景
    glibc功能全面,兼容性强通用Linux系统
    musl轻量化,静态链接优势嵌入式/容器环境
2.4.3 系统共享库:代码复用的艺术
  • 动态链接
    • 优点:减少内存占用,支持热更新。
    • 示例:libc.so被多个进程共享,无需重复加载。
  • 关键库
    • libm:数学运算(如三角函数、矩阵计算)。
    • libpam:可插拔认证模块(支持LDAP、指纹识别)。
2.4.4 init进程:用户空间的起点
  • 核心功能
    • 启动系统服务(如网络管理、日志守护进程)。
    • 管理进程生命周期(如孤儿进程回收)。
  • 实现方案
    init系统特点
    SysVinit简单可靠,脚本按顺序执行
    systemd并行启动,依赖关系自动解析
# systemd服务管理示例
systemctl start nginx.service
systemctl enable docker.service
2.4.5 窗口管理系统:图形界面的引擎
  • X11协议
    • 架构:客户端-服务器模型,支持远程显示。
    • 缺点:协议冗余,合成效率低。
  • Wayland
    • 优势:直接合成窗口,减少中间层开销。
    • 应用:Fedora、Ubuntu已默认支持Wayland。

在这里插入图片描述

图2-5:窗口管理系统架构


总结

Linux系统通过内核空间用户空间的协作,实现了硬件资源的高效管理和用户程序的稳定运行。从Bootloader的硬件初始化,到内核的进程调度,再到用户空间的应用程序,每一层都扮演着不可替代的角色。理解这些组件的设计原理和交互机制,是定制嵌入式Linux系统的关键基础。后续章节将结合Yocto项目,深入探讨如何优化和裁剪这些组件以满足特定需求,例如:

  • 如何为ARM设备编译最小化内核?
  • 如何通过Yocto定制根文件系统?
  • 如何选择适合的init系统和C库?

通过掌握这些知识,开发者能够构建出高性能、高可靠性的嵌入式Linux解决方案。


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

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

相关文章

Vue.js组件安全开发实战:从架构设计到攻防对抗

目录 开篇总述:安全视角下的Vue组件开发新范式 一、Vue.js组件开发现状全景扫描 二、安全驱动的Vue组件创新架构 三、工程化组件体系构建指南 四、深度攻防对抗实战解析 五、安全性能平衡策略 结语:安全基因注入前端开发的未来展望 下期预告&…

质因数之和-蓝桥20249

题目&#xff1a; 代码&#xff1a;无脑直接根据题目&#xff0c;一步步操作就行 #include <iostream> using namespace std;int gcd(int a,int b){if(b0) return a;return gcd(b,a%b); }bool exist_gcd(int a,int b){if(gcd(a,b)1) return false;return true; }bool is…

《栈区、堆区和静态区:内存管理的三大支柱》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、栈区&#xff08;Stack&#xff09;&#xff08;一&#xff09;栈区的定义&#xff08;二&#xff09;栈区的特点&#xff08;三&#xff09;栈区的使用…

今日行情明日机会——20250411

今天缩量&#xff0c;上方压力依然在&#xff0c;外围还在升级&#xff0c;企稳还需要时日。 2025年4月11日A股涨停主要行业方向分析 一、核心主线方向 芯片&#xff08;半导体&#xff09; • 涨停家数&#xff1a;24家&#xff08;当日最强方向&#xff09;。 • 驱动逻辑&…

【Linux】TCP_Wrappers+iptables实现堡垒机功能

规划 显示jumpserver的简单功能&#xff0c;大致的网络拓扑图如下 功能规划 & 拓扑结构 JumpServer&#xff08;堡垒机&#xff09;主要功能&#xff1a; 对访问目标服务器进行统一入口控制&#xff08;例如 nginx、mysql、redis&#xff09;。使用 iptables 做 NAT 转…

ssh 登录报错集合(FQA)

1、使用root登录失败&#xff08;远程主机不允许root登录&#xff09; 问题&#xff1a;通过 ssh 连接远程主机&#xff08; ubuntu &#xff09;时报错&#xff0c;Permission denied 如下&#xff1a; 解决方法&#xff1a;确认root的登录密码没错&#xff0c;且可以正常与远…

使用Mybatis时在XML中SQL高亮显示的方法

如图所示&#xff0c;上方的SQL代码很像是一个字符串&#xff0c;那么如何把上方的SQL改成和下方一样的SQL,使得IDEA可以识别SQL方言呢&#xff1f; 1.选中SQL中的一部分代码&#xff0c;此时左侧会出现一个黄色的灯泡图案&#xff0c;点击2.选择这个注入语言或者引用

机场跑道异物检测数据集VOC+YOLO格式33793张31类别

数据集分辨率都是300x300,都是贴近地面拍摄&#xff0c;具体看图片 据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;33793 标注数量(xml文件…

掌握C语言文件操作:从理论到实战指南

文件操作是C语言编程中不可或缺的一部分&#xff0c;它使得程序能够持久化存储数据&#xff0c;并在需要时高效读写。本文将从基础概念到实战技巧&#xff0c;系统讲解C语言文件操作的核心知识点&#xff0c;并结合代码示例帮助读者深入理解。 一. 为什么需要文件操作&#xf…

在 Linux 上安装 MongoDB Shell

1. 下载 MongoDB Shell Download | MongoDB wget https://downloads.mongodb.com/compass/mongosh-2.5.0-linux-x64.tgz 2. tar -zxvf mongosh-2.5.0-linux-x64.tgz 3. copy 命令 sudo cp mongosh /usr/local/bin/ sudo cp mongosh_crypt_v1.so /usr/local/lib/ 4. …

数据结构-复杂度详解

前言&#xff1a;大家好&#xff01;本文带来的是数据结构-复杂度的讲解&#xff0c;一起来看看吧&#xff01; 1.算法的时间复杂度和空间复杂度 1.1算法的效率 复杂度&#xff1a;衡量一个算法的好坏&#xff08;效率&#xff09;&#xff0c;从两个维度衡量&#xff0c;时…

安宝特新闻丨Vuzix Core™波导助力AR,视角可调、高效传输,优化开发流程

Vuzix Core™ 光波导技术 近期&#xff0c;Vuzix Core™光波导技术赋能AR新视界&#xff01;该系列镜片支持定制化宽高比调节及20至40视场角范围&#xff0c;可灵活适配各类显示引擎。通过创新的衍射光波导架构&#xff0c;Vuzix Core™实现了光学传输效率与图像质量的双重突破…

【SQL】常见SQL 行列转换的方法汇总 - 精华版

【SQL】常见SQL 行列转换的方法汇总 - 精华版 一、引言二、SQL常见的行列转换对比1. 行转列 Pivoting1.1 ​​CASE WHEN 聚合函数​​1.2 ​​IF 聚合函数​​1.3 ​​PIVOT操作符​​ 2.列转行 Unpivoting2.1 UNION ALL​​2.2 ​​EXPLODE函数&#xff08;Hive/Spark&#…

【原创】vue-element-admin-plus完成确认密码功能,并实时获取Form中表单字段中的值

前言 我第一句就想说&#xff1a;vue-element-admin-plus真是个大坑货&#xff01;就一个确认密码功能都值得我单开一页博客来讲这么一个简单的功能 布局和代码 布局如图所示&#xff0c;我需要密码和确认密码&#xff0c;确认密码需要和密码中的内容一致&#xff0c;不然会返…

MySQL---数据库基础

1.数据库概念 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 数据库存储介质&#xff1a; 1.磁盘 2.内存 为了解决上述问题&#xff0c;设计出更加利于管理数据的东西 —— 数据库。…

leetcode68.左右文本对齐

思路源自 leetcode-字符串篇 68题 文本左右对齐 难度高的模拟类型题目&#xff0c;关键点在于事先知道有多少单词要放在本行并且还要知道本行是不是最后一行&#xff08;最后一行需要全部单空格右对齐&#xff0c;不是最后一行就空格均摊&#xff09;&#xff0c;非最后一行的空…

若依微服务集成Flowable仿钉钉工作流

项目简介 本项目工作流模块集成在若依项目单独一个模块&#xff0c;可实现单独运行部署&#xff0c; 前端采用微前端&#xff0c;嵌入在若依的前端项目中。因博主是后端开发&#xff0c;对前端不是太属性&#xff0c;没将工作流模块前端代码移到若依前端。下面贴上代码工程结构…

MySQL 架构设计:数据库的“城市规划指南“

就像一座完美城市需要精心的规划才能高效运行&#xff0c;一个优秀的 MySQL 系统也需要精心的架构设计才能支撑业务的发展…让我们一起探索 MySQL 的"城市规划"&#xff0c;学习如何设计一个既高效又稳定的数据库王国&#xff01; 什么是 MySQL 架构设计&#xff1f…

【从0到1学MybatisPlus】MybatisPlus入门

Mybatis-Plus 使用场景 大家在日常开发中应该能发现&#xff0c;单表的CRUD功能代码重复度很高&#xff0c;也没有什么难度。而这部分代码量往往比较大&#xff0c;开发起来比较费时。 因此&#xff0c;目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国…

依靠视频设备轨迹回放平台EasyCVR构建视频监控,为幼教连锁园区安全护航

一、项目背景 幼教行业连锁化发展态势越发明显。在此趋势下&#xff0c;幼儿园管理者对于深入了解园内日常教学与生活情况的需求愈发紧迫&#xff0c;将这些数据作为提升管理水平、优化教育服务的重要依据。同时&#xff0c;安装监控系统不仅有效缓解家长对孩子在校安全与生活…