Linux 系统移植(一)-- 系统组成
参考资料:
- linux系统移植篇(一)—— linux系统组成
- 【野火Linux移植篇】1-uboot初识与编译/烧录步骤
文章目录
- 一、linux系统组成
- 二、Uboot
- 三、Linux内核
- 四、设备树
本篇为Linux系统移植系列的第一篇文章,介绍了一个完整可运行的Linux系统由哪些部分组成,每个部分的作用是什么。
一、linux系统组成
一个完整的linux系统,通常包含了bootloader、kernel、设备树以及根文件系统。
-
bootloader是在操作系统运行之前运行的一段小程序,主要负责把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行。
-
Linux 内核是操作系统的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。
-
设备树是一种描述硬件的数据结构,它把这些硬件设备的信息, 而这个文件,就是Device Tree(设备树),设备树包括设备树源码(Device Tree Source,DTS)文件、 设备树编译工具(Device Tree Compiler,DTC)与二进制格式设备树(Device Tree Blob,DTB), DTS包含的头文件格式为DTSI,其关系如下图所示:

Uboot和Linux不能直接识别DTS文件, 而DTB可以被内核与BootLoader识别解析,通常在制作NAND Flash、SD Card启动镜像时, 通常会为DTB文件留下一部分存储区域以存储DTB,在BootLoader启动内核时,会先读取DTB到内存,再提供给内核使用。 -
根文件系统(rootfs)是linux在初始化时加载的第一个文件系统, 根文件系统包括根目录和真实文件系统,它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。
-
Uboot的全称 Universal Boot Loader。主要作用是用来启动操作系统内核,它分为两个阶段,即boot + loader, boot阶段启动系统,初始化硬件设备,建立内存空间映射图,将系统的软硬件带到一个合适的状态, loader阶段将操作系统内核文件加载至内存,之后跳转到内核所在地址运行。
二、Uboot
U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。 Uboot的全称 Universal Boot Loader,是遵循GPL条款的开源项目, U-Boot的主要作用是用来启动操作系统内核,它分为两个阶段,即boot + loader, boot阶段启动系统,初始化硬件设备,建立内存空间映射图,将系统的软硬件带到一个合适的状态, loader阶段将操作系统内核文件加载至内存,之后跳转到内核所在地址运行。
另外,某些BootLoader可能含有一些高级特性,如校验操作系统镜像,从多个操作系统镜像中选择引导合适的操作系统, 或者添加网络功能,让系统自主从网上寻找合适的镜像并且进行引导等等。

三、Linux内核
Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。 Linux内核是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:进程管理子系统、内存管理子系统、文件子系统、网络子系统、设备子系统等。

四、设备树
设备树是一种描述硬件的数据结构,它把这些硬件设备的信息, 而这个文件,就是Device Tree(设备树),设备树包括设备树源码(Device Tree Source,DTS)文件、 设备树编译工具(Device Tree Compiler,DTC)与二进制格式设备树(Device Tree Blob,DTB), DTS包含的头文件格式为DTSI。
node1 {a-string-property = "A string";a-string-list-property = "first string", "second string";a-byte-data-property = [0x01 0x23 0x34 0x56];child-node1 {first-child-property;second-child-property = <1>;a-string-property = "Hello, world";};
};
在Uboot启动内核时,会先读取DTB到内存,然后再启动内核,内核可以从设备树中获取硬件信息。

五、根文件系统
根文件系统(rootfs)是linux在初始化时加载的第一个文件系统, 根文件系统包括根目录和真实文件系统,它包含系统引导和使其他文件系统得以挂载(mount)所必要的文件。 根文件系统包函Linux启动时所必须的目录和关键性的文件,例如Linux启动时必要的初始化文件, 它在init目录下,此外根文件系统中还包括了许多的应用程序bin目录等, 任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。
在Linux内核启动的初始阶段,首先内核会初始化一个基于内存的文件系 统,如initramfs,initrd等,然后以只读的方式去加载根文件系统(load rootfs), 读取并且运行/sbin/init初始化文件,根据/etc/inittab配置文件完成系统的初始化工作 (提示:/sbin/init是一个二进制可执行文件,为系统的初始化程序,而/etc/inittab是它的配置文件), 在初始化的过程中,还会以读写的方式重新挂载根文件系统,在系统启动后, 根文件系统就可用于存储数据了,存在根文件系统是Linux启动时的必要条件。
我们常见的根文件系统制作工具有 buildroot、Ubuntu、Debian、yocto、busybox,这些工具的优缺点列出如下

相关文章:
Linux 系统移植(一)-- 系统组成
参考资料: linux系统移植篇(一)—— linux系统组成【野火Linux移植篇】1-uboot初识与编译/烧录步骤 文章目录 一、linux系统组成二、Uboot三、Linux内核四、设备树 本篇为Linux系统移植系列的第一篇文章,介绍了一个完整可运行的L…...
利用git的贮藏功能
可以将自己分支的当前状态贮藏切换到其它分支再切换回来的时候,应用就行了...
第52节:cesium 3DTiles模型特效+选中高亮(含源码+视频)
结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><vc-navigation...
day03_基础语法
今日内容 零、复习昨日 一、Idea安装,配置 二、Idea使用 三、输出语句 四、变量 五、数据类型 附录: 单词 零、 复习昨日 1 装软件(typora,思维导图) 2 gpt(学会让他帮你解决问题) 3 java发展(常识) 4 HelloWorld程序 5 编码规范 6 安装jdk,配置环境变量 电脑常识 任…...
数据结构与算法-时间复杂度与空间复杂度
数据结构与算法 🎈1.概论🔭1.1什么是数据结构?🔭1.2什么是算法? 🎈2.算法效率🔭2.1如何衡量一个算法的好坏?🔭2.2算法的复杂度🔭2.3时间复杂度📖2…...
数组的去重
根据您提供的代码片段,看起来您尝试使用嵌套的 for 循环将数组 data 中的元素添加到新数组 newData 中。然而,在您给出的代码中,if 语句的条件部分为空,可能是因为您还没有确定用于判断重复项的条件。如果您想要去除数组中的重复项…...
Electron自动化测试技术选型调研
Electron简介 Electron是一个开源的框架,用于构建跨平台的桌面应用程序。它由GitHub开发并于2013年首次发布。Electron允许开发人员使用Web技术(如HTML、CSS和JavaScript)来构建桌面应用程序,同时可以在Windows、macOS和Linux等操…...
微服务学习(九):安装OpenOffice
微服务学习(九):安装OpenOffice 一、下载OpenOffice 下载地址:OpenOffice 二、开始安装 上传资源到服务器 解压资源包 tar -zxvf Apache_OpenOffice_4.1.13_Linux_x86-64_install-rpm_zh-CN.tar.gz进入zh-CN/RPMS目录下安装…...
SAP Oracle表空间扩展技术手册
1、DBACOCKPIT下查看表空间 当表空间不足(达到99%)时,需要按以下步骤扩充表空间(每次扩充20000M,20G): (也可以通过DB13,DB02查看表空间) 新浪博客 Tablespace PSAPSR3 is 100% used | SAP Community Oracle是通过增加数据文件的方式来为表空间扩容。为指定表空间增…...
Linux系统编程——线程的学习
学习参考博文: Linux多线程编程初探 Linux系统编程学习相关博文 Linux系统编程——文件编程的学习Linux系统编程——进程的学习Linux系统编程——进程间通信的学习Linux系统编程——网络编程的学习 Linux系统编程——线程的学习 一、概述1. 进程与线程的区别2. 使…...
zemaxMIF曲线图
调制传递函数( Modulation Transfer Function,MTF )是用来形容光学系统成像质量的重要指标。 通过对光学系统像空间进行傅里叶变换,可以得到一张分析图表,来描述像面上对比度和空间频率之间的对应关系。 对比度&…...
【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
前言 🍊缘由 Iphone15来了,两年之约你还记得吗? 两年前,与特别的人有一个特别的约定。虽物是人非,但思念仍在。 遂整合之前iphone13及iphone14的相关抢购代码,完成一个SpringBoot监听Iphone15有货邮件提…...
什么是WhatsApp群发,WhatsApp协议,WhatsApp云控
那么WhatsApp群控云控可以做什么呢? 1、获客 自动化引流,强大的可控性,产品快速拓客 2、导流 一键式傻瓜化自动加好友,群发,朋友圈营销 3、群控 一键式拉群好友,建群,进群 …...
RealVNC viewer 窗口指定默认显示
RealVNC Viewer关于显示器(monitor)的参数有两个,一个是monitor,一个是useallmonitor。 monitor就是指定viewer窗体在哪个显示器上显示的,windows下的默认值是空白,改为\\.\DISPLAY2 就可以在打开远程窗口的时候默认在副屏上显…...
图论20(Leetcode1254.统计封闭岛屿的数目)
代码: class Solution {static int[][] dirs {{1,0},{-1,0},{0,1},{0,-1}};public int closedIsland(int[][] grid) {int num 0; for(int i0;i<grid.length;i){for(int j0;j<grid[0].length;j){if(grid[i][j]0){int[] start {i,j};if(getIsland(start,gri…...
Docker 的基本概念和优势,以及在应用程序开发中的实际应用
Docker是一种开源的容器化平台,它可以将应用程序打包成容器,并且可以在不同的环境中运行。Docker的基本概念包括: 镜像(Image):Docker镜像是一个可执行的包,它包含了运行应用程序所需的所有文件…...
数据仓库整理
数仓 olap vs oltp OLTP主要用于支持日常的业务操作,如银行交易、电子商务等,强调数据的准确性、实时性和并发性。OLAP主要用于支持复杂的数据分析,如数据仓库、决策支持等,强调数据的维度、聚合和可视化。 将OLTP数据库的数据…...
《C++API设计》读书笔记(3):模式
本章内容 本章涵盖了一些与CAPI设计相关的设计模式和惯用法。 “设计模式(Design Pattern)”表示软件设计问题的一些通用解决方案。该术语来源于《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Softwar…...
小程序搜索词优化:小陈运营的秘密武器
大家好,我是小陈,今天要和大家分享一下小程序搜索词优化的经验和技巧。在数字化时代,小程序已经成为许多企业的重要工具,但要让小程序在竞争激烈的市场中脱颖而出,搜索词优化是不可或缺的一环。在本文中,我…...
SpringSecurity 入门
文章目录 Spring Security概念快速入门案例环境准备Spring配置文件SpringMVC配置文件log4j配置文件web.xmlTomcat插件 整合SpringSecurity 认证操作自定义登录页面关闭CSRF拦截数据库认证加密认证状态记住我授权注解使用标签使用 Spring Security概念 Spring Security是Spring…...
实战jdk1.8新特性:在快马平台用lambda和stream处理订单数据
最近在重构一个老项目的订单模块时,决定全面升级到JDK1.8。这个版本引入的lambda和Stream API真是让人眼前一亮,尤其是处理集合数据时,代码量直接减半。今天就用InsCode(快马)平台带大家实战这些新特性,模拟一个订单数据处理系统。…...
Qwen2.5-VL-7B-Instruct镜像免配置教程:开箱即用的视觉语言推理平台
Qwen2.5-VL-7B-Instruct镜像免配置教程:开箱即用的视觉语言推理平台 1. 开篇介绍 你是否遇到过这样的场景:需要快速搭建一个能同时理解图片和文字的AI系统,却被复杂的配置步骤劝退?今天我要介绍的Qwen2.5-VL-7B-Instruct镜像&am…...
UG/NX二次开发必备:C#和C++项目DLL自动签名与拷贝全攻略(附避坑指南)
UG/NX二次开发实战:C#与C项目DLL签名与部署全流程解析 在工业设计软件领域,Siemens NX(原Unigraphics)的二次开发能力一直是工程师扩展功能、提升效率的重要途径。而DLL文件的数字签名环节,则是确保开发成果能在正版NX…...
效果实测:nli-distilroberta-base处理长文本与跨语言推理能力
效果实测:nli-distilroberta-base处理长文本与跨语言推理能力 1. 模型核心能力概览 nli-distilroberta-base作为轻量级自然语言推理模型,在文本理解任务中展现出独特优势。这个基于RoBERTa架构的蒸馏版本,保留了原模型90%以上的性能&#x…...
TurboDiffusion应用场景探索:电商、教育、社交,AI视频如何赋能各行各业
TurboDiffusion应用场景探索:电商、教育、社交,AI视频如何赋能各行各业 1. 引言:AI视频生成的新纪元 想象一下这样的场景:早上9点,电商运营团队需要为100款新产品制作展示视频;下午2点,在线教…...
BootstrapBlazor通知组件:如何实现声音提示功能
BootstrapBlazor通知组件:如何实现声音提示功能 【免费下载链接】BootstrapBlazor 项目地址: https://gitcode.com/gh_mirrors/bo/BootstrapBlazor BootstrapBlazor是一个功能丰富的Blazor组件库,提供了各种UI组件来增强Web应用的用户体验。其中…...
为什么你的Ping总是丢包?这7个隐藏原因90%的人都忽略了(含Wireshark分析技巧)
为什么你的Ping总是丢包?这7个隐藏原因90%的人都忽略了(含Wireshark分析技巧) 在网络运维的日常工作中,Ping命令就像网络工程师的听诊器,简单却至关重要。但当你发现Ping测试频繁丢包时,问题往往不像表面看…...
程序员转行学习 AI 大模型: 提示词工程 | 附精选学习资料
本文是程序员转行学习AI大模型的第12个核心知识点笔记,笔记后附精选的提示词工程学习资料。 当前阶段:还在学习知识点,由点及面,从 0 到 1 搭建 AI 大模型知识体系中。 系列更新,关注我,后续会持续记录分享…...
Python AI 工具不是越多越好!——3个被低估但日均调用量破50万的轻量级用例工具(附内部灰度测试报告)
第一章:Python AI 工具不是越多越好!——轻量级用例工具的价值重估在AI工程实践中,开发者常陷入“工具堆砌陷阱”:为一个文本清洗任务引入 Transformers,为简单分类部署完整 FastAPI ONNX Runtime Redis 缓存栈。这种…...
深度解析Windows微信自动化:Wechaty Puppet XP零成本架构设计与实战指南
深度解析Windows微信自动化:Wechaty Puppet XP零成本架构设计与实战指南 【免费下载链接】puppet-xp Wechaty Puppet WeChat Windows Protocol 项目地址: https://gitcode.com/gh_mirrors/pu/puppet-xp 在即时通讯自动化领域,Windows平台微信机器…...
