您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页ARM + Linux 开发指南

ARM + Linux 开发指南

来源:爱够旅游网

随想:想写一个系列来讲如何嵌入式开发,然后能形成一个知识体系,帮助那些刚刚做嵌入开发的同学们.

1. ARM Linux从开机到Linux完全启动的流程和代码分析

ARM Linux从开机到完全启动的流程与代码分析

ARM Linux的启动过程主要涉及从设备上电开始,到Linux内核完全启动并进入用户空间的整个过程。这个过程通常分为多个阶段,涉及硬件初始化、Bootloader引导、内核加载、内核初始化、用户空间启动等几个关键环节。以下将详细介绍这个过程及其代码分析。

1. 系统启动流程概览

2. ARM Linux 启动流程详细分析

2.1 芯片上电与Boot ROM启动
  • ARM 系统上电后,CPU 首先会执行 Boot ROM(即硬件内部的引导代码)。它通常是厂商定制的,负责最初的硬件初始化(如时钟、内存、外设配置等),并将引导程序(Bootloader)加载到内存中。
  • Boot ROM 通常比较简单,只完成硬件的最基本初始化工作,不会有复杂的功能。
2.2 第一阶段引导(FSBL)
  • FSBL(First Stage Bootloader) 是在 ARM 系统启动时最先执行的代码。它的作用是对硬件进行初始化,并加载第二阶段引导程序(如 U-Boot)。
  • FSBL 的任务
    1. 初始化 RAM(内存控制器配置)。
    2. 初始化处理器(CPU、时钟、外设等)。
    3. 设置引导介质(比如 NAND Flash、eMMC、SD 卡等)。
    4. 加载第二阶段引导程序(例如 U-Boot)到内存。

在 FSBL 完成其工作后,它会将控制权转交给第二阶段引导(SBL)。

2.3 第二阶段引导(U-Boot)
  • U-Boot 是 ARM 系统中常用的第二阶段引导程序,它的主要功能是:
    1. 进一步初始化硬件(包括更多外设和 I/O)。
    2. 加载 Linux 内核映像到内存。
    3. 配置设备树(Device Tree),为内核提供硬件信息。
    4. 配置启动参数(如根文件系统、内核命令行)。
    5. 启动 Linux 内核。

在启动过程中,U-Boot 会通过读取存储设备(如 eMMC、NAND Flash、SD 卡)来获取内核映像、设备树和根文件系统镜像,并将它们加载到内存。

// U-Boot 加载 Linux 内核
void load_kernel_image(void) {
    if (load_image_from_storage("kernel.img", KERNEL_ADDR) != 0) {
        printf("Failed to load kernel image\n");
        return -1;
    }
    return 0;
}

// 启动内核
void start_kernel(void) {
    // 配置启动参数
    setup_bootargs();
    /

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务