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

相关推荐
starleeisamyth34 分钟前
Ubuntu查看opencv版本c++
linux·运维·ubuntu
coder_copy2 小时前
Linux 防火墙开放端口
linux·服务器·windows
山登绝顶我为峰 3(^v^)32 小时前
Linux 程序打包
linux·运维·数据库
林辞忧4 小时前
Linux修炼之路之进程概念,fork函数,进程状态
linux
米糕.4 小时前
【Linux】生物信息学常用命令
java·linux·服务器
C or Cpp4 小时前
Linux硬链接和软链接(符号链接)
linux·运维·服务器
V_海贼王4 小时前
Linux入侵排查
linux·运维·服务器
牛奶咖啡134 小时前
Linux系统的服务——以Centos7为例
linux·linux的服务·启动、停止、重启linux服务·启用、禁用linux服务·列出linux服务·查看linux服务状态
铁蛋Q4 小时前
linux中的各种指令
linux·运维·服务器
半斗米4 小时前
VSCode + GDB + J-Link 单片机程序调试实践
vscode·单片机·mcu·gdb·嵌入式系统·调试·j-link