Bootloader概述和Uboot

Bootloader 基本概念

什么是Bootloader?

  • Bootloader是硬件启动的引导程序,是运行操作系统的前提;
  • 在操作系统内核或用户应用程序运行之前运行的一小段代码。对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境;
  • 在嵌入式系统中,整个系统的启动加载任务通常由Bootloader来完成。

Bootloader的特点

  • Bootloader不属于操作系统,一般采用汇编语言和C语言开发。需要针对特定的硬件平台编写。
  • 在移植系统时,首先为开发板移植Bootloader。
  • Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。

Bootloader的操作模式

  • 自启动模式:在这种模式下,Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
  • 交互模式:在这种模式下,目标机上的Bootloader将通过串口或网络等通信手段从开发主机(Host)上下载内核映像和根文件系统映像等到RAM中。可以被 Bootloader写到目标机上的固态存储媒质中,或者直接进行系统的引导。也可以通过串口接收用户的命令。

常用bootloader介绍

U-boot介绍

  • u-boot(Universal Boot Loader)是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序。遵循GPL条款。
  • 从FADSROM、8xxROM 、PPCBOOT、Armboot逐步发展演化而来;
  • 当前版本号:参考Makefile。
  • http://www.denx.de/wiki/U-Boot/WebHome

U-boot的特点:

复制代码
 1. 代码结构清晰、易于移植(见目录结构)
 2. 支持多种处理器体系结构(见arch目录)
 3. 支持众多开发板(目前官方包中有200多种,见board目录)
 4. 命令丰富、有监控功能
 5. 支持网络协议、USB、SD等多种协议和设备
 6. 支持文件系统
 7. 更新较活跃,使用者多,有助于解决问题

U-BOOT 命令

命令分类

环境设置、数据传输、存储器访问、加载运行

  • printenv 显示所有环境变量
  • setenv 设置新的环境变量
  • saveenv 将当前定义的所有的环境变量值存入flash中
  • tftp 通过网络下载程序
  • protect 对Nor Flash写保护
  • erase 擦除Nor FLASH
  • emmc相关命令
    mmc read
    mmc write
    mmc dev
    mmc erase
  • bootcmd 自启动命令
  • go addr 执行内存中的二进制代码,简单的跳转到指定地址
  • bootm kernel-addr ramdisk-addr dtb-addr

U-BOOT 配置编译

U-Boot目录结构


编译U-boot

整个工程通过Makefile来组织编译。顶层目录下的Makefile中包含了开发板的配置信息。从顶层目录开始递归地调用各级子目录下的Makefile,最后链接成u-boot映像。

顶层目录下的 Makefile

  • 它负责u-boot整体配置和编译
  • 在Makefile中指定使用的交叉工具链
  • 配置u-boot: make origen_config
  • 编译: make

U-boot镜像下载烧录

  • 烧录编译产生的镜像 u-boot.bin
  • 初次或开发板代码损坏不能正常启动时,可采用JTAG工具烧录
  • 专用的烧录工具如h-jtag或DNW等
  • 在u-boot已经能工作,升级或修正U-boot时,可用U-boot中的命令来烧录
  • 其它方式 如SD卡 , Fastboot命令
  • 镜像固化位置
    ROM、NOR FLASH、NAND FLASH EMMC等

U-BOOT 启动流程

相关推荐
路溪非溪9 小时前
Linux驱动中的红外遥控子系统
linux·arm开发·驱动开发
不染尘.1 天前
操作系统发展史和常见习题汇总
arm开发·嵌入式硬件·draw.io
橘色的喵1 天前
嵌入式 ARM Linux 平台高性能无锁异步日志系统设计与实现
linux·arm开发·cache line·ring buffer
鸿蒙小白龙1 天前
OpenHarmony轻量系统智能模块开发实战指南
arm开发·openharmony·liteos
物随心转2 天前
硬盘的MBR
arm开发
landyjzlai3 天前
AMBA总线(15)关于AXI-stream(sg模式)
arm开发·fpga开发·amba
Dillon Dong4 天前
从C到Simulink: ARM Compiler 5 (RVDS) 为什么simulink 不能使用arm编译
c语言·arm开发·simulink
硅农深芯4 天前
ARM Cortex-M系列的内核型号有什么区别,该怎么选择
arm开发·单片机·芯片
小程同学>o<5 天前
Linux 应用层开发入门(一)| ARM平台交叉编译入门:打造你的第一个Linux应用
linux·arm开发·linux应用层
切糕师学AI5 天前
ARM 汇编指令:STM
汇编·arm开发·stm