Linux下 修改访问uboot环境变量分区内容

【系统移植】uboot 通过 NFS 加载根文件系统(二) —— 修改环境变量 bootcmd、bootargs 阅读详情

关于Linux下 修改访问uboot环境变量分区内容补充!

时间:2018年03-21

背景:项目需要在Linux下也能修改flash分区中的env环境变量

一、引言

问:uboot下可以通过命令访问和修改环境变量,在Linux系统下该怎样访问这些数据?

答:用uboot提供的fw_printenv工具


二、该怎么做?

1、下载新版本的uboot,在uboot/tools/下可看见env/ 目录,里面存放的就是该工具的源码

2、编译fw_printenv工具

在uboot顶层目录下编译该工具: make CROSS_COMPILE=arm-linux- env

3、安装fw_printenv工具
  到/tools/env目录中,将编译好的fw_printenv拷贝到目标机的文件系统中/bin/,并通过"ln -s fw_printenv fw_setenv",创建一个fw_setenv到fw_printenv的软链接。

4、配置fw_env.config文件

    请将uboot/tools/env/fw_env.config文件拷贝到目标机的文件系统的/etc目录下。然后结合uboot配置中定义的ENV区和Linux下mtd分区的情况修改配置文件。具体的修改方法见fw_env.config文件中的说明及/tools/env/README文件。

    说明:在使用此工具时,需要注意fw_env.config很重要,如果配置不对,那么将出现错误!!因为我用的是mmc卡,而不是传统的nand flash或norflash,因此在/tools/env/README中的说明对于我便有点出入,不太合适。为此,在认真阅读fw_printenv代码之后才发现原来是因为fw_env.config配置有点问题。下面给出对于mmc卡作为存储设备的,fw_env.config配置:

# Configuration file for fw_(printenv/setenv) utility.
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
# Futhermore, if the Flash sector size is ommitted, this value is assumed to
# be the same as the Environment size, which is valid for NOR and SPI-dataflash

# NOR example
# MTD device name       Device offset   Env. size       Flash sector size       Number of sectors
#/dev/mtd1              0x0000          0x4000          0x4000
#/dev/mtd2              0x0000          0x4000          0x4000

# MTD SPI-dataflash example
# MTD device name       Device offset   Env. size       Flash sector size       Number of sectors
#/dev/mtd5              0x4200          0x4200
#/dev/mtd6              0x4200          0x4200

# NAND example
#/dev/mtd0              0x4000          0x4000          0x20000                 2

# Block device example
# device name           env_offset      Env.bin_size    Env.bin_size    Env_partition_sectors        
/dev/mmcblk0            0x3000000       0x20000         0x20000         0x8000
请注意最后/dev/mmcblk0部分。


三、fw_printenv工具的使用

fw_printenv使用起来和uboot下的printenv和setenv指令是一模一样的。


四、问题补充!

1、在进行fw_printenv操作时,发现fw_printenv工具在读取env分区时,env分区的第一个uint32为env的crc32的校验码存放区间。

2、fw_printenv在读取env分区时,如果env.cfg一开始有注释,如下图


那么其生成的env.bin在crc32校验码后面为0,此时fw_printenv在读env内容时,没有任何内容打印出来,这个是其工具代码没有做好,其原代码如下:

if (fw_env_open())
		return -1;

	if (argc == 1) {		/* Print all env variables  */
		for (env = environment.data; *env; env = nxt + 1) { //如果crc32校验码后面为0,那么*env会为0,则循环会直接退出
			for (nxt = env; *nxt; ++nxt) {                //所以就不会打印任何内容,解决办法是,找到0以后的位置,从那里开始
				if (nxt >= &environment.data[ENV_SIZE]) {//就可以了
					fprintf (stderr, "## Error: "
						"environment not terminated\n");
					return -1;
				}
			}

			printf ("%s\n", env);
		}
		return 0;
	}

替换代码:

if (argc == 1) {
		for(j=0,env = environment.data;!(*env);j++)
			env = environment.data + j;
		/* Print all env variables  */
		for (; *env; env = nxt + 1) {
			for (nxt = env; *nxt; ++nxt) {
				if (nxt >= &environment.data[ENV_SIZE]) {
					fprintf (stderr, "## Error: "
						"environment not terminated\n");
					return -1;
				}
			}
			printf ("%s\n", env);
		}
		return 0;
	}

3、fw_setenv 时提示Warning: Bad CRC, using default environment

这个就是配置文件没配好的结果。





【嵌入式linux】uboot的env加密存储和解密加载 记录一种env分区的加密和解密加载方法 阅读详情

相关推荐

【系统移植】SD卡烧录uboot、linux内核、根文件系统

【系统移植】SD卡烧录uboot、linux内核、根文件系统

challenglistic的博客 7792

【无标题】

I.MX6UL/ULL内部有个以太网MAC外设,也就是ENET,需要外接一个PHY芯片来实现网络通信功能,也就是内部MAC+外部PHY芯片的方案。大家可能听过DM9000这个网络芯片,在一些没有内部MAC的CPU中,比如三星的2440,4412等,就会采用DM9000来实现联网功能。DM9000提供了一个类似SRAM的访问接口,主控CPU通过这个接口即可与DM9000进行通信,DM9000就是一个MAC+PHY芯片。

hktkfly6的专栏 810

uboot与Linux内核的MTD分区同步指南:如何避免启动时的分区冲突

本文深入探讨了U-Boot与Linux内核MTD分区同步的关键技术,详细解析了分区冲突的根源及解决方案。通过对比U-Boot环境变量与设备树的分区定义差异,提供实战配置示例和调试技巧,帮助开发者避免常见的启动问题,确保嵌入式系统稳定运行。

berry的博客 995

u-boot环境变量设置

u-boot的环境变量设置和修改

weixin_45591821的博客 1252

深入解析uboot中MTD分区的实现与优化策略

本文深入解析uboot中MTD分区的实现与优化策略,涵盖基础概念、环境变量配置、内核一致性保障及高级优化技巧。通过实战案例展示如何解决分区对齐、擦除块边界等常见问题,并提供动态分区、写保护等创新方案,帮助开发者提升嵌入式系统存储管理效率。

weixin_29168393的博客 450

uboot环境变量擦除之烧录工具擦除flash mtd0分区

烧录工具擦除flash mtd0分区

菜鸡搞计算机 366

uboot默认环境变量修改

U-BOOT通过修改源码来修改环境变量

qq_39525606的博客 8165

Emotion-LLaMA实战指南:从零构建多模态情感识别系统(附Python代码)

本文提供了Emotion-LLaMA多模态情感识别系统的实战指南。通过详细的步骤,指导读者从零搭建开发环境、运行本地Demo、理解模型架构,并完成数据处理与模型训练。该创新模型融合视觉、听觉与文本信息,实现更精准、接近人类理解的情感分析与推理,并附有完整的Python代码实现。

weixin_29094775的博客 416

如何在Linux Kernel种修改Uboot环境变量 fw_printenv

有些时候我们在进入了Linux之后,依然需要修改Uboot的环境变量来达到我们需要的一些功能,这一点Uboot很早就替我们想到了。提供了fw_printenv工具

qq_34744658的博客 2205

华为CNA VRM搭建(使用vmware worfstartion搭建)

华为CNA和VRM在 vmware workstation安装使用

weixin_70595351的博客 1810

双目视觉入门实战:用Matlab标定相机,再到Python OpenCV完成测距的完整链路

本文详细介绍了双目视觉技术的完整实现流程,从Matlab相机标定到Python OpenCV测距的全链路实践。重点解析了Matlab与OpenCV的参数转换技巧,以及立体校正、视差计算等关键步骤的代码实现,帮助开发者快速掌握双目测距系统的搭建方法。

weixin_29166013的博客 445

linux下使用fw_printenv读取、fw_setenv修改uboot环境变量

fw_setenv和fw_printenv共用一个文件,只是通过程序名来区分不同功能,所以我们在开发板创建一个fw_setenv的软连接就可以了。得到fw_printenv和fw_setenv后还不能正常使用,还需要把tools/env/fw_env.config拷到板子/etc目录下。这些都配置对了之后就可以使用fw_printenv和fw_setenv进行读取和修改uboot环境变量分区的变量了。编译完后,tools/env下面就有fw_printenv,把它拷到板子上就行了。配置完就可以开始编译了。.

omnibots的博客 5718

DrissionPage实战:5分钟搞定京东滑块验证码自动登录(附完整轨迹生成代码)

本文详细介绍了如何使用DrissionPage工具实现京东滑块验证码的自动化登录,包括环境配置、滑块缺口识别、拟人化轨迹生成算法及完整登录流程。通过物理运动学模型和智能识别技术,有效提升验证码破解成功率,适用于电商自动化场景。

weixin_29229055的博客 244

Linux系统移植:官板 uboot 修改(上)

Linux系统移植:官板 uboot 修改(上)

嵌入式学习记录站点 3510

从零开始构建量化价值投资多因子模型

量化价值投资多因子模型的构建目的在于通过系统性的方法,综合考虑多个影响股票价值的因素,以更准确地评估股票的投资价值,为投资者提供科学的投资决策依据。本模型的构建范围涵盖了从因子的选取、数据的处理、模型的建立到模型的评估和优化等一系列过程。通过对历史数据的分析和回测,验证模型的有效性和稳定性,进而应用于实际的投资组合管理中。本文将按照以下结构进行组织:首先介绍量化价值投资和多因子模型的相关背景知识,包括核心概念和联系;接着详细阐述核心算法原理和具体操作步骤,并给出Python代码示例;

AI天才研究院 1243

AD9253 LVDS 高速ADC驱动开发

对应:data clock时钟为500M DDR mode。具体内容:下文的参考博客写的很清楚,我就不详细写了。参考博客clock align模块不完整,本文新增这个模块。3、该款ADC工作在125Msps下,14bit - 2Lane - 1frame 模式。2、查阅Xilinx xapp524手册。1、查阅AD9253器件手册。

CAOXUN_FPGA的博客 2109

linux修改uboot环境变量,修改uboot代码增加环境变量

一 编译kernel使用的开发板为: 盈鹏飞am3354虚拟机里弄好了编译链和 nfs tftp但是没有源码需要拷贝uboot和kernel的源码进去.编译uboot:make com335x_nand_512_configmake ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-编译kernel:1.清理make ARCH=arm CROSS_COMP...

weixin_30325875的博客 1210

扣子Coze触发器使用指南:实现工作流定时执行的完整教程

Coze平台触发器功能详解:定时触发器配置指南 摘要:Coze平台的触发器是实现自动化任务的核心组件,其中定时触发器能够按预设时间自动执行工作流。本指南介绍了定时触发器的配置方法,包括每日、每周、每月及Cron表达式等多种时间设置方式,以及如何关联工作流执行具体任务。文章还提供了健身提醒等实用案例,并涵盖了触发器调试、发布及常见问题解决方案。通过合理配置定时触发器,用户可以轻松实现各类自动化任务,如定时发送消息、数据采集等,大幅提升工作效率。

互联网架构师笔记 1923

IMX6Q的EMMC分区

转载地址:http://blog.sina.com.cn/s/blog_9864c64a0102xpte.html 公司最近有个项目是用飞思卡尔的IMX6Q的核心板,刚好需要给EMMC重新分区,EMMC分区和其他的NADN或者NOR的分区不太一样。我在uboot和kernel(4.1.5)中没有找到任何给EMMC分区的相关内容。在网上找了一天的资料,都说在内核里面的什么什么对应文件,反正我找了半...

kunkliu的博客 3692

基于STM32的DS1302电子时钟电路与程序设计

这个示例代码中,我们使用DS1302_GetTime函数从DS1302芯片获取当前时间,并使用DS1302_GetDate函数获取当前日期。在本文中,我们将介绍如何使用STM32微控制器和DS1302实时时钟芯片来构建一个基于STM32的DS1302电子时钟,并提供相应的程序设计。请注意,以上示例代码仅供参考,具体的实现细节可能会根据使用的开发环境和硬件组件有所差异。在实际应用中,你可能需要根据自己的需求进行适当的调整和修改。为了完整实现电子时钟的功能,你还可以添加其他功能,例如闹钟设置、温度显示等。

UbiSqlserver的博客 1325

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

关于uboot的简介——uboot常见的环境变量

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 2497

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

uboot移植(5)--bootcmd、bootargs环境变量设置

uboot中bootcmd、bootargs环境变量设置

qq_67915669的博客 1609

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android 烧录与修改分区

Android 烧录与修改分区 文章目录Android 烧录与修改分区常用分区uboot烧录设置u-boot环境变量烧录uboot烧录linux进入fastbootdd复制分区查看文件系统大小查看内存大小挂载点源码定义分区大小分区定义文件fastboot分区挂载备注 常用分区 开机启动画面区:splash1 内核区:boot,引导分区 系统区:system,系统分区 数据缓存区:cache,手机执行后存放缓存的分区 用户数据区:userdata,手机执行后存在的数据分区 uboot烧录 设置u-boot环境

onj123的博客 2708

Linux下访问和修改u-boot环境变量

uboot下可以通过命令访问和修改环境变量,但是如果需要在Linux系统下访问这些数据该怎么办呢?其实uboot早就帮我们想好了。 1、编译fw_printenv工具 在你使用的uboot代码中用以下编译指令: make env 这样就可以编译tools/env下的代码,编译出的fw_printenv工具有读写uboot环境变量区的能力。这个工具是针对目标机的...

hiele的博客 2069

Linux_kernel移植uboot07

【1】移植uboot对应固件工程师(固化到硬件里的软件程序)例如:ESP8266WiFi模块,内部集成了TCP/UDP协议栈,是由乐鑫公司固件工程师实现的【2】移植Linux内核对应Linux内核工程师【3】移植根文件系统对应系统集成开发工程师用户名:root密码:123456由于是挂载的根文件系统,所以PC机在/nfs_share目录中创建的文件,在开发板的根中可以找到;在开发板的根中创建的文件,在PC机的/nfs_share目录中可以找到;

qq_45882170的博客 1699

uboot常用命令

uboot常用命令

weixin_46829095的博客 1847
上一篇: uboot修改启动logo-sunxi
下一篇: 问题分析及记录../sysdeps/x86_64/multiarch/../memcpy.S: 没有那个文件或目录.
Chasing_Chasing
博客等级 码龄10年 233粉丝 87原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值