嵌入式 Linux 设备刷系统具体组成

嵌入式 Linux 设备刷系统具体组成

  • [1 介绍](#1 介绍)
    • [1.1 概述](#1.1 概述)
    • [1.2 嵌入式 Linux 的组成](#1.2 嵌入式 Linux 的组成)
    • [1.3 U-Boot](#1.3 U-Boot)
    • [1.4 Linux 内核](#1.4 Linux 内核)
    • [1.5 设备树](#1.5 设备树)
    • [1.6 根文件系统](#1.6 根文件系统)
  • 参考

1 介绍

1.1 概述

一个完整的 linux 系统,通常包含了 U-Boot、kernel、设备树以及根文件系统。

1.2 嵌入式 Linux 的组成

1.3 U-Boot

U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios 与 MicroBlaze。这也是一套在 GNU 通用公共许可证之下发布的自由软件。Uboot 的全称 Universal Boot Loader,是遵循 GPL 条款的开源项目,U-Boot的主要作用是用来启动操作系统内核,它分为两个阶段,即 boot + loader,boot 阶段启动系统,初始化硬件设备,建立内存空间映射图,将系统的软硬件带到一个合适的状态,loader 阶段将操作系统内核文件加载至内存,之后跳转到内核所在地址运行。

1.4 Linux 内核

Linux 是一种开源操作系统内核。Linux 内核的主要模块(或组件)分以下几个部分:进程管理子系统、内存管理子系统、文件子系统、网络子系统、设备子系统等。

1.5 设备树

设备树是一种描述硬件的数据结构,它把这些硬件设备的信息,而这个文件,就是 Device Tree(设备树),设备树包括设备树源码(Device Tree Source,DTS)文件、设备树编译工具(Device Tree Compiler,DTC)与二进制格式设备树(Device Tree Blob,DTB),DTS 包含的头文件格式为 DTSI。

列表 1: 设备树描述

复制代码
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 和 Linux 不能直接识别 DTS 文件,而 DTB 可以被内核与 BootLoader 识别解析,通常在制作 NAND Flash、SD Card 启动镜像时,通常会为 DTB 文件留下一部分存储区域以存储 DTB,在BootLoader 启动内核时,会先读取 DTB 到内存,再提供给内核使用。

1.6 根文件系统

根文件系统(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,这些工具的优缺点列出如下:

参考

1、yocto 手册

2、[野火]《嵌入式Linux镜像构建与部署------基于LubanCat-i.MX6ULL开发板》

3、BitBake 手册

4、2. 如何学习linux开发

5、嵌入式 Linux 开发的基本概念和学习新路线

相关推荐
小米里的大麦27 分钟前
022 基础 IO —— 文件
linux
Xの哲學31 分钟前
Perf使用详解
linux·网络·网络协议·算法·架构
门前灯32 分钟前
Linux系统之iprconfig 命令详解
linux·运维·服务器·iprconfig
tb_first1 小时前
k8sday09
linux·云原生·容器·kubernetes
忧郁的橙子.1 小时前
三、k8s 1.29 之 安装2
linux·运维·服务器
huangyuchi.1 小时前
【Linux系统】动静态库的制作
linux·运维·服务器·动态库·静态库·库的简单制作
jim写博客2 小时前
Linux进程概念(四)环境地址变量
linux·运维·服务器
稚辉君.MCA_P8_Java2 小时前
豆包 Java的23种设计模式
java·linux·jvm·设计模式·kubernetes
Nie_Xun3 小时前
ubuntu网络共享
linux·运维·ubuntu
花小璇学linux3 小时前
imx6ull-驱动开发篇22——Linux 时间管理和内核定时器
linux·运维·驱动开发