当前位置: 首页 > article >正文

【RK3588】UBoot环境变量持久化存储实战:从MMC到TF卡的全配置指南

1. 为什么需要持久化存储UBoot环境变量第一次用RK3588开发板调试时我就被环境变量丢失的问题坑过。当时花了两天时间配置好的bootargs参数一次断电重启后就全没了——这种酸爽相信很多嵌入式开发者都体验过。UBoot默认将环境变量存放在内存中就像用粉笔在黑板上写字断电就像有人突然擦掉了黑板。环境变量里存放的都是关键配置内核启动参数、设备树路径、IP地址、串口配置等等。每次上电都要重新设置这些参数就像每次开车都要重新调座椅和后视镜效率低得让人抓狂。把环境变量保存到MMC或TF卡这类非易失性存储介质相当于把配置写在纸上永久保存。实测RK3588的eMMC擦写寿命能达到上万次完全能满足开发调试需求。我经手过的工业级项目中有些设备连续运行三年都没出现过环境变量丢失的情况。不过要注意频繁调用saveenv命令可能会影响存储寿命建议在配置稳定后再执行保存操作。2. 配置前的准备工作2.1 硬件环境确认先确认你的存储介质类型RK3588开发板通常会有以下配置板载eMMC最常见MicroSD/TF卡槽SPI NOR Flash较少用于环境变量存储用mmc list命令可以查看当前可用的MMC设备。我的Firefly RK3588开发板输出如下 mmc list FSL_SDHC: 0 (eMMC) FSL_SDHC: 1 (SD)这里0号设备是eMMC1号是SD卡槽。如果想用TF卡存储环境变量记得提前插入卡片。2.2 源码目录结构建议先熟悉这几个关键文件u-boot/configs/rk3588_defconfig- 主配置文件u-boot/include/configs/evb_rk3588.h- 板级配置头文件u-boot/env/Kconfig- 环境变量配置选项我建议先用git status检查代码是否干净因为后续要修改配置文件。曾经有同事没提交修改就直接编译导致改动被覆盖白白浪费半天时间排查。3. 详细配置步骤3.1 启用MMC存储支持用任意编辑器打开rk3588_defconfig文件我习惯用vimvi u-boot/configs/rk3588_defconfig在文件任意位置添加通常在CONFIG列表末尾CONFIG_ENV_IS_IN_MMCy这个配置项相当于开关告诉UBoot要把环境变量存到MMC设备。保存退出时建议用:wq!强制保存避免权限问题导致修改丢失。有个坑要注意某些旧版本可能要用CONFIG_ENV_IS_NOWHEREn来覆盖默认配置。如果发现saveenv不生效可以检查这个选项。3.2 设置存储设备号接下来修改板级头文件vi u-boot/include/configs/evb_rk3588.h找到环境变量相关配置通常在文件末尾关键参数是#define CONFIG_SYS_MMC_ENV_DEV 0 /* 0对应eMMC1对应SD/TF卡 */ #define CONFIG_ENV_OFFSET (64 10) /* 环境变量偏移地址64KB */ #define CONFIG_ENV_SIZE (16 10) /* 环境变量大小16KB */如果想改用TF卡存储就把DEV值改为1。不过根据我的经验TF卡插拔可能导致设备号变化建议产品开发还是用eMMC更可靠。4. 高级配置与参数优化4.1 环境变量分区规划默认的64KB偏移量是安全值但如果你想自定义位置需要注意必须避开bootloader分区不能与其他分区重叠建议保持16KB大小不变可以用mmc write和mmc read命令测试分区是否可读写。曾经有个项目因为偏移量设在了保留区导致每次保存都会破坏FAT分区表。4.2 多设备备份配置对于高可靠性要求的场景可以配置双备份环境变量。在头文件中添加#define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET CONFIG_ENV_SIZE)这样UBoot会自动维护两份环境变量当主副本损坏时会用备用副本恢复。我在车载设备上实测过即使突然断电也能保证配置不丢失。5. 编译与烧写指南5.1 编译注意事项执行编译前建议先清理旧配置make mrproper make rk3588_defconfig然后正常编译make -j8-j8参数可以用多核加速编译具体数值根据你的CPU核心数调整。编译完成后会在根目录生成u-boot.bin和u-boot-rockchip.bin。5.2 烧录与验证用Rockchip提供的工具烧录以Linux平台为例sudo upgrade_tool ul u-boot-rockchip.bin烧录完成后重启开发板在UBoot命令行测试setenv testvar helloworld saveenv reset printenv testvar如果能看到保存的变量说明配置成功。我习惯用这个流程验证新板子的环境存储是否正常。6. 常见问题排查6.1 saveenv报错分析如果遇到saveenv报错MMC write failed可以按以下步骤排查用mmc dev命令确认当前设备号检查CONFIG_SYS_MMC_ENV_DEV设置是否正确用mmc info查看存储容量是否正常尝试用mmc write手动测试写操作去年有个客户案例最后发现是eMMC的写保护锁被意外触发了用mmc hwreset命令才恢复正常。6.2 环境变量被重置有时会发现环境变量莫名其妙恢复默认值可能原因包括存储介质有坏块供电不稳定导致写入失败偏移地址与其他分区冲突建议用mmc bad命令检查坏块必要时可以更换存储介质或调整偏移量。我在一个光伏逆变器项目上就遇到过因为电源纹波导致eMMC写入失败的情况后来加了电容滤波才解决。

相关文章:

【RK3588】UBoot环境变量持久化存储实战:从MMC到TF卡的全配置指南

1. 为什么需要持久化存储UBoot环境变量 第一次用RK3588开发板调试时,我就被环境变量丢失的问题坑过。当时花了两天时间配置好的bootargs参数,一次断电重启后就全没了——这种酸爽相信很多嵌入式开发者都体验过。UBoot默认将环境变量存放在内存中&#xf…...

Elden Ring 终极帧率解锁与视野优化完整指南:让你的老头环游戏体验焕然一新![特殊字符]

Elden Ring 终极帧率解锁与视野优化完整指南:让你的老头环游戏体验焕然一新!🎮 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项…...

数据协作新范式:提升团队效率的Teable平台技术指南

数据协作新范式:提升团队效率的Teable平台技术指南 【免费下载链接】teable 项目地址: https://gitcode.com/GitHub_Trending/te/teable 在当今数据驱动的工作环境中,团队常常面临数据孤岛、协作低效和流程僵化的挑战。市场部的销售数据散落在多…...

环形数据可视化新范式:circlize从入门到精通

环形数据可视化新范式:circlize从入门到精通 【免费下载链接】circlize Circular visualization in R 项目地址: https://gitcode.com/gh_mirrors/ci/circlize 在数据可视化领域,当面对超过20个类别的复杂关系数据时,传统线性图表往往…...

如何用OpCore-Simplify工具3步完成黑苹果系统自动化配置

如何用OpCore-Simplify工具3步完成黑苹果系统自动化配置 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经被黑苹果系统复杂的OpenCore配置搞…...

惊艳效果可视化:像素幻梦生成过程中间帧扩散去噪动态图解

惊艳效果可视化:像素幻梦生成过程中间帧扩散去噪动态图解 1. 像素幻梦创意工坊概览 Pixel Dream Workshop(像素幻梦创意工坊)是基于FLUX.1-dev扩散模型构建的新一代像素艺术生成工具。与传统AI绘图工具不同,它采用了明亮的16-bi…...

Context Engineering与Prompt Engineering实战:构建高效AI交互系统的核心技术解析

在构建基于大语言模型的交互系统时,我们常常会遇到这样的困扰:用户在多轮对话中反复提及之前的设定,模型却“失忆”了;精心设计的提示词(Prompt)在面对不同用户或不同上下文时,效果时好时坏&…...

别再手动写时间戳了!用SQLAlchemy的Mixin和func.now()自动搞定MySQL记录创建与更新时间

告别手动维护时间戳:SQLAlchemy自动化时间管理的工程实践 每次在模型里手动维护created_at和updated_at字段时,你有没有想过——为什么2023年了我们还要像打字机时代那样处理时间戳?当团队里有三个开发者分别用datetime.now()、datetime.utcn…...

captcha_voucher 亚马逊

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 部分python代码url ".c…...

别再自己写敏感词库了!用uni-sec-check公共模块,5分钟搞定微信小程序内容审核

5分钟极速集成:uni-sec-check赋能微信小程序内容安全审核实战指南 当你的社交类小程序即将上线,用户生成内容(UGC)的安全审核成为必须跨越的门槛时,是否还在为自建敏感词库的维护成本头疼?或是为第三方审核…...

Gazebo模型库实战:从官方资源到自定义编辑

1. Gazebo模型库基础入门 第一次打开Gazebo时,你可能被它自带的那些精致模型惊艳到过。这些现成的模型资源,就是我们常说的Gazebo模型库。它们就像乐高积木一样,能让我们快速搭建出各种仿真场景。模型库默认存放在用户主目录下的.gazebo/mode…...

AI 开发实战:把非结构化文本稳定提取成 JSON

AI 开发实战:把非结构化文本稳定提取成 JSON 一、为什么“抽字段”看起来简单,做起来很不稳? 因为文本里的信息天然不规整: 说法不统一顺序不固定有些字段缺失有些值需要推断 如果只是让 AI “提取一下”,结果很容…...

图解贝叶斯网络:从D-划分到马尔科夫毯的实战解析

1. 贝叶斯网络入门:从概率到图模型 第一次接触贝叶斯网络时,我完全被那些箭头和概率表搞晕了。直到有一天在玩扫雷游戏时突然开窍——这不就是典型的概率推理问题吗?贝叶斯网络本质上就是用图形化的方式,把一堆随机变量之间的条件…...

如何让鼠标光标焕发新生?Bibata的个性化设计革命

如何让鼠标光标焕发新生?Bibata的个性化设计革命 【免费下载链接】Bibata_Cursor Open source, compact, and material designed cursor set. 项目地址: https://gitcode.com/gh_mirrors/bi/Bibata_Cursor 在数字化生活中,鼠标光标是我们与电脑交…...

C++ STL 容器内存优化策略

C STL容器内存优化策略探究 在现代C开发中,STL容器的高效使用直接影响程序性能。随着数据规模扩大,容器的内存管理成为优化重点。本文将深入探讨几种关键策略,帮助开发者减少内存碎片、提升访问效率,并平衡时间与空间成本。 预分…...

yfinance高效工具实战指南:从数据获取到智能分析

yfinance高效工具实战指南:从数据获取到智能分析 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance 在当今数据驱动的世界,获取准确、及时的金融市场数据对于…...

基于CCMusic的音乐推荐系统开发:MySQL数据库集成实践

基于CCMusic的音乐推荐系统开发:MySQL数据库集成实践 引言 音乐推荐系统已经成为现代音乐平台的核心功能,而如何高效存储和管理音乐数据是实现智能推荐的关键。今天我们将探讨如何将CCMusic音乐分类结果与MySQL数据库深度集成,构建一个实用…...

C/C++ snprintf 函数详解

C/C snprintf 函数详解 snprintf 在 C99 中标准化,在固定大小的字符数组中做带长度上限的格式化写入,避免 sprintf 因不检查边界导致的缓冲区溢出。下文说明其原型、返回值语义、与相关 API 的差异及常见用法。 目录 函数原型与参数返回值与截断判定相…...

OpenClaw飞书机器人深度配置:GLM-4.7-Flash对话触发任务详解

OpenClaw飞书机器人深度配置:GLM-4.7-Flash对话触发任务详解 1. 为什么选择OpenClaw飞书GLM-4.7-Flash组合 去年我在团队内部推行自动化工具时,发现三个痛点:一是商业SaaS机器人无法处理敏感数据,二是通用对话机器人缺乏本地操作…...

MySQL 事务锁等待问题定位方案

MySQL事务锁等待问题定位方案 在高并发数据库场景中,事务锁等待是导致性能下降甚至系统卡顿的常见问题。当多个事务同时竞争同一资源时,可能因锁冲突导致事务长时间阻塞,进而影响业务响应。如何快速定位并解决这类问题?本文将介绍…...

Java的java.util.HexFormat格式化

Java十六进制格式化利器:HexFormat详解 在数据处理、网络通信或安全加密领域,十六进制(Hex)格式的转换与展示是常见需求。Java 17引入的java.util.HexFormat类,为开发者提供了标准化、高性能的十六进制处理工具&#…...

基于MATLAB的交通标志识别

基于MATLAB的交通标志识别开车上路最怕错过限速标志,今天咱们聊聊用MATLAB做个能自动识别交通标志的玩意儿。先别急着找深度学习框架,咱们从基础的图像处理套路入手,保准你能看懂还能玩起来。先整点颜色分割试试水。交通标志最明显的特征就是…...

Llama-3.2V-11B-cot教程:如何评估图文对齐质量与推理链可信度

Llama-3.2V-11B-cot教程:如何评估图文对齐质量与推理链可信度 1. 认识Llama-3.2V-11B-cot模型 Llama-3.2V-11B-cot是一个融合了视觉理解和逻辑推理能力的多模态模型。它不仅能看懂图片内容,还能像人类一样进行逐步推理,最终得出合理结论。这…...

效率提升秘籍:快马一键生成notepad官网直达与版本匹配工具

今天想和大家分享一个提升工作效率的小技巧——如何快速获取Notepad的官方下载链接。相信很多开发者都遇到过这样的场景:每次换新电脑或重装系统时,都要手动搜索Notepad官网,然后在一堆下载链接中寻找适合自己系统的版本。这个过程虽然简单&a…...

智能多态员中的接口统一与实现多样

智能多态员中的接口统一与实现多样 在当今快速发展的智能技术领域,智能多态员(如智能助手、机器人或多模态系统)已成为日常生活和工业生产的重要组成部分。它们的核心优势在于能够通过统一的接口与用户交互,同时内部实现却高度多…...

AI 辅助开发实战:基于 Spark 的毕业设计项目高效构建指南

毕业设计季,对于计算机专业的学生来说,既是一次综合能力的考验,也常常伴随着“时间紧、任务重”的焦虑。特别是选择以 Apache Spark 这类大数据处理框架作为毕设核心技术的同学,往往在满怀期待地开始后,很快会陷入一系…...

LoRaWAN大规模部署如何避免空中资源挤兑

LoRaWAN大规模部署如何避免空中资源挤兑?三大核心优化策略详解 引言 随着物联网技术的快速发展,LoRaWAN凭借其远距离传输、低功耗、低成本等优势,已成为智慧城市、智能农业、工业物联网等领域的首选通信技术之一。然而,在实际大规…...

ai辅助开发:快马生成tailscale配置助手,并通过exposure功能实现团队共享

最近在团队协作开发时,遇到了一个很实际的问题:我们需要频繁配置Tailscale网络中的各种服务访问权限,但每次编写ACL规则都要反复查阅文档,效率很低。于是尝试用InsCode(快马)平台的AI能力,做了一个能自动生成配置建议的…...

Notepad++ 高效文本编辑:管理Pixel Dream Workshop海量提示词与参数配置

Notepad 高效文本编辑:管理Pixel Dream Workshop海量提示词与参数配置 1. 为什么选择Notepad管理AI生成内容 如果你经常使用Pixel Dream Workshop这类AI工具,一定会遇到两个头疼问题:一是积累的提示词越来越多,杂乱无章难以管理…...

智能客服多智能体架构实战:知识库问答与情绪感知的协同优化

最近在优化公司智能客服系统时,遇到了一个典型难题:系统既要能快速准确地从知识库中找到答案,又要能实时感知用户的情绪变化,以便提供更人性化的服务。传统的单体架构把这两件事揉在一起,结果就是性能上不去&#xff0…...