Uboot 简介
定义
维基百科对uboot的定义:
U-Boot(Universal Boot Loader)是一个开源的主引导加载程序,用于嵌入式设备中打包指令以引导设备的操作系统内核。它适用于多种计算机体系结构,包括68k,ARM,Blackfin,MicroBlaze,MIPS,Nios,SuperH,PPC,RISC-V和x86。
功能
U-Boot既是第一阶段也是第二阶段的引导加载程序。它由系统的ROM或BIOS从支持的引导设备加载,例如SD卡,SATA驱动器,NOR闪存(例如使用SPI或I²C)或NAND闪存。如果存在大小限制,U-Boot可能分为几个阶段:平台将加载一个小型SPL(辅助程序加载器),这是U-Boot的精简版本,SPL将执行初始硬件配置和加载更大,功能齐全的U-Boot版本。无论是否使用SPL,U-Boot都执行第一阶段(例如,配置内存控制器和SDRAM)和第二阶段引导(执行多个步骤以从必须配置的各种设备加载现代操作系统,呈现用于与用户交互并控制引导过程的菜单等。
U-Boot在串口上运行命令行界面。使用控制台,用户可以加载和引导内核,可能会更改默认参数。还有命令可以读取设备信息,读取和写入闪存,从串行端口或网络下载文件(内核,引导映像等),操作设备树,以及使用环境变量(可以写入持久存储) ,用于控制U-Boot行为,例如自动引导前的默认引导命令和超时,以及以太网MAC地址等硬件数据。
核心功能
- 初始化部分硬件,包括时钟、内存等等
- 加载内核到内存上
- 加载文件系统、atags或者dtb到内存上
- 根据操作系统启动要求正确配置好一些硬件
- 启动操作系统
monitor功能
- 进行调试
- 读写内存
- 烧写Flash
- 配置环境变量
- 命令引导操作系统
架构
这里以项目MTK7628为基础分析,MTK7628是MIPS32,对应uboot框图如下:
后面将简介整个uboot移植过程。
Uboot准备
本文基于的芯片是MTK7628,在github 寻找到相对稳定的版本 github:https://github.com/qdk0901/openwrt-uboot-mt7628
fork https://github.com/ShaolinDeng/openwrt-uboot-mt7628
基于此版本进行修改
Uboot移植
安装README 将整个仓库 复制到 package/boot/下,然后make menuconfig 中boot项 选择
Uboot 编译
make package/uboot-mt7628/{clean,compile,install} V=s