uboot启动流程概述_uboot启动流程

本文详细介绍了uboot的启动流程,从设置CPU管理模式开始,经过关看门狗、初始化时钟频率等多个步骤,直至board_init_r()函数,完成启动。内容包括设置环境变量、交叉编译器安装、u-boot源码分析、启动流程的代码解析,以及重定位和bss段清除的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7466734aec81819d91894f11c8b2d936.png

对于学习嵌入式的伙伴对于uboot都不陌生,今天我们就来了解一些关于uboot启动流程的一些相关知识,老样子本文结尾会有uboot启动流程的视频资料。

  uboot启动流程如下:

  1)设置CPU为管理模式

  2)关看门狗

  3)关中断

  4)设置时钟频率

  5)关mmu,初始化各个bank

  6)进入board_init_f()函数 (初始化定时器,GPIO,串口等,划分内存区域)

  7)重定位 复制uboot,然后修改SDRAM上的uboot链接地址)

  8)清bss

  9)跳转到board_init_r()函数,启动流程结束

-----------------------------------------------------------------------------------------------

  1.首先来安装arm-linux-gcc-4.3.2交叉编译器

mkdir  arm-linux-gcc-4.3.2                 //创建目录

tar -xjf  arm-linux-gcc-4.3.2.tar.bz2 -C arm-linux-gcc-4.3.2/  //解压到arm-linux-gcc-4.3.2目录下

  然后添加环境变量:

  有两种方法,第一种只是临时修改,重启虚拟机便会复位:

export PATH=/arm-linux-gcc-4.3.2/usr/local/arm/4.3.2/bin:/usr/sbin:/usr/bin... ...
             //将arm-linux-gcc-4.3.2添加到环境变量

  第二种,重启不复位:

vi /etc/environment
添加:
PATH=/arm-linux-gcc-4.3.2/usr/local/arm/4.3.2/bin:/usr/sbin:/usr/bin... ...
                   //将arm-linux-gcc-4.3.2添加到环境变量

  2.然后进入ftp://ftp.denx.de/pub/u-boot/来下载u-boot-2012.04.01

  2.1.创建source insight工程,来看代码

  1)在board 目录下只添加:

board/samsung/smdk2410/               // (2410单板文件)

  2)在arch 目录下只添加:

arch/arm/cpu/arm920t/                //(只添加这个目录下的*.c,*.S公用文件)                

arch/arm/cpu/arm920t/s3c24x0/        //(24x0架构所有文件)

arch/arm/include/asm/                //(只添加这个目录下的*.h公用头文件)

arch/arm/include/asm/proc-armv/      //(arm架构的文件)

arch/arm/include/asm/arch-s3c24x0/   //(24x0架构头文件)

arch/arm/lib/                        //(与arm相关的库文件)

  3)在include/configs目录下只添加:

include/configs/smdk2410.h              // (用来配置2410单板的头文件)

  2.2编译烧写:

tar xjf u-boot-2012.04.01.tar.bz2

cd u-boot-2012.04.01                 //进入解压后文件目录

make smdk2410_config                 //由于该uboot不支持2440板卡,所以只有配置2410板卡

make                                 //编译,生成u-boot.bin 

  3.最后烧写u-boot.bin,发现无法启动,接下来便来分析uboot的启动流程

  4.首先查看arch/arm/cpu/u-boot.lds链接脚本

  如下图所示,看到uboot最开始会进入_start:

f6c3a768fdf389684b2303db989f7f48.png

  5. _start位于arch/arm/cpu/arm920t/start.S

  所以,我们从start.S开始分析uboot启动流程:

.globl _start                                //声明_start全局符号,这个符号会被lds链接脚本用到
_start:    
b     start_code                            //跳转到start_code符号处,0x00
       ldr   pc, _undefined_instruction                    //0x04
       ldr   pc, _software_interrupt                       //0x08
       ldr   pc, _prefetch_abort                           //0x0c
       ldr   pc, _data_abort                               //0x10
       ldr   pc, _not_used                                 //0x14
       ldr   pc, _irq                                      //0x18
       ldr   pc, _fiq                                      //0x20

_undefined_instruction:  .word undefined_instruction
           //定义_undefined_instruction指向undefined_ins
U-Boot(Universal Bootloader)是一款开源的嵌入式系统引导加载程序,它被广泛应用于各种嵌入式设备中。下面是 U-Boot 的启动流程面试题的答案: 1. 请简要描述 U-Boot 的启动流程。 U-Boot 的启动流程可以分为以下几个阶段: a. 硬件初始化:包括硬件引脚的配置、外设的初始化等。 b. 低级初始化:主要是进行 CPU、内存和外设控制器的初始化。 c. 中级初始化:进行系统总线的初始化,如串口、网络等。 d. 高级初始化:加载并启动操作系统内核。 2. U-Boot 是如何加载操作系统内核的? 当 U-Boot 初始化完成后,它会从存储介质中读取操作系统内核镜像到指定的内存地址。然后,根据内核镜像的格式,U-Boot 会对内核进行解压(如果有压缩的话)。最后,U-Boot 通过跳转到内核的入口地址来启动操作系统。 3. U-Boot 的配置文件通常是哪个文件?它的作用是什么? U-Boot 的配置文件通常是 "uboot.cfg" 或 "u-boot.cfg" 文件。该文件用于定义和配置 U-Boot 的编译选项、功能开关和环境变量等。通过修改配置文件,可以对 U-Boot 进行定制化设置,以适应具体的硬件平台和需求。 4. 怎样在 U-Boot 中进行串口调试? 在 U-Boot 中进行串口调试可以帮助我们查看和调试启动过程中的日志信息。我们可以通过设置 U-Boot 的环境变量 "console" 来指定串口设备和波特率。然后,在 U-Boot 启动后,使用终端工具(如 minicom、Tera Term 等)连接到相应的串口设备,并设置正确的波特率即可。 这些是关于 U-Boot 启动流程的常见面试问题及其答案。希望对你有帮助!如有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值