---
title: 嵌入式Linux如何设置获取uboot参数
EntryName: embeded-linux-debug-get-and-set-u-boot-envarg
date: 2020-07-20 09:33:01
categories:
tags:
- uboot
- arm
- linux
- debug
---

章节概述:

uboot下可以通过命令访问和修改环境变量,但是如果需要在arm-Linux系统下访问这些数据该怎么办呢?其实uboot早就帮我们想好了。

步骤

uboot版本:一般在2011年以后的都有(见过2011年版本的uboot教程)

编译fw_printenv

在你使用的uboot代码中用以下编译指令:

make env ARCH=xx CROSS_COMPLIE=xx-

这样就可以编译tools/env下的代码,编译出的fw_printenv工具有读写uboot环境变量区的能力。

安装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文件。

配置一定要和系统的配置相同。

跟据以上三个定义修改fw_env.config,以emmc为例:

# 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/mtd0是专门给环境变量分配的分区。Device offset 是只环境变量在此分区上的偏移,不是指在整个nand上的偏移。

环境变量的烧写地址是 0x80000,大小0x10000,block大小是0x20000。这里因为mtd0分区设定了起始地址是0x80000,所以环境变量在此分区上的偏移地址为 0了

使用 fw_printenv

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

获取uboot环境变量

fw_printenv [[ -n name ] | [ name ... ]]

如果不指定name,fw_printenv会打印出ENV区中的所有环境变量

设置uboot环境变量

fw_setenv name [ value ... ]

如果不指定value,表示要删除这个name的环境变量。

嵌入式Linux如何设置获取uboot参数的更多相关文章

  1. 为什么要有uboot?带你全面分析嵌入式linux系统启动过程中uboot的作用

    1.为什么要有uboot 1.1.计算机系统的主要部件 (1)计算机系统就是以CPU为核心来运行的系统.典型的计算机系统有:PC机(台式机+笔记本).嵌入式设备(手机.平板电脑.游戏机).单片机(家用 ...

  2. 嵌入式linux串口设置(一)

    在linux中,所有的设备文件一般都位于“/dev”下,串口1和串口2对应的设备名依次为“/dev/ttyS0”, “/dev/ttyS1”,而且USB转串口的设备名通常为“/dev/ttyUSB0” ...

  3. 带你全面分析嵌入式linux系统启动过程中uboot的作用

    资料链接:http://mp.weixin.qq.com/s/rYVchD-xy7Bdkc1O3fW2Wg

  4. 嵌入式linux开发uboot启动内核的机制(二)

    一.嵌入式系统的分区 嵌入式系统部署在Flash设备上时,对于不同SoC和Flash设备,bootloader.kernel.rootfs的分区是不同的.三星S5PV210规定启动设备的分区方案如下: ...

  5. 安装ORACLE时在Linux上设置内核参数的含义

    前两天看到一篇Redhat官方的Oracle安装文档,对于Linux内核参数的修改描述的非常清晰. 安装Oracle之前,除了检查操作系统的硬件和软件是否满足安装需要之外,一个重点就是修改内核参数,其 ...

  6. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  7. cookie设置和读取以及获取超链接参数

    function setCookie(c_name, value, expiredays) { var exdate = new Date() exdate.setDate(exdate.getDat ...

  8. 《嵌入式Linux基础教程学习笔记一》

    常用书目下载地址:http://www.cnblogs.com/pengdonglin137/p/3688029.html 第二章 1.进程上下文和中断上下文(Page20) 当应用程序执行系统调用, ...

  9. 嵌入式linux系统的构建

    前期工作:a.配置好tftp服务器:在嵌入式的童年中有介绍 b.开发板可以pc,linux 三者可以互相ping通 c.配置好nfs服务器:同样在嵌入式的童年中有介绍 一.嵌入式linux内核的制作( ...

  10. 嵌入式linux和嵌入式android系统有什么区别和联系?

    转自:http://bbs.eeworld.com.cn/thread-430437-1-1.html 这个问题很多人问,尤其是初入嵌入式的菜鸟.其实大家都认为android是java,已经不是lin ...

随机推荐

  1. Codeforces Round 917 (Div. 2)

    A. Least Product 存在 \(a[i] = 0\),\(min = 0\),不需要任何操作. 负数个数为偶数(包括0),\(min = 0\),把任意一个改为 \(0\). 负数个数为奇 ...

  2. 02、Linux 排查

    Linux 分析排查 1.敏感文件信息 1.1.tmp 目录 /tmp:临时目录文件,每个用户都可以对它进行读写操作.因此一个普通用户可以对 /tmp 目录执行读写操作(ls -alt) 筛查 /tm ...

  3. 如何在Docker容器中使用systemctl启动服务

    解决方案:使用--privileged参数初始化容器 docker run -d -p 80:80 -it --privileged centos:centos8 /usr/sbin/init doc ...

  4. Deepin安装Python3

    https://www.jianshu.com/p/0c61bdfb9589 也可以看这篇,本文是这篇的简捷版,均原创 首先,把系统更到最新,并复制下面的代码 sudo apt update 更新软件 ...

  5. Nginx在Windows 10、Ubuntu16.04、Centos7下的安装

    目录 一. Windows 10 安装nginx 二. Ubuntu16.04 安装apt nginx 三. Centos7 yum安装nginx 四. ubuntu/centos编译安装nginx ...

  6. fastposter v2.8.4 发布 电商海报生成器

    fastposter v2.8.4 发布 电商海报生成器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发.贰维海报,图片海报,分享海报贰维码推 ...

  7. kettle使用1-全表导入

    1.新建转换 2.DB连接中,新建数据库连接 3.在输入中,选择表输入 选择连接的数据库和查询的sql的数据 4.再输出中,选择表输出 5.按住shift,建立数据连接 6.匹配数据字段映射

  8. OpenAirInterface,开源的 4G EPS 实现

    目录 文章目录 目录 前文列表 OSA OpenAirInterface OAI 的仿真 物理信道仿真 系统级仿真 OAI 的 SDR LTE 参考文档 前文列表 <USRP B210 软件定义 ...

  9. 10分钟搞定Mysql主从部署配置

    流程 Master数据库安装 Slave数据库安装 配置Master数据库 配置Slave数据库 网络信息 Master数据库IP:192.168.198.133 Slave数据库IP:192.168 ...

  10. java学习之旅(day.16)

    集合框架 集合 集合:对象的容器,创建的对象就存储在集合中.集合定义了对多个对象进行操作的常用方法,可实现数组的功能 集合和数组的相同点:都是容器 集合和数组的区别: 数组定义后长度固定,集合长度不固 ...