Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从《README》了解u-boot

从《README》了解u-boot

作者头像
哆哆jarvis
发布于 2022-08-23 06:17:13
发布于 2022-08-23 06:17:13
6740
举报

了解u-boot的方式有很多种,以下从U-boot官方文档README学习。

概括

U-Boot是基于PowerPC、ARM、MIPS 和其他几个处理器的嵌入式板的引导加载程序,可以安装在引导 ROM 中,用于初始化和测试硬件或下载和运行应用代码。U-Boot 的开发与 Linux 息息相关:部分源代码来源于 Linux 源代码树,我们有一些共同的头文件,并专门提供了支持 Linux 镜像的引导。

已经注意使该软件易于配置和扩展。例如,所有监控命令都使用相同的调用接口实现,因此添加新命令非常容易。此外,您可以动态加载和运行它,而不是将很少使用的代码(例如硬件测试实用程序)永久添加到监视器。

目录层次结构

/arch 体系结构特定文件 ->/arc ARC 架构通用的文件 ->/arm ARM 体系结构通用的文件 ->/avr32 文件通用 AVR32 架构 ->/blackfin 文件通用到 Analog Devices Blackfin 架构 ->/m68k 通用到 m68k 架构的文件 ->/microblaze 文件通用 microblaze 架构 ->/mips 文件通用 MIPS 架构 ->/nds32 文件通用 NDS32 架构 ->/nios2 对 Altera NIOS2 体系结构通用的文件 ->/openrisc 文件通用 OpenRISC 架构 ->/powerpc 通用到 PowerPC 体系结构的文件 ->/sandbox 与硬件无关的“沙盒”通用的文件 ->/sh 对 SH 架构通用的文件 ->/sparc 对 SPARC 体系结构通用的文件 ->/x86 对 x86 体系结构通用的文件 /api Machine/arch 独立于外部应用程序的 API /board 电路板相关文件 /common 杂项架构独立功能 /configs 板默认配置文件 /disk 磁盘驱动器分区处理代码 /doc 文档(不要期望太多) /drivers 常用设备驱动 /dts 包含用于构建内部 U-Boot fdt 的 Makefile。 /examples 独立应用程序的示例代码等。 /fs 文件系统代码(cramfs、ext2、jffs2 等) /include 头文件 /lib 对所有体系结构通用的库例程 /Licenses 各种许可证文件 /net 网络代码 /post 开机自检 /scripts 各种构建脚本和 Makefile /test 各种单元测试文件 /tools 用于构建 S-Record 或 U-Boot 映像等的工具。

软件配置

配置通常使用 C 预处理器定义完成;其背后的基本原理是尽可能避免死代码

有两类配置变量:

  • Configuration OPTIONS: 这些可由用户选择,名称以CONFIG_开头。
  • Configuration SETTINGS: 这些取决于硬件等,如果您不知道自己在做什么,则不应干预;他们的名字以CONFIG_SYS_开头。

以前,所有配置都是手动完成的,包括手动创建符号链接和编辑配置文件。最近,U-Boot 添加了 Linux 内核使用的 Kbuild 基础架构,允许您使用“make menuconfig”命令来配置您的构建。

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

对于所有受支持的板,都有现成可用的默认配置;只需键入make <board_name>_defconfig

示例:对于 TQM823L 模块类型:

  • cd u-boot //进入u-boot根目录
  • make TQM823L_defconfig

注意:如果您正在寻找您确定曾经存在但现在丢失的板的默认配置文件,请检查文件 doc/README.scrapyard 以获取不再支持的板的列表。

板初始化流程:

这是板的预期启动流程。这应该适用于 SPL 和 U-Boot(即它们都遵循相同的规则)。

注意:“SPL”代表“Secondary Program Loader”,本文件后面将对此进行更详细的说明。

目前,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()
  • 没有 global_data 或 BSS
  • 没有堆栈(ARMv7 可能有一个,但很快就会被删除)
  • 不得设置 SDRAM 或使用控制台
  • 必须只做最低限度的工作以允许继续执行board_init_f()
  • 这几乎不需要
  • 从此函数正常返回

board_init_f()

  • 目的:设置机器准备运行 board_init_r(), 即 SDRAM 和串行 UART
  • global_data 可用
  • 堆栈在 SRAM 中
  • BSS 不可用,因此不能使用全局/静态变量,只能使用堆栈变量和 global_data

非 SPL 特定说明:

  • 调用 dram_init() 来设置 DRAM。如果已经在 SPL 中完成,这将无能为力

SPL 特定说明:

  • 您可以根据需要使用您自己的版本覆盖整个 board_init_f() 函数。
  • preloader_console_init() 可以在这里极端调用
  • 应该设置 SDRAM,以及使 UART 工作所需的任何东西
  • 这些不需要清除 BSS,由 crt0.S 完成
  • 必须从此函数正常返回(不要直接调用 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()

非 SPL 特定说明:

  • U-Boot 被重新定位到内存的顶部,现在从那里运行。

SPL 特定说明:

  • 如果定义了CONFIG_SPL_STACK_R 并且CONFIG_SPL_STACK_R_ADDR 指向 SDRAM,则堆栈可以选择在 SDRAM 中
  • 可以在这里调用 preloader_console_init() - 通常这是通过定义CONFIG_SPL_BOARD_INIT 然后提供包含此调用的 spl_board_init() 函数来完成的
  • 加载 U-Boot 或(in falcon mode)Linux
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆jarvis 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
uboot各种目录下的文件作用
uboot下载地址:http://ftp.denx.de/pub/u-boot/ 1、目录分布 2、目录结构变化: u-boot-2010.03及以前版本 ├── api               
233333
2018/03/07
2.3K0
uboot各种目录下的文件作用
海思uboot启动流程详细分析(二)
从start_armboot开始,在startup.c中有包含#include <config.h>
233333
2019/05/25
2.7K1
海思uboot启动流程详细分析
介绍u-boot启动流程中和具体版型(board)有关的部分,也即board_init_f/board_init_r所代表的、board有关初始化过程。该过程将持续u-boot的整个生命周期,直到main_loop(即传说中的命令行)。
233333
2019/05/25
4.2K0
Uboot 大全 | uboot 启动流程(一)
atf基本启动流程为:BL1 – BL2 – BL31 – BL32 – BL33(uboot),即在bl32启动完成后再启动uboot,uboot作为启动链中作为最后一级镜像,用于启动最终的os。Atf是arm为了增强系统安全性引入,只支持armv7和armv8架构的可信固件。而uboot是通用的嵌入式系统引导程序,其可以支持包含arm在内的多种处理器架构,如mips、riscv、powerpc以及x86等,且其历史比atf更加久远。因此默认情况下uboot并不需要与atf共同启动,而其自身就被设计为支持完整的多级启动链,该启动链被设计为最多可包含spl、tpl和uboot三个阶段。接下来我们通过一些典型启动流程,来看下这些阶段的一些组合关系吧。
刘盼
2023/01/05
4.9K1
Uboot 大全 | uboot 启动流程(一)
为U-boot 添加新的board
uboot需要支持众多的硬件,并且具有良好的可扩展性、可移植性和可维护性,因此必须要有一个设计良好的代码架构。代码架构的设计总是与软硬件架构密不可分的,在硬件层面嵌入式系统的核心一般包括以下层次:
刘盼
2023/01/05
1.5K2
为U-boot 添加新的board
S3C2440移植uboot之支持NAND启动
  参考之前uboot使用的start.S, init.c来修改uboot代码新的uboot链接地址位于0,且在arm-linux-ld时加了"-pie"选项, 使得u-boot.bin里多了"*(.rel*)", "*(.dynsym)",从而程序非常大,不利于从NAND启动(重定位之前的启动代码应该少于4K).   所以接下来修改代码,并取消"-pie"选项.   使用grep “-pie” * -nR找到:
嵌入式与Linux那些事
2021/05/20
7560
S3C2440移植uboot之支持NAND启动
beaglebone ai底层原理分析:spl阶段
在去深入分析一款芯片的使用的时候,往往需要关注其启动的流程与底层初始化的代码。只有掌握了这些信息,做代码优化和裁剪才能游刃有余,在特定的环境下,以最佳的方式去使用好芯片。
bigmagic
2020/11/25
1.2K0
beaglebone ai底层原理分析:spl阶段
S3C2440移植uboot之启动过程概述
  打开uboot.lds,发现链接地址为0,所以新的uboot只能在nor flash运行。运行开始文件为start.o。
嵌入式与Linux那些事
2021/05/20
4850
S3C2440移植uboot之启动过程概述
第1阶段——u-boot分析之make指令(2)
通过make 100ask24x0_config 指令配置好芯片选型后,使用make指令来生成uboot.bin文件 本文学习目标: 对Makefile文件进行基本了解,掌握make指令是怎么实现生
诺谦
2018/01/03
1.1K0
第1阶段——u-boot分析之make指令(2)
S3C2440移植uboot之支持NAND启动「建议收藏」
  上一节S3C2440移植uboot之新建单板_时钟_SDRAM_串口移植uboot初始化了时钟,配置了支持串口,这一节我们继续修改uboot支持NAND启动。
全栈程序员站长
2022/07/01
5110
S3C2440移植uboot之支持NAND启动「建议收藏」
u-boot关于启动流程
1.1 启动阶段分为3个,bl0,bl1,bl2。下面只是就功能方面对它们做说明,实际设计的时候,也许会对其具体功能做出调整,也就是说,这几个阶段的划分是就功能而言的,不能看得太死。
DS小龙哥
2022/01/07
5550
u-boot关于启动流程
2.移植uboot-添加2440单板,并实现NOR、NAND启动
然后将smdk2440下的smdk2410.c改为smdk2440.c,以及修改更改好的Makefile
诺谦
2019/05/24
5810
赶紧收藏!u-boot代码分析与移植
BootLoader的目标是正确调用内核的执行,由于大部分的BootLoader都依赖于CPU的体系结构。因此大部分的BootLoader都分为两个步骤启动。依赖于CPU体系结构(如设备初始化等)的代码都放在stage1。而stage2一般使用C语言实现,能够实现更加复杂的功能,代码的可移植性也提高。
混说Linux
2022/07/14
7970
赶紧收藏!u-boot代码分析与移植
展讯平台uboot启动流程
start.S代码结构 u-boot的stage1代码通常放在start.S文件中,用汇编语言,主要实现功能如下:
233333
2020/02/12
1.2K0
Uboot 大全 | uboot 启动流程(二)
uboot在初始化完成后会为用户提供一个命令行交互接口,用户可通过该接口执行uboot定义的命令,以用于查看系统状态,设置环境变量和系统参数等。为了方便对硬件和驱动的管理,uboot还引入了类似linux内核的设备树和驱动模型特性。当然,为了增加系统的可配置性、可调试性以及可跟踪性等,它还支持环境变量、log管理、bootstage统计以及简单的ftrace等功能。下面将对这些特性做一简单的介绍。
刘盼
2023/01/05
2.1K0
Uboot 大全 | uboot 启动流程(二)
26000字剖析uboot启动过程
最先执行的是汇编文件start.S,这个文件跟架构有关,例如芯片架构是arm926ejs,那路径就在*arch/arm/cpu/start.S*。
哆哆jarvis
2023/03/24
1.9K0
Android启动流程——1序言、bootloader引导与Linux启动
前面讲解的很多内容都很抽象,所以本次系列决定"接点地气",准备开始讲解大家熟悉的Activity了,为了让我以及大家更好的理解Activity,我决定本系列的课程主要分为4大流程和2大模块。 4大流程如下:
隔壁老李头
2018/08/30
5.4K0
Android启动流程——1序言、bootloader引导与Linux启动
【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)
博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795
韩曙亮
2023/03/27
4.6K0
【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)
记一次uboot升级过程的两个坑
之前做过一次uboot的升级,当时留下了一些记录,本文摘录其中比较有意思的两个问题。
zqb_all
2020/06/22
1.1K0
linux系统移植的一般过程_内核移植的基本步骤
在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛。性能优良、源码开放的Linux具有体积小、内核可裁减、网络功能完善、可移植性强等诸多优点,非常适合作为嵌入式操作系统。一个最基本的Linux操作系统应该包括:引导程序、内核与根文件系统三部分。
全栈程序员站长
2022/11/08
8K0
linux系统移植的一般过程_内核移植的基本步骤
相关推荐
uboot各种目录下的文件作用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档