嵌入式 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 开发的基本概念和学习新路线

相关推荐
晨曦丿几秒前
双11服务器
linux·服务器·网络
李迟30 分钟前
在Linux服务器上使用kvm创建虚拟机
java·linux·服务器
A_New_World40 分钟前
Linux性能分析工具
linux
鹏大师运维43 分钟前
在银河麒麟V10 SP1上手动安装与配置高版本Docker的完整指南
linux·运维·docker·容器·麒麟·统信uos·中科方德
QMCY_jason1 小时前
linux 内存占用排查 vm.nr_hugepages
linux·运维·服务器
cui_win1 小时前
【基础】Golang语言开发环境搭建(Linux主机)
linux·golang·运维开发
ZPC82101 小时前
ubuntu 6.8.0 安装xenomai3.3
linux·运维·ubuntu
一梦浮华2 小时前
自学嵌入式 day30 IPC:进程间通信
linux·运维·服务器
CH_Qing2 小时前
【udev】关于/dev 设备节点的生成 &udev
linux·前端·网络
电脑能手2 小时前
遇到该问题:kex_exchange_identification: read: Connection reset`的解决办法
linux·ubuntu·ssh