uboot官方README学习


前言

在uboot的学习中,本人移植跟随着嵌入式大佬们的教学编译构建,一直不知其所以然,看过官方uboot中的README之后,深有感触。所以本文记录翻译的官方README作为回顾


提示:以下是本篇文章正文内容,下面案例可供参考

一、uboot简介

这个目录包含U-Boot的源代码,U-Boot是一个引导加载程序,它用来引导PowerPC、ARM、MIPS和其他几种处理器的嵌入式开发板,可以安装在引导ROM中,用于初始化和测试硬件或下载和运行应用程序代码。

二、状态

一般来说,在开发板Makefile存在配置选项的所有板都经过了一定程度的测试,可以被认为是“工作的”。事实上,它们中的许多都在生产系统中使用。如果出现问题,请查看CHANGELOG文件,以找出谁贡献了特定的配置。此外,在整个U-Boot源代码中还散布着各种维护者文件,以确定负责各种板和子系统的人员或公司。注意:截至2010年8月,在实际的U-Boot源代码树中不再有CHANGELOG文件;但是,它可以从Git日志动态创建。
使用:make CHANGELOG

在哪可以获得帮助

u-boot@lists.denx.de
https://lists.denx.de/pipermail/u-boot
https://marc.info/?l=u-boot

在哪可以获得源码

https://source.denx.de/u-boot/u-boot.git
https://source.denx.de/u-boot/u-boot
https://ftp.denx.de/pub/u-boot/
ftp://ftp.denx.de/pub/u-boot/

三、目录层次结构

/arch			Architecture-specific files														(特定架构文件)  
  /arc			Files generic to ARC architecture												(ARC通用架构文件)
  /arm			Files generic to ARM architecture												(ARM通用架构文件)
  /m68k			Files generic to m68k architecture												(m68k通用架构文件)											
  /microblaze		Files generic to microblaze architecture									(microblaze 通用架构文件)
  /mips			Files generic to MIPS architecture												(MIPS通用架构文件)
  /nds32		Files generic to NDS32 architecture												(NDS32通用架构文件)
  /nios2		Files generic to Altera NIOS2 architecture										(Altera NIOS2通用架构文件)
  /powerpc		Files generic to PowerPC architecture											(PowerPC通用架构文件)
  /riscv		Files generic to RISC-V architecture											(RISC-V通用 架构文件)
  /sandbox		Files generic to HW-independent "sandbox"										(HW-independent"sandbox"通用文件)
  /sh			Files generic to SH architecture												(SH通用架构文件)
  /x86			Files generic to x86 architecture												(X86通用架构文件)
  /xtensa		Files generic to Xtensa architecture											(Xtensa通用架构文件)
/api			Machine/arch-independent API for external apps									(跟硬件解耦的api给应用层)							
/board			Board-dependent files															(跟板子相关的文件)
/boot			Support for images and booting													(支持镜像和启动)
/cmd			U-Boot commands functions														(uboot命令和功能)
/common			Misc architecture-independent functions											(通用函数)
/configs		Board default configuration files												(板子默认的配置文件)
/disk			Code for disk drive partition handling											(磁盘驱动器分区处理代码)
/doc			Documentation (a mix of ReST and READMEs)										(文档(rest和readme的混合))
/drivers		Device drivers																	(设备驱动)
/dts			Makefile for building internal U-Boot fdt.										(Makefile用于构建内部的uboot FDT)
/env			Environment support																(环境支持)
/examples		Example code for standalone applications, etc.									(独立的应用示例代码)
/fs			Filesystem code (cramfs, ext2, jffs2, etc.)											(文件系统代码)
/include		Header Files																	(头文件)
/lib			Library routines generic to all architectures									(给所有架构的通用库例程)
/Licenses		Various license files															(各种许可证文件)
/net			Networking code																	(网络代码)
/post			Power On Self Test																(开机自检)
/scripts		Various build scripts and Makefiles												(各种构建脚本和Makefiles)
/test			Various unit test files															(各种单元测试文件)
/tools			Tools to build and sign FIT images, etc.										(用于构建和签署FIT镜像等)

四、软件配置

配置通常使用C预处理器定义完成;这背后的基本原理是尽可能避免死代码。
配置变量有两类:
Configuration_OPTIONS_:
它们由用户选择,名称以“CONFIG_”开头。
Configuration_SETTINGS_:
这些取决于硬件等,如果你不知道自己在做什么,就不应该被干预;它们的名称以“CONFIG_SYS_”开头。
以前,所有的配置都是手工完成的,包括手工创建符号链接和编辑配置文件。最近,U-Boot添加了Linux内核使用的Kbuild基础结构,允许您使用***“make menuconfig”***命令来配置构建。

处理器架构和主板类型的选择:

对于所有支持的板,有现成的默认配置可用;只需键入***“make <board_name>_defconfig”***。
示例:对于TQM823L模块类型:
cd u-boot
make TQM823L_defconfig

注意:如果你正在寻找一个板的默认配置文件,你肯定曾经在那里,但现在丢失了,检查文件doc/README。废弃的名单里面显示不再支持的板。

沙箱环境:

U-Boot可以使用“沙箱”在Linux主机上运行。这允许功能开发而不是板或架构特定于在本地平台上进行。
沙盒也被用来做一些U-Boot的测试
了解更多详情在 doc/arch/sandbox.rst。

单板初始化流程:

这是单板的期望启动流程。这应该适用于两者SPL和U-Boot正确(即它们都遵循相同的规则)。
注意:“SPL”代表“二级程序加载器”,本文件稍后将对此进行更详细的解释。
目前,SPL大多使用单独的代码路径,但每个函数的函数名和角色是相同的。某些板或架构可能不符合此要求。至少大多数使用CONFIG_SPL_FRAMEWORK的ARM板都符合这一点。
执行通常从特定于体系结构的(并且可能的CPU-specific)start.S文件开始,例如:

	-arch/arm/cpu/armv7/start.S
	- arch/powerpc/cpu/mpc83xx/start.S
	- arch/mips/cpu/start.S

从那里这三个函数被调用;目的和下面描述了这些函数的限制。

lowlevel_init():
board_init_f():
board_init_r():

lowlevel_init():

目的:必要的init允许执行到达board_init_f()
没有global_data或BSS
没有堆栈(ARMv7可能有,但很快就会删除)
必须不设置SDRAM或使用控制台
必须只执行最低限度的操作,以便继续执行board_init_f()
这几乎是不需要的
从这个函数正常返回

board_init_f():

目的:设置机器准备运行board_init_r():
即SDRAM和串行UART
Global_data可用
堆栈在SRAM中
BSS不可用,因此不能使用全局/静态变量,只能使用堆栈变量和global_data
Non-SPL-specific指出:
调用dram_init()来设置DRAM。如果在SPL中已经这样做了,则什么都做不了
PL-specific指出:您可以根据需要使用自己的版本覆盖整个board_init_f()函数。
在极端情况下可以在这里调用preloader_console_init()
应该设置SDRAM,并且使UART工作所需的任何东西都不需要清除BSS,它将由crto完成。
对于某些架构上的特定场景,可以*提供早期的BSS(通过CONFIG_SPL_EARLY_BSS,通过在进入board_init_f()之前移动BSS的清除),但不鼓励这样做。相反,		强烈建议在架构任何代码更改或添加时,不依赖于board_init_f()期间BSS的可用性,以保持整个代码库的兼容性和一致性,如本自述文件的其他部分所示。
必须从这个函数正常返回(不要直接调用board_init_r())
这里BSS被清除了。对于SPL,如果定义了CONFIG_SPL_STACK_R,那么此时堆栈和global_data将被重新定位到下面CONFIG_SPL_STACK_R_ADDR。对于非spl, U-Boot被重新定位到在内存的顶部运行。

board_init_r():

目的:主执行,通用代码
global_data可用
SDRAM可用
BSS可用,所有静态/全局变量都可以使用执行最终继续main_loop()
Non-SPL-specific指出:
U-Boot被重新定位到内存的顶部,现在从那里运行。
SPL-specific指出:
如果定义了CONFIG_SPL_STACK_R,则堆栈在SDRAM中是可选的
CONFIG_SPL_STACK_R_ADDR点可以在这里调用到SDRAM preloader_console_init()—通常这是通过选择CONFIG_SPL_BOARD_INIT然后提供包含此调用的spl_board_init()函数来完成的
加载U-Boot或(猎鹰模式)Linux

可选的配置

配置视板子和CPU类型而定;所有这些信息保存在一个配置文件中”include/configs/<board_name>.h”。
示例:对于TQM823L模块,所有配置设置都在“include/configs/TQM823L.h”。
许多选项完全按照相应的Linux内核配置选项命名。这样做的目的是为了以后更容易构建配置工具。

ARM平台总线类型(CCI):
	CoreLink Cache Coherent Interconnect (CCI)是ARM总线,提供两个多核cpu集群之间的完全缓存一致性,以及设备和I/0主机的I/0一致性		
	CONFIG_SYS_FSL_HAS_CCI400
	定义用于具有缓存相干互连CCN-400的Soc
	CONFIG_SYS_FSL_HAS_CCN504
	CCN-504为具有高速缓存相干互连CCN-504的Soc定义

需要配置的选项如下:

- CPU Type:	Define exactly one, e.g. CONFIG_MPC85XX.
- Board Type:	Define exactly one, e.g. CONFIG_MPC8540ADS.
- 剩余配置项详解很多具体请查看soc厂家或者uboot官方的配置详情

总结

uboot学习地址:https://docs.u-boot.org/en/latest/
文章中翻译uboot下载地址https://source.denx.de/u-boot/u-boot/-/tree/v2024.04?ref_type=tags

  • 28
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值