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

Linux 系统构成:bootloader、kernel、rootfs

写在前面:

本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。


目录

  • 前言
  • bootloader
  • kernel
    • Device Tree
  • rootfs
  • 参考


前言

完整的 linux 系統需要以下部分:

  • Bootloader
    • boot.img
  • Linux Kernel(Linux内核)
    • Device tree blob
  • Root Filesystem(根目录文件系統)

bootloader

bootloader(引导装载程序)就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境设置成一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

常见的 bootloader 有 PC 平台的 Grub;嵌入式平台的 vivi, RedBoot, u-boot 等,其中 u-boot 在使用上最广泛,因此在嵌入式中又常称 linux 系统构成为 u-boot、kernel、rootfs。

bootloader 是严重地依赖于硬件而实现的,特别是在嵌入式系统。因此,在嵌入式系统里建立一个通用的 bootloader 几乎是不可能的。尽管如此,我们仍然可以对 bootloader 归纳出一些通用的概念来,以指导用户进行特定的 bootloader 设计与实现。

在嵌入式系统中,bootloader 的意义与作用相当于 PC 平台中的 BIOS + Grub,它对开发板上的主要部件如 CPU、SDRAM、FLASH、串口等进行了初始化,可以使用 bootloader 下载文件到开发板,可以浏览目录,可以烧录 flash,可以启动系统等,实际上,一个功能比较强大的 bootloader 已经相当于一个微型的操作系统了。

总体上 bootloader 需要完成以下工作:

  • 初始化 CPU 速度;

  • 初始化内存,包括初始化内存配置寄存器等;

  • 初始化中断控制器,在系统启动时,关闭中断,关闭看门狗;

  • 初始化串行端口(如果在目标上有的话);

  • 启用指令/数据高速缓存;

  • 设置堆栈指针;

  • 设置参数区域并构造参数结构和标记(这是重要的一步,因为内核在标识根设备、页面大小、内存大小以及更多内容时可能需要使用引导参数);

  • 执行 POST(加电自检)来标识存在的设备并报告有何问题;

  • 为电源管理提供挂起/恢复支持;

  • 传输操作系统内核镜像文件到目标机。也可以将操作系统内核镜像文件事先存放在 Flash 中,这样就不需要 bootLoader 和主机传输操作系统内核镜像文件,这通常是在做成产品的情况下使用。而一般在开发过程中,为了调试内核的方便,不将操作系统内核镜像文件固化在 Flash 中,这就需要主机和目标机进行文件传输;

  • 跳转到内核的开始,在此又分为 ROM 启动和 RAM 启动。所谓 ROM启动就是用 XIP 技术直接在 Flash 中执行操作系统镜像文件;所谓RAM启动就是指把内核镜像从 Flash 复制到 RAM 中,然后再将 PC 指针跳转到 RAM 中的操作系统启动地址。

目前使用的主流嵌入式平台,几乎都是用 u-boot 作为启动引导,u-boot 有哪些突出的优点呢?

① 开放源码:https://github.com/u-boot/u-boot;

② 支持多种嵌入式操作系统内核,如 Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;

③ 支持多个处理器系列,如 PowerPC、ARM、x86、MIPS;

④ 较高的可靠性和稳定性;

⑤ 高度灵活的功能设置,适合 u-boot 调试、操作系统不同引导要求、产品发布等;

⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;

⑦ 较为丰富的开发调试文档与强大的网络技术支持。


kernel

kernel 即 linux 内核。内核源代码可以免费从官网获取,这是一个通用的内核,里面包含着内核支持的所有的硬件平台及驱动的所有代码,是一个大而全的内核源代码。

在使用层面上,当嵌入式平台使用 linux 系统,那么最重要的就是 kernel 中驱动的移植;一般都不会从一个纯净的 kernel 中去进行移植操作,而是根据芯片厂商提供的 kernel 对特定的硬件平台及设备进行各种外设驱动相关的适配工作。

Device Tree

设备树(Device Tree)是描述计算机的特定硬件设备信息的数据结构,以便于操作系统的内核可以管理和使用这些硬件,包括 CPU 或 CPU,内存,总线和其他一些外设。

老版本的 linux kernel 是没有设备树概念的,后来因为 SOC 的发展,kernel 中需要对这些新增的 SOC 进行支持,而这些代码都会编译到 kernel 中,会导致 kernel 日渐臃肿,于是后面就引入了在 PowerPC 等架构就已经采用的设备树。

1、dts(device tree source 设备树源文件)
dts文件是一种 ASCII 文本格式的设备树描述文件,此文件适合人类阅读主要是给用户看的。一个 .dts 文件对应一个 ARM 的设备,一般放置在 arch/arm/boot/dts/ 中。

2、dtsi(device tree source include 设备树头文件)
由于 .dts 中包含了很多公共部分,linux 内核为了简化,将 Soc 公共部分提炼为 .dtsi 文件,类似 c 语言中的 .h 文件。当然,和C语言的头文件类似,.dtsi也可以 include 其他的 .dtsi ,譬如几乎所有的 ARM SoC 的 .dtsi 都引用了skeleton.dtsi 。对于同一个节点的设置情况,.dts 中的配置会覆盖 .dtsi 中的配置;因此,.dtsi 一般写 Soc 共性部分,而 .dts 一般写目标单板特性部分,所以一般 .dts 包含并重写部分 .dtsi

3、dtb(device tree blob 设备树二进制文件)
.dts 通过 dtc 编译工具编译成 .dtb 文件,被编译后的设备树文件与内核一同放入到存储介质中,当内核启动时读取设备树文件,就可以动态的将板级信息写入到内核中。


rootfs

rootfs(Root Filesystem)即根目录文件系统,是 kernel 启动后挂载的第一个文件系统。rootfs 和 kernel 是分开的,但单独的 kernel 没有 rootfs 是没法正常工作的。在系统终端执行 cd / 即可看到当前的文件系统内容了。

现在有许多制作 rootfs 的工具,如 busybox,buildroot,Yocto 等。其中 buildroot 中包含了 busybox 的功能,只需要简单的操作就可以生成一个 rootfs 了。


参考

完整的linux系統:bootloader、linux kernel(linux內核)、rootfile(根文件系統)

嵌入式linux应用开发

Linux 筆記 2

What is the difference between .dts file and .dtsi file?

相关文章:

Linux 系统构成:bootloader、kernel、rootfs

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录前言bootloaderk…...

SpringCloud - Eureka注册发现

目录 提供者与消费者 Eureka原理分析 搭建Eureka服务 服务注册 服务发现 提供者与消费者 服务提供者: 一次业务中,被其它微服务调用的服务(提供接口给其它微服务)服务消费者: 一次业务中,调用其它微服务的服务(调用其它微服务…...

WampServer安装教程

文章目录简介:官网地址安装步骤:我是阿波,学习PHP记录一下笔记,如果对你有帮助,欢迎一键三连,谢谢! 简介: WampServer是一个用于Windows操作系统的Web开发环境,其名称来…...

Go语言泛型基础

泛型 Go 并不是一种静止的、一成不变的编程语言。新的功能是在经过大量的讨论和实验后慢慢采用的。最初的 Go1.0发布以来,Go语言习惯的模式已经发生了重大变化1.7的context、1.11的modules、1.13 error嵌套等Go的 1.18 版本包括了类型参数的实现,也就是…...

基于android的中医养生app

需求信息: 中医健康养生APP分为四大模块,其中个人中心又分为4大块,游客用户个人中心是空白的。 上图为养生知识推广普及模块的功能结构图。 在养生知识推广普及模块界面,用户可以选择自己感兴趣的模块进行文章浏览,文章…...

2023美赛C代码思路结果【全部更新完毕】注释详尽

C题已完成全部代码,注释详尽,并增加扰动项,保证大家的结果不会撞 需要全部问题的可以点击:https://www.jdmm.cc/file/2708697/ 下面贴出核心代码: -- coding: utf-8 -- TODO: 入口函数 import numpy as np from…...

实现8086虚拟机(二)——模拟CPU和内存

文章目录CPU 架构EU(执行单元)BIU(总线接口单元)小结一下模拟内存模拟 BIU模拟 EU模拟 CPU总结要模拟 8086 CPU 运行,必须知道 CPU 的一些知识。下文的知识点都来自《Intel_8086_Family_Users_Manual 》。CPU 架构 微…...

Windows7下使用VMware11.1.1安装ubuntu-16.04.7

一、说明二、安装说明三、安装步骤详解1、先安装VMware软件2、创建虚拟机3、编辑虚拟机4、开启虚拟机,初始化Linux系统一、说明 虽然VMware和ubuntu最新版已经很高了,我这电脑由于是win7配值还低,所以采用低版本来安装 VMware版本&#xff1…...

基于SSM框架的CMS内容管理系统的设计与实现

基于SSM框架的CMS内容管理系统的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目…...

华为OD机试 - 运动会 | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】 华为OD机试 - 双十一(Python) | 机试题算法思路 【2023】 华为OD机试 - 删除最少字符(Python) | 机试题算法思路 【2023-02】 华为OD机试 - Excel 单元格数值统计(Python) | 机试题算法思路 …...

(C语言篇)扫雷的实现

文章目录 一、开始时的基本思维:二、进入游戏的逻辑(test.c文件中实现)三、游戏的编写 1. 初始化棋盘 I. test.cII. game.hIII. game.c 2.打印棋盘 I. test.cII. game.hIII. game.c 3.布置雷 I. test.cII. game.hIII. game.c 4.排查雷 I. test.cII. game.hIII. gam…...

华为手表开发:WATCH 3 Pro(8)获取位置服务

华为手表开发:WATCH 3 Pro(8)获取位置服务初环境与设备文件夹:文件新增第二页面geolocation.hmlgeolocation.js修改首页 -> 新建按钮 “ 跳转 ”index.hmlindex.js 引用包:system.router首页效果点击结果按钮跳转后…...

AnLogicFPGA设计的时序约束及时序收敛

本篇博文讲了三个内容:时序约束基本概念、时序约束命令、时序收敛技巧 时序约束基本概念 时序设计的实质就是满足每一个触发器的建立(setup)时间和保持(hold)时间。 建立时间(Tsu) 触发器的时钟信号沿到来以前&…...

ubuntu22.10安装sogou输入法后不能输入中文字符(可以输入中文标点符号)

问题描述 想在ubuntu22.10系统上安装sogou中文输入法,按照sogou输入法网站给出的步骤安装后,发现无法输入中文字符,但是可以输入中文标点符号。 sogou网站:https://shurufa.sogou.com/linux/guide 寻找答案1 通过各种百度和必…...

基于微信小程序的生活日用品交易平台 的设计与实现

基于微信小程序的生活日用品交易平台 的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一…...

15:高级篇 - CTK 事件与监听

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 生命周期层事件 在 Plugin 生命周期的不同状态相互转换时,CTK Plugin Framework 会发出各种不同的事件,以供事先注册好的事件监听器处理,这些事件被称为“生命周期层事件”。CTK Plugin Framework 支持的…...

SpringBoot Notes

文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程:6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…...

CoreDNS

目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置(1)开开启日志服务(2)特定域名使用自定义 DNS 服务器(3&…...

码农饭碗不保——ChatGPT正在取代Coder

码农饭碗不保——ChatGPT正在取代Coder 最近被OpenAI的ChatGPT刷屏了。我猜你已经读了很多关于ChatGPT的文章,不需要再介绍了。假如碰巧您还不太了解ChatGPT是什么,可以先看一下这篇文章,然后再回来继续。 与ChatGPT对话很有趣,…...

PAT (Advanced Level) Practice 1004 Counting Leaves

1004 Counting Leaves题目翻译代码分数 30 作者 CHEN, Yue 单位 浙江大学 A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Specification: Each input file contains one test case. Eac…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

【网络安全】开源系统getshell漏洞挖掘

审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...