U-boot 启动流程分析 5

嵌入式软件开发培训笔记——boot原理与u-boot 基于Cortex_A8核的S5PC100芯片 一、boot原理 1、解决系统启动 (参考s5pc100手册 --->  2.1节 irom code)     The boot loader is divided into the BL0(1st boot loader) and the BL1(2nd boot loader).     • BL0 which is placed in iROM loads BL1 from 阅读详情

run_main_loop工作流程介绍

前面几篇文章介绍了uboot的代码执行流程,下面主要介绍下run_main_loop函数,它是board_init_r最后调用的一个函数,执行倒计时执行设置的bootcmd,如果倒计时被打断会进入uboot的console。

run_main_loop只调用了2个函数,最后死循环调用main_loop

static int run_main_loop(void)
{
#ifdef CONFIG_SANDBOX
	sandbox_main_loop_init();
#endif
	/* main_loop() can return to retry autoboot, if so just run it again */
	for (;;)
		main_loop();
	return 0;
}

main_loop就是关键,进行boot stage的设置,初始化hash shell,获取环境变量,获取delay数值和bootcmd,进行倒计时

void main_loop(void)
{
	const char *s;
	
	/*  设置boot stage */
	bootstage_mark_name(BOOTSTAGE_ID_MAIN_LOOP, "main_loop");

	if (IS_ENABLED(CONFIG_VERSION_VARIABLE))
		env_set("ver", version_string);  /* set version variable */

	/* hash shell的初始化 	   */
	cli_init();

	if (IS_ENABLED(CONFIG_USE_PREBOOT))
		run_preboot_environment_command(); //获取环境变量preboot的内容,preboot是一些预启动命令。

	if (IS_ENABLED(CONFIG_UPDATE_TFTP))
		update_tftp(0UL, NULL, NULL); //Auto-update from TFTP

	/* 获取uboot启动倒计时时间保存在stored_bootdelay,获取bootcmd参数 */
	s = bootdelay_process();
	if (cli_process_fdt(&s)) //从fdt里面获取是否要支持secure boot
		cli_secure_boot_cmd(s);
	
	/* 倒计时处理,倒计时完成后auto boot,倒计时被打断进入下面的cli_loop中   */
	autoboot_command(s);

	/* 如果uboot倒计时被打断,就进入这里,处理uboot console输入的命令,死循环,不再返回了 								   */
	cli_loop();
	
	panic("No CLI available");
}

下面简要介绍几个关键的函数

1. autoboot_command, abortboot中执行倒计时按键检测,有按键返回,没有按键执行bootcmd里面的命令。
void autoboot_command(const char *s)
{
	debug("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");

	if (s && (stored_bootdelay == -2 ||
		 (stored_bootdelay != -1 && !abortboot(stored_bootdelay)))) {//abortboot是倒计时检测按键函数,有按键返回1,否则返回0
		bool lock;
		int prev;

		lock = IS_ENABLED(CONFIG_AUTOBOOT_KEYED) &&
			!IS_ENABLED(CONFIG_AUTOBOOT_KEYED_CTRLC);
		if (lock)
			prev = disable_ctrlc(1); /* disable Ctrl-C checking */

		run_command_list(s, -1, 0);//执行s里面存储的命令,一般是boot命令,也不一定

		if (lock)
			disable_ctrlc(prev);	/* restore Ctrl-C checking */
	}

	//riscv中没有配置CONFIG_USE_AUTOBOOT_MENUKEY,所以不会走着里,如果上面的逻辑没有执行,将直接返回
	if (IS_ENABLED(CONFIG_USE_AUTOBOOT_MENUKEY) &&
	    menukey == AUTOBOOT_MENUKEY) {
		s = env_get("menucmd");
		if (s)
			run_command_list(s, -1, 0);
	}
}
2. cli_loop, 循环检测console的输入,并解析执行命令
void cli_loop(void)
{
	bootstage_mark(BOOTSTAGE_ID_ENTER_CLI_LOOP);
#ifdef CONFIG_HUSH_PARSER   // riscv 定义了,会走着里,不在返回
	// 进入到parse_stream_outer里面的do while里面,循环进行:接受命令,解析命令,执行命令
	// parse_file_outer -> parse_stream_outer -> 
	// do{1.获取命令:parse_stream->b_getch; 2.查找执行命令run_list->cmd_call->cmd_process->cmd_call}while
	parse_file_outer(); 
	/* This point is never reached */
	for (;;);
#elif defined(CONFIG_CMDLINE)
	cli_simple_loop();
#else
	printf("## U-Boot command line is disabled. Please enable CONFIG_CMDLINE\n");
#endif /*CONFIG_HUSH_PARSER*/
}
S5P4418启动镜像分析 注明:本文是基于深圳九鼎创展X4418开发板,不确定适用于所有厂家4418开发板.          前一章我们简单讲了一下怎么通过硬件来配制芯片启动方式,在硬件配制好后自然要了解一下这个软件启是过程是怎么样的。接触过S5P4412的朋友一定都知道IROM boot启动,烧写启动代码时有四个文件要烧写(BL1,BL2,u-boot.bin,TSZW).其实4418 也一样 阅读详情

相关推荐

NanoPi2-S5P4418启动流程分析

一、S5P4418启动流程:(1)芯片上电后首先自动运行IROM里的代码,IROM是芯片中的一个包含固化代码的ROM存储空间,该段代码主要侦测启动脚的配制,从相应启动介质中抓取16KB代码(Block1-Block32)到ISRAM(0xFFFF0000)中运行。 (2)运行内部ISRAM中的2ndboot.bin代码,复制u-boot.bin到DDR中。 (3)在DDR中运行u-boot.bi

hkchenhao的博客 6916

uboot启动流程之进uboot命令行和启动内核

1.上电进board_init_r--&gt;init_sequence_r--&gt;run_main_loop --&gt;main_loop--&gt;bootdelay_process--&gt;autoboot_command主要就是这么个流程 2.具体怎么决定是进命令行还是启动kernel是在autoboot_command决定的 void autoboot_command(co...

xiongjiao0610的专栏 7161

ARMv8架构u-boot启动流程详细分析(二)

5 u-boot在汇编启动阶段对系统的一些初始化 当cpu交由u-boot接管进入u-boot后,首先会到_start符号出开始执行初始化,并在此期间完成一些必要的系统寄存器相关的初始化,包括保存boot参数,进行地址无关fixed,系统寄存器复位,低平台相关初始化等,启动代码位于arch/arm/cpu/armv8/start.S,入口地址为_start。 首先第一部分代码如下: /**************************************************************

看我眼色行事的博客 6138

【u-boot】u-boot源码分析笔记(09)| u-boot命令行解析过程分析

u-boot的主线运行过程中,在board_init_r()函数进行u-boot初始化过程的最后一个过程则是:。该函数名为run_main_loop()。定义如下: main_loop()函数定义在文件./common/main.c中,如下所示: 由以上代码可见,有两个重要函数: (1)autoboot_command(s)函数:用于检测u-boot启动过程中的【倒计时过程】是否结束。【倒计时】结束之前是否被打断。 (2)cli_loop():该函数是u-boot的命令行处理函数,当我们在u-boot命令

iriczhao的博客 1311

Linux ARM平台开发系列讲解(u-boot篇) 5.1 u-boot的启动流程分析(ARMv8-a)

1. 概述对于嵌入式来说,bootload对于开发人员来说并不陌生,但是在不同芯片架构中,bootload程序所做的一些操作是有所不同的,比如常见的STM32Cotex-M和RK3568之间的启动流程所做的操作是有所不同的。本小节就来概述一下U-boot2. 源码下载U-boot3. 基础知识了解各种架构的bootload,都需要掌握一些基础知识,比如汇编亦或者一些关键词,接下来就先了解一下关键词,方便后续学习起来不会误解。U-boot本质上就是一个单片机程序,所以对应不同的硬件设计和CPU。

DSMGUOGUO的博客 1207

微信小程序反编译实战:用wxappUnpacker获取他人源码的完整流程(附常见报错解决方案)

本文详细解析了微信小程序反编译的完整流程,从缓存提取到源码重构,使用wxappUnpacker工具链实现逆向工程。涵盖环境配置、解密反编译、项目调试等关键步骤,并提供了常见报错解决方案,帮助开发者学习优秀实现方案或进行安全审计。

weixin_42706667的博客 469

uboot启动流程 - 运行到 main_loop

本文分析uboot启动过程

hinewcc的博客 754

高通Camera AWB跳变问题实战:从夕阳场景到参数调优的完整避坑指南

本文深入解析高通Camera AWB跳变问题,特别是在夕阳场景下的色温突变现象。通过分析灰区统计失效、光源混合干扰等成因,提供从参数调优到诊断工具链的完整解决方案,包括动态灰区扩展算法、色温平滑过渡方案及高通平台特定优化技巧,帮助工程师有效解决AWB跳变问题。

sre5engineer的博客 858

u-boot启动流程分析-史上最全最详细

本章主要是详细的分析一下uboot的启动流程,理清uboot是如何启动的。通过对uboot启动流程的梳理,我们就可以掌握一些外设是在哪里被初始化的,这样当我们需要修改这些外设驱动的时候就会心里有数。另外,通过分析uboot的启动流程可以了解Linux内核是如何被启动的。

Wang_XB_3434的博客 4514

使用AI编写测试用例——详细教程

现阶段AI还不能完全替代人工测试用例编写,但如果把AI当做一个提高效率的工具,它将会是一个很强大的辅助。

公众号|软件测试老吴 3万+

宽带波束形成

介绍了宽带波束形成器的时域滤波结构,以及波束响应的计算公式,宽带波束形成器的波束响应可表示为权重向量和方向向量的积

... 2490

uboot(五)—— main_loop

此函数会执行参数 s 指定的一系列命令,也就是环境变量 bootcmd 的命令。位置:u-boot-2022.01/common/main.c 40行。

小伟的博客 1207

【深度学习基础】Temporal Fusion Transformer

从下向上看:全连接(Dense) → ELU(指数线性激活函数(比relu好点,有利于模型收敛)) → 全连接(Dense) → 门控线性单元(Gate)(Gated Linear Units (GLUs)) → Layernorm。:一方面,它可以进行静态上下文变量和动态变量的融合,另一方面,通过门控进行了特征选择操作,门控体现在GLU(门控线性单元)中,用了sigmoid控制信息的通过程度,具有良好的适应性,能够自动选择有效信息,自适应地调整网络复杂性。输入:主输入,可选的上下文向量c。

weixin_41838721的博客 1226

U-Boot v2026.07 移植实战:基于 i.MX6ULL 的 5 步启动流程分析与 3 个关键配置

本文详细解析了U-Boot v2026.07在i.MX6ULL处理器上的移植实战,重点介绍了5步启动流程和3个关键配置。内容涵盖BootROM与U-Boot的协同工作、DDR控制器配置、环境变量存储方案等核心内容,为开发者提供全面的移植指南和调试技巧。

weixin_33841503的博客 411

在群辉(NAS)中安装虚拟机套件(Virtual Machine Manager)

一、在群辉中下载虚拟机套件Virtual Machine Manager ①启用Open vSwitch(网络-->管理--启用Open vSwitch) ②打开“套件中心” ③查找到Virtual Machine Manager套件点击“安装套件” 二、安装虚拟机套件(Virtual Machine Manager) ①打开虚拟机套件运行设置向导 ②选择存储空间...

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2万+

【打卡帖】7日玩转ESP32——(第4日) 串口的输入输出

【福利帖】7日玩转ESP32——(第4日) 串口的输入输出

1377

Atmel SAMA5D3 U-Boot 启动流程简单分析

处理器              ATSAMA5D3x 硬件平台          SAMA5D3x-EK u-boot 版本     u-boot-2012.10 先阅读链接脚本 arch/arm/cpu/u-boot.lds 文件:  OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm") ; 指

mxl_mxl的专栏 4268

YOLOv11 快速入门指南 | 10分钟吃透网络结构与新特性

2024 年 9 月 30 日,Ultralytics 发布了 YOLOv11,这是继 YOLOv8、v9、v10 之后的最新一代实时目标检测模型。 与前几代相比,YOLOv11 在保持“单阶段、实时、端到端”三大基因的同时,带来了两大核心升级:一句话总结:YOLOv11 = 更快 + 更准 + 更少参数。 2.2 微观单元:C3k2 与 C2PSA 2.2.1 C3k2 模块 作用:替换 YOLOv8 的 C2f,做跨阶段局部特征融合。 核心代码(ultralytics/nn/modules/block

shrgegrb的博客 1407

Hi3556v200 u-boot+Liteos方案启动流程分析--5.通用uboot 分析之main_loop

1.前言 关于main_loop的执行可参考下面的文档,文档中解析了bootcmd环境变量的解析及命令的执行原理 参考文档 https://blog.youkuaiyun.com/xiaochuan110/article/details/78973649 uboot命令行解析及运行流程

HZero 324

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

u-boot-2014-07 代码流程分析

机器感知 一个专注于SLAM、Linux、算法等相关技术文章分享的公众号 前言 以前接触到的u-boot启动方式只有Flash和Nand Flash这两种方式,最近接触是SD卡启动方式,SoC是S5P4418,启动方式也第一次接触到,根据S5P4418用户手册可以找到系统使用SD卡启动时,片内iROM内固化的代码会自动映射到0x00地址,也被称为第一阶段引导程序,该程序会检测启动引...

公众号『机器感知』 469

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

告别重新烧录!在RK3568 Android12设备上,如何通过U-Boot实现开机Logo的动态替换

本文详细介绍了在RK3568 Android12设备上通过U-Boot实现开机Logo动态替换的实战方案。通过分析U-Boot启动流程与Logo加载机制,提出无需重新烧录固件的动态修改方法,显著提升维护效率并降低风险。方案包含存储架构设计、U-Boot端实现细节及生产环境部署流程,适用于需要频繁更新Logo的嵌入式场景。

weixin_29163797的博客 276

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SmartQ5/7 u-boot 代码解读

想搞SmartQ5上的多启动,看了官方的u-boot源码,记于此:在lib_arm下的board.c文件中的void start_armboot (void)是汇编过渡到C的第一个函数,在此函数中主要是进行一些初始化工作,像nand,eth及其它设备等,在函数的最后面是一个“死循环”用于处理“终端”上的命令 /* main_loop() can return to retry autoboot, ...

weixin_34018202的博客 172

中兴B860AV5.2M刷机实战:S905L3SB短接与U-Boot深度控制

Android TV盒子刷机本质是嵌入式系统底层调试,核心在于理解SoC启动流程与U-Boot交互机制。晶晨S905L3SB芯片具备双eMMC通道、强绑定DTB及可查询Secure Boot等关键特性,决定了刷机必须绕过黑盒工具,直面硬件差异。通过物理短接UART RXD/GND触发U-Boot命令行,结合mmc分区识别、设备树匹配、ADB sideload等技术路径,实现可控固件烧录。该方法适用于ARM架构安卓设备的定制化部署、教育终端批量运维及嵌入式开发入门实践,尤其适合需掌握启动链路、分区映射与Rec

weixin_33910191的博客 205

展锐UIS7885 5G SoC启动流程全解析:从BootROM到Kernel 5.4

从嵌入式系统启动的基本概念出发,阐述芯片上电后BootROM固化代码的作用,以及逐级加载签名镜像的安全启动机制。在展锐UIS7885平台上,FDL下载模式与U-Boot/ABL的接力、SecureBoot与AVB验证、Kernel 5.4的GKI适配等环节环环相扣,直接影响方案集成与调试效率。理解该流程有助于快速定位启动卡死、UFS识别失败、init挂载错误等常见问题,尤其适用于驱动移植、开机优化和OTA升级场景。文章结合实战经验,梳理了从BootROM到Kernel 5.4的完整链路,并给出常见故障的排查

weixin_29166013的博客 227

Linux学习-UBOOT启动流程

Linux学习-UBOOT启动流程U-Boot 启动流程详解bootz 启动 Linux 内核过程 看完了顶层Makefile的一章,在看u-boot启动流程的起初感觉自己真的很菜,怀疑自己的水平是不是还没有达到能够接触Linux的地步,那晚凌晨3点多醒了,辗转难眠,质问自己是不是适合这一行。想一想这几年,专科学的电气自动化专业,本科学的自动化专业,研究生学的嵌入式方向。回忆当初自己之所以选择电气自动化专业的原因,大概是因为小时候把家里或邻居家的灯泡、洗衣机修好或者将废品站里淘来的赛车里的马达拆了做手持风扇

qq_22038849的博客 533

U-boot启动流程

目录 uboot启动流程如下:  1.首先查看arch/arm/cpu/u-boot.lds链接脚本  2. _start位于arch/arm/cpu/arm920t/start.S  3. 从上面看到, _start会跳转到start_code处  4.然后进入第一个C函数:board_init_f()   1)具体代码如下所示:   2)继续来看board_init_f():   3)继续来看board_init_f():  5.接下来进入重定位   1)start.S的r...

m0_55873979的博客 1万+
上一篇: U-boot 启动流程分析 4
下一篇: bootm调用流程
Runner_Linux
博客等级 码龄6年 17粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值