简单ARM Linux BOOTLOADER分析

需积分: 50 1 下载量 184 浏览量 更新于2024-09-26 收藏 140KB PDF 举报
"ArmLinux Bootloader全程详解,关注嵌入式Linux系统的引导加载程序,特别是针对初学者和产品开发的简化版Bootloader分析。" 在 ArmLinux 系统中,Bootloader 是一个至关重要的组成部分,它负责初始化硬件,加载内核,并传递启动参数给操作系统。本文将深入探讨这一主题,主要涉及以下几个核心知识点: 1. **压缩与解压缩内核 (COMPRESSED KERNEL and DECOMPRESSED KERNEL)**: - 在现代的Linux系统中,推荐使用压缩内核(COMPRESSED KERNEL),它包含了解压缩代码。这样,在内存分配时需要为压缩和解压缩内核预留足够的空间,确保解压缩过程中不会覆盖原始的压缩内核。一旦执行跳转到压缩内核,解压缩器就开始运行。如果检测到解压缩过程会覆盖原内核,解压缩器会将数据放置在压缩内核之后并重新定位内核。因此,空间不足会导致启动失败。 2. **JFFs2 文件系统**: - JFFs2(Journaling Flash File System 2)是针对嵌入式设备设计的日志型文件系统,它允许在Flash存储上保存Armlinux应用的数据。尽管本文未详细介绍,但JFFs2对于在无其他存储设备的环境中持久化数据非常有用。 3. **RAMDISK**: - RAMDISK是一种在没有其他设备时用于启动的根文件系统。通常有多种加载方式,这里主要介绍常见的一种:将压缩的RAMDISK映像加载到特定内存地址,然后通过BOOTLOADER以启动参数ATAG_INITRD2的形式传递给内核。这使得内核能够识别并解压RAMDISK,以便在启动时使用。 4. **启动参数**: - Linux 2.4.x及以后版本的内核期望以标记列表(tagged list)形式接收启动参数。列表始于ATAG_CORE标记,终止于ATAG_NONE标记。每个标记由`tag_header`结构体和其后的参数值数据组成。这些数据结构定义在内核源码的`include/asm/setup.h`头文件中。在嵌入式Linux系统中,Bootloader需要设置这些参数来正确引导内核。 5. **Bootloader与内核交互**: - Bootloader不仅加载内核,还需要配置硬件环境,例如时钟、内存映射等,并设置适当的启动参数。这些参数包括内存大小、设备树信息、RAMDISK位置等,它们通过上述的tag列表机制传递给内核。 通过本文的讲解,读者可以理解Bootloader在ArmLinux系统中的基本功能和操作原理,特别是对于初学者,可以更轻松地掌握Bootloader的编写和裁剪,以适应产品开发的需求。此外,通过对简化版Bootloader的分析,可以更直观地了解整个启动流程,这对于理解和调试Bootloader的代码具有很大帮助。