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

相关推荐
cominglately3 小时前
centos单机部署seata
linux·运维·centos
魏 无羡3 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse3 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
木子Linux3 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
mit6.8244 小时前
Ubuntu 系统下性能剖析工具: perf
linux·运维·ubuntu
鹏大师运维4 小时前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
watermelonoops4 小时前
Windows安装Ubuntu,Deepin三系统启动问题(XXX has invalid signature 您需要先加载内核)
linux·运维·ubuntu·deepin
滴水之功5 小时前
VMware OpenWrt怎么桥接模式联网
linux·openwrt
ldinvicible5 小时前
How to run Flutter on an Embedded Device
linux
YRr YRr6 小时前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu