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
- 什么是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就好。