U-Boot工程

U-Boot工程简介

U-Boot工程简介

U-Boot(全称 Das U-Boot)是一款开源的引导加载程序,广泛应用于嵌入式系统中。它支持多种处理器架构,包括 ARM、MIPS、PowerPC、x86 和 RISC-V 等,并且可以从多种存储介质(如 Flash、eMMC、SD 卡、USB 等)启动操作系统。作为 Linux 系统的首选引导工具,U-Boot 还支持其他嵌入式操作系统,如 Android 和 ChromeOS,使其成为嵌入式设备开发中的关键组件。

U-Boot 由 Denx Software Engineering 开发,并基于 GPL 开源协议发布。由于其模块化设计和广泛的社区支持,U-Boot 成为了 Yocto 项目中常用的引导加载程序之一。通过 Yocto 项目,开发者能够自定义和构建 U-Boot,适配不同的嵌入式 Linux 系统,并根据具体的硬件需求进行高度定制,以满足特定平台的启动要求。

U-Boot 的主要特性包括:

  • 多架构支持:U-Boot 兼容多种处理器架构,包括 ARM、MIPS、PowerPC、x86、RISC-V、Nios II、M68K、SuperH、ColdFire 和 MicroBlaze 等。
  • 灵活且可定制:开发者可以根据具体硬件需求裁剪和优化 U-Boot,以适应资源受限的系统,从而减少启动时间和内存占用。
  • 多种启动介质支持:支持从多种存储设备启动,包括 NOR Flash、NAND Flash、eMMC、SD 卡、USB 设备、SATA 和 NVMe 等。
  • 网络引导支持:支持通过 TFTP、NFS 等网络协议进行远程引导,便于远程加载内核和文件系统,适合开发和调试工作。
  • 命令行接口:U-Boot 提供强大的命令行工具,允许用户在系统启动过程中执行调试和操作任务。
  • 文件系统支持:U-Boot 兼容多种文件系统格式,包括 FAT、EXT2/3/4、ISO、UBIFS、JFFS2 和 YAFFS 等。
  • 多操作系统支持:除 Linux 系统外,U-Boot 还可以引导其他操作系统,如 Android、ChromeOS、QNX 和 FreeBSD 等。

通过这些特性,U-Boot 为嵌入式系统提供了高度灵活、可定制的引导方案,帮助开发者有效应对各种硬件平台和操作系统的需求。

U-Boot在Yocto项目中的运用

在Yocto项目中,U-Boot作为一个常用的Bootloader,广泛应用于嵌入式Linux系统。Yocto项目为U-Boot提供了完整的构建支持,开发者可以通过配置选择U-Boot作为目标平台的引导加载程序。

Yocto对U-Boot的支持主要通过 meta层进行支持。开发者可通过修改配方文件recipes来定制U-Boot的构建过程。

定制与裁剪,Yocto允许开发者通过 recipes 机制对U-Boot进行裁剪,以适应嵌入式设备的资源限制和加快启动速度。

与其他系统组件的集成,在Yocto中,U-Boot与内核、设备树和根文件系统紧密结合。通过 boot.scr 脚本或环境变量配置,开发者可以灵活定义内核加载方式、文件系统挂载等启动参数。

基础功能

一般uboot需要实现的功能:

U-boot工作模式

启动加载模式 为Bootloader正常工作模式,一款开发板,正常上电后,Bootloader将嵌入式操作系统从FLASH中加载到SDRAM中运行

下载模式 Bootloader通过通信,将内核镜像、根文件系统镜像从PC机直接下载到目标板的FLASH中。

正常启动模式和recovery启动模式,

一个嵌入式系统,一般情况下都是正常启动模式,如果需要系统升级,或系统恢复出厂状态,就会需要用到recovery启动模式,它会从另外备份的kernel和rootfs启动。

fastboot

  1. 什么是fastboot
    (1)fastboot是android使用的一种刷机方法.android系统设计了2种刷机方式:fastboot和recovery。

fastboot是一种线刷,就是使用USB数据线连接手机的一种刷机模式。相对于某些系统(如小米)卡刷来说,线刷更可靠,安全。

recovery是一种卡刷,就是将刷机包放在sd卡上,然后在recovery中刷机的模式。

(2)fastboot使用usb作为物理传输。刷机其实就是镜像传输+烧录,fastboot刷机时就是通过usb线来传输镜像的。

(3)fastboot是uboot中的一个命令。uboot进入命令行中后,如果需要刷机,则可以在命令行执行fastboot命令就可以让uboot进入fastboot模式,刷机就是在fastboot模式下进行的。

(4)fastboot需要主机端的fastboot软件配合。要实现fastboot刷机,只有开发板端uboot是不行的,还需要在主机上有fastboot.exe的软件配合。

(5)fastboot在开发板和主机间定义了一套协议。其实fastboot是我们在开发板和主机之间定义的一套协议,这套协议以usb为底层传输物理层,协议规定了主机fastboot软件和开发板fastboot软件之间的信息传输规则。

消息传递可以实现功能有:主机可以向开发板发送命令、开发板可以向主机发送回复、主机可以向开发板发送文件(download)

fastboot的工作原理

(1) uboot的fastboot命令将开发板伪装成一个usb从设备。

(2) (2)主机的fastboot软件和开发板的fastboot程序通信来工作。

平时工作时,开发板端只要执行了fastboot命令进入fastboot模式即可,剩下的就不用管了。主机端通过运行fastboot命令,传递不同的参数来实现主机端和开发板端的通信。

譬如主机端执行fastboot devices,则这个命令通过USB线被传递到开发板中被开发板的fastboot程序接收,接收后去处理然后向主机端发送反馈信息,主机端接收到反馈信息后显示出来。

(3)我们学习fastboot时分析代码的思路就是:

主机端:fastboot.exe的源代码没有,fastboot协议虽然能找到但是很枯燥,所以主机端没有去分析的。

开发板端:主要分析点就是uboot如何进入fastboot模式,fastboot模式下如何响应主机发送的各种命令

开发板进入fastboot模式

根据我们之前的刷机经验我们知道,在整个刷机过程中我们的开发板只要直接在uboot中输入fastboot就好。

相关推荐
编程修仙1 小时前
Collections工具类
linux·windows·python
东芝、铠侠总代136100683931 小时前
浅谈TLP184小型平面光耦
单片机·嵌入式硬件·物联网·平面
lantiandianzi1 小时前
基于单片机中医药柜管理系统的设计
单片机·嵌入式硬件
芝麻团坚果1 小时前
对subprocess启动的子进程使用VSCode python debugger
linux·ide·python·subprocess·vscode debugger
写点什么啦1 小时前
[debug]不同的window连接ubuntu的vscode后无法正常加载kernel
linux·vscode·ubuntu·debug
wellnw1 小时前
[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
linux·ubuntu
不爱学习的YY酱1 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
DC_BLOG1 小时前
Linux-Nginx虚拟主机
linux·运维·nginx
BY—-组态2 小时前
web组态软件
前端·物联网·工业互联网·web组态·组态
小A1592 小时前
STM32完全学习——使用SysTick精确延时(阻塞式)
stm32·嵌入式硬件·学习