在linux系统中通过fw_printenv查看和设置u-boot中的环境变量
uboot下可以通过命令访问(printenv)和修改环境变量(setenv),但是如果需要在Linux系统下访问这些数据该怎么办呢?其实uboot早就帮我们想好了。
1、编译fw_printenv工具
source /opt/poky/environment...
创建交叉编译环境。
更改u-boot/tools/env/Make
添加CC
CC=aarch64-poky-linux-gcc -march=armv8-a -mtune=cortex-a57.cortex-a53 --sysroot=/opt/poky/2.4.2/sysroots/aarch64-poky-linux
override HOSTCC = $(CC)
$(warning $(HOSTCC))
编译(根据自己平台):
make ARCH=arm CROSS_COMPILE=aarch64-poky-linux- envtools
2、安装fw_printenv工具
到/tools/env目录中,将编译好的fw_printenv拷贝到目标机的文件系统中,并通过"ln -s fw_printenv fw_setenv",创建一个fw_setenv到fw_printenv的软链。
这个工具还需要一个配置文件,以获取uboot的ENV区域的位置信息。默认状态下,请将fw_env.config文件拷贝到目标机的文件系统的/etc目录下。然后结合uboot配置中定义的ENV区和Linux下mtd分区的情况修改配置文件。具体的修改方法见fw_env.config文件中的说明及/tools/env/README文件。
3、fw_printenv工具的使用
其实fw_printenv使用起来和uboot下的printenv和setenv指令是一模一样的。
打印uboot环境变量:
fw_printenv [[ -n name ] | [ name ... ]]
如果不指定name,fw_printenv会打印出ENV区中的所有环境变
4.当指定的环境变量大小不正确时提示,这里是imx8mm
#:/etc# fw_printenv
Warning: Bad CRC, using default environment
其中device name, Device offset,Env size应该分别对应于uboot源码目录中include/configs/imx8mm_evk.h或者u-boot.cfg相关文件中的
#define CONFIG_ENV_IS_IN_MMC 1
#define CONFIG_ENV_OFFSET (64 * SZ_64K)
#define CONFIG_ENV_SIZE 0x1000
# Block device example
device name Device offset Env. size
/dev/mmcblk1 0x400000 0x1000
注意:
如果还有问题,应该是本来就没有保存环境变量,请参考《启动时出现错误:*** Warning - bad CRC or NAND》这个笔记
5. 设置uboot环境变量:
fw_setenv name [ value ... ]
如果不指定value,表示要删除这个name的环境变量。
6. 另外如果你想直接在你的应用程序中使用这个库文件,可以把目录下的lib.a链接到你的应用中。
导出的函数有
|
1
2
3
4
5
6
7
8
9
|
extern int fw_printenv(int argc, char *argv[]);extern char *fw_getenv (char *name);extern int fw_setenv (int argc, char *argv[]);extern int fw_parse_script(char *fname);extern int fw_env_open(void);extern int fw_env_write(char *name, char *value);extern int fw_env_close(void);extern unsigned long crc32 (unsigned long, const unsigned char *, unsigned); |
根据自己需要,使用起来非常方便。
唯一需要注意的是操作是加文件锁,防止多个进程写入,数据出错,大概流程如下,具体可以参考 fw_env_main.c
|
1
2
3
4
5
6
7
8
9
10
|
const char *lockname = "/var/lock/" CMD_PRINTENV ".lock";int lockfd = -1;lockfd = open(lockname, O_WRONLY | O_CREAT | O_TRUNC, 0666);flock(lockfd, LOCK_EX);//set or read uboot envflock(lockfd, LOCK_UN); |
在linux系统中通过fw_printenv查看和设置u-boot中的环境变量的更多相关文章
- Linux系统采用netstat命令查看DDOS攻击的方法
Linux系统采用netstat命令查看DDOS攻击的方法 来源:互联网 作者:佚名 时间:07-05 15:10:21 [大 中 小] 这篇文章主要为大家介绍了Linux系统采用netstat命令查 ...
- Linux系统使用ss命令查看端口状态
Linux系统使用ss命令查看端口状态 目录 1.可用工具 2.ss帮助 2.1 选项分类说明 2.2 过滤选项family 2.3 过滤选项state 2.4 状态之间的关系 3.ss的使用 3.1 ...
- 如何在cmd命令行中查看、修改、删除与添加环境变量,语法格式例子:set path;echo %APPDATA%
如何在cmd命令行中查看.修改.删除与添加环境变量 首先明确一点: 所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改.也就是说当关闭此cmd命令行窗口后,将不再起作用.永久性修 ...
- Linux 系统下10个查看网络与监听的命令
下面列出来的10个基础的每个linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslook ...
- linux 系统 解决php -v查看到版本于phpinfo()打印的版本不一致问题
发现问题的原因: 安装zip扩展后,配置成功,但是使用gitlab合并的时候发生错误,经检查,使用phpinfo打印出来的php版本为7.1,而使用linux度服务器 运行 php -v的版本却是5. ...
- Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
一.JDK1.8 环境搭建 1.上传文件解压 [root@localhost mysoft]# tar -zxvf jdk-8u161-linux-x64.tar.gz [root@localhost ...
- Windows 如何在cmd命令行中查看、修改、删除与添加环境变量
转自:http://www.cnblogs.com/saptechnique/archive/2013/02/17/2914222.html 首先明确一点: 所有的在cmd命令行下对环境变量的修改只对 ...
- Linux系统如何将某一程序设置为开机自启动
文章来源:百度知道. Linux开机启动程序详解 我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍L ...
- 如何在 cmd 命令行中查看、修改、删除与添加环境变量
Windows 和 linux 区别 一.查看所有环境变量的名称和值:Linux下:exportWindows下:set二.根据名称查该环境变量的值:Linux下:echo $环境变量名比如:echo ...
随机推荐
- centos7 添加环境变量
修改/etc/profile文件使其永久性生效,并对所有系统用户生效 PATH=$PATH:/usr/local/php/bin export PATH source /etc/profile
- 小程序商城Mall,打造最佳SpringCloudAlibaba最佳实践
背景 由于一路一来看过很多的技术体系,也见证一些技术体系停止维护,想用自己觉得比较好的一套技术体系来做一个分布式微服务系统,包括开发层面,中间件层面和运维层面的技术,作为自己希望的一个技术团队里的技术 ...
- APP打开(三)—激活率提升20%的思考
激活是APP拉新后的一个重要环节.通常,我们希望用户打开我们的APP之后,能够顺利的被激活,从而留下来成为我们的忠实用户. 激活一词,就跟北斗星指标一样,对每个产品来说都是不一样的.有些APP一旦打开 ...
- WSL2 + Docker + IDEA 开发到发布一步到位
摘要:本文主要介绍了如何用WSL2.Docker.IDEA将Java应用从开发到发布一步到位. 上次介绍了如何在Windows(WSL2) Linux子系统中搭建搭建Docker环境,这次将利用上次搭 ...
- pyqt5按钮退出程序
import sys from PyQt5.QtWidgets import QHBoxLayout,QMainWindow,QApplication,QPushButton,QWidget clas ...
- kettle插入更新流程
kettle转换步骤工作组件 这里有四个类构成了这个kettle 步骤/节点,每一个类都有其特定的目的及所扮演的角色. TemplateStep: 步骤类实现了StepInteface接口,在转换运 ...
- 《Clojure编程》笔记 第2章 函数式编程
目录 背景简述 第2章 函数式编程 背景简述 本人是一个自学一年Java的小菜鸡,理论上跟大多数新手的水平差不多,但我入职的新公司是要求转Clojure语言的.坊间传闻:通常情况下,最好是有一定Jav ...
- 【Luogu】 P6274 [eJOI2017]六 题解
首先,题目说了最多\(6\)个质因数. 如此小的数据范围,不是状压还是啥? 然后,我们可以发现一个性质:只要两个因数有相同的质因数(不管次数是多少),两者就不互质. 这启示我们用一个二进制数来表示一类 ...
- UOJ Round总结
#22. [UR #1]外星人 一开始随便搞出第一问答案,很显然的性质对$x$有变化的$a$一定是递减的,就拿一个桶直接记录可以达到的值 然后我开始想第二问,一开始想直接在这个桶上统计答案,然后发现不 ...
- C/C++四种取整函数floor,ceil,trunc,round
处理浮点数操作常用到取整函数,C/C++提供了四种取整函数 floor函数 floor函数:向下取整函数,或称为向负无穷取整 double floor(double x); floor(-5.5) = ...