uboot 环境变量初始化流程

初始化在board_f.c,读取flash环境变量到ddr内在board_r.c

arch/arm/cpu/armv8/start.Sbl	_mainarch/arm/lib/crt0_64.S  xxxxbl	board_init_fxxxxb	board_init_r	commonboard_f.c static const init_fnc_t init_sequence_f[] = {setup_mon_len,arch_cpu_init,		/* basic arch cpu dependent setup */mach_cpu_init,		/* SoC/machine dependent CPU setup */initf_dm,arch_cpu_init_dm,#if defined(CONFIG_BOARD_EARLY_INIT_F)board_early_init_f,#endifenv_init,		/* initialize environment */   //这里初始化环境变量init_baud_rate,		/* initialze baudrate settings */serial_init,		/* serial communications setup */console_init_f,		/* stage 1 init of console */display_options,	/* say that we are here */display_text_info,	/* show debugging info if required */xxxxNULL,};env/env.c int env_init(void){struct env_driver *drv;int ret = -ENOENT;int prio;for (prio = 0; (drv = env_driver_lookup(ENVOP_INIT, prio)); prio++) {if (!drv->init || !(ret = drv->init()))env_set_inited(drv->location);debug("%s: Environment %s init done (ret=%d)\n", __func__,drv->name, ret);}if (!prio)return -ENODEV;if (ret == -ENOENT) {gd->env_addr = (ulong)&default_environment[0];gd->env_valid = ENV_VALID;return 0;}return ret;}include/env_default.h commonboard_r.cstatic init_fnc_t init_sequence_r[] = {#ifdef CONFIG_ARCH_EARLY_INIT_Rarch_early_init_r,#endifpower_init_board,#ifdef CONFIG_MTD_NOR_FLASHinitr_flash,#endifINIT_FUNC_WATCHDOG_RESET#if defined(CONFIG_PPC) || defined(CONFIG_M68K) || defined(CONFIG_X86)/* initialize higher level parts of CPU like time base and timers */cpu_init_r,#endif#ifdef CONFIG_CMD_SFinitr_snor,#endif#ifdef CONFIG_CMD_NANDinitr_nand,#endif#ifdef CONFIG_CMD_ONENANDinitr_onenand,#endif#ifdef CONFIG_MMCinitr_mmc,#endifinitr_env,   //这里重定位环境变量xxxxx#ifdef CONFIG_POSTinitr_post,#endifrun_main_loop,};static int initr_env(void){/* initialize environment */if (should_load_env())env_relocate();elseenv_set_default(NULL, 0);return 0;}env/common.c void env_relocate(void){if (gd->env_valid == ENV_INVALID) {#if defined(CONFIG_ENV_IS_NOWHERE) || defined(CONFIG_SPL_BUILD)/* Environment not changable */env_set_default(NULL, 0);#elsebootstage_error(BOOTSTAGE_ID_NET_CHECKSUM);env_set_default("bad CRC", 0);#endif} else {env_load();     // 这里读环境变量到DDR }}env/sf.c U_BOOT_ENV_LOCATION(sf) = {.location	= ENVL_SPI_FLASH,ENV_NAME("SPI Flash").load		= env_sf_load,#ifdef CMD_SAVEENV.save		= env_save_ptr(env_sf_save),#endif#if defined(INITENV) && (CONFIG_ENV_ADDR != 0x0).init		= env_sf_init,#endif};env_sf_loadret = spi_flash_read(env_flash,CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, buf);ret = env_import(buf, 1);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构笔记第3篇:双向链表

1、双向链表的结构 注意:这里的 "带头" 跟前面我们说的 "头结点" 是两个概念,实际前面的在单链表阶段称呼不严谨,但是为了同学们更好的理解就直接称为单链表的头结点。 带头链表里的头结点,实际为 "哨兵…

勒索病毒--认知与防范

免责声明:本文仅做技术交流与学习... 目录 应急响应-勒索病毒 1、什么是勒索病毒? 勒索病毒是一种新型电脑病毒,主要以RDP爆破、邮件、程序木马、网页挂马的形式进行传播。该病毒性质恶劣、危害极大,一旦感染将给用户带来无法估量的损失。…

已解决 SyntaxError: invalid syntax,Python报错原因和解决方案。

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 这篇文章带大家…

2065.最大化一张图中的路径价值

解题思路 枚举 枚举从0开始所有可能的路径,代码能力就是如何枚举,递归回溯 递归函数:当前节点,当前路径总时间,节点的价值之和。对相联通的节点进行递归搜索,如果回到节点0,则更新。 超过总时…

精灵图和base64的区别

精灵图:把多张小图整合到一张大图上,利用定位的一些属性把小图显示在页面上,这样访问页面的时候,可以减少请求次数,提高加载速度。 base64:这是一种传输8bit字节代码的编码方式,是一种用64个字符…

C++编程(七)继承

文章目录 一、继承(一)概念(二)语法格式(三)通过子类访问父类中的成员1. 类内2. 类外 (四)继承中的特殊成员函数1. 构造函数2. 析构函数3. 拷贝构造函数4. 拷贝赋值函数 二、多重继承…

怎样把热门抖音短视频下载保存到手机相册?

怎样把热门抖音短视频下载保存到手机相册? 1、在手机上打开抖音短视频APP; 2、打开后搜索或找到要下载保存的抖音短视频; 3、打开短视频后,点击右则的分享,并滑动找到保存到相册; 4、点击后等待完成下载,…

Python实现接糖果小游戏

介绍: 基于Pygame的糖果从屏幕顶部下落的游戏代码。这个游戏包括了一个可以左右移动的篮子来接住下落的糖果,接住糖果会增加得分。 代码: import pygame import random import os# 初始化pygame和设置屏幕大小 pygame.init() screen_width, screen_height 800, 6…

【LeetCode】反转字符串中的单词

目录 一、题目二、解法完整代码 一、题目 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1…

读hugging face的daily paper随笔

hugging face’s daily paper 2024.06.29 OMG-LLaVA 像素级视觉理解、推理。 实现了image-level、object-level、pixel-level的推理和理解。 Step-DPO LLM长链推理的step-wise偏好优化,提高LLM的数学推理能力。 MUMU 引导多模态的图像生成,从多模…

海康视频播放,包含h5和web插件

自行下载 海康开放平台 demo 都写得很清楚,不多描述 1.视频web插件 vue2写法,公共vue文件写法,调用文件即可 开始时需要以下配置,不知道的找对接平台数据的人,必须要,否则播不了 getParameterData: {po…

万字总结随机森林原理、核心参数以及调优思路

万字总结随机森林原理、核心参数以及调优思路 在机器学习的世界里,随机森林(Random Forest, RF)以其强大的预测能力和对数据集的鲁棒性而备受青睐。作为一种集成学习方法,随机森林通过构建多个决策树并将它们的预测结果进行汇总&…

[Day 20] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI在醫療領域的創新應用 隨著科技的快速發展,人工智能(AI)在各行各業的應用越來越廣泛,醫療領域也不例外。AI技術在醫療中的應用不僅提高了診斷的準確性,還改善了病患的治療效果,優化了醫療資源的配置。本…

暴雨来袭,陈赫家变“水帘洞”网友:赫哥滴滴打船吗?

在魔都上海,一场突如其来的暴雨 不仅让街道变成了河流,还悄悄上演了一场现实版的“水帘洞”奇遇 而这场奇遇的主角,竟然是喜剧界的明星——陈赫! 这天,乌云密布,电闪雷鸣 魔都的天空仿佛被捅了个窟窿 雨…

吴恩达《LangChain for LLM Application Development》课程笔记

目录 1. 前言 2. 课程笔记 2.1. 模型、提示和解析器 2.2. LLM记忆,上下文管理 2.3. 链式操作 2.4. 文档问答 2.4.1. stuff 方法 2.4.2. 其他方法 2.5. LLM应用评估 2.6. 代理 2.6.1. 预定义工具 2.6.2. 自定义工具 代码资源: 1. 前言 LangC…

文心一言 VS 讯飞星火 VS chatgpt (293)-- 算法导论21.4 2题

二、证明:每个结点的秩最多为 ⌊lgm⌋ 。如果要写代码,请用go语言。 文心一言: 在数据结构和算法中,当我们谈论“结点的秩”时,这通常与某些特定的数据结构(如B树或B树)相关,其中每…

SSH特性|组成|SSH是什么?

SSH,全称为Secure Shell,是由Internet Engineering Task Force (IETF)的网络工作小组制定的一种网络安全协议。它旨在为网络服务提供安全的远程登录和其他网络服务,如文件传输,端口转发等,以保护数据的机密性和完整性。…

代码随想录算法训练营第40天| 518. 零钱兑换 II、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)

518. 零钱兑换 II 题目链接:518. 零钱兑换 II 文档讲解:代码随想录 状态:不会 思路: 和494.目标和类似,这题属于组合问题,当我们有一个硬币coin时,对于每个金额j,通过添加这个硬币&a…