nuc980 uboot 2017.11 移植:env 保存位置选择问题

news2024/11/27 18:39:21

开发环境

  • Win10 64位

  • ubuntu 20.04

  • 虚拟机 VMware® Workstation 16 Pro

  • 开发板:NK-980IOT(NUC980DK61Y)

  • gcc 交叉编译工具链: ARM 官方 gcc version 11.2.1 20220111

  • NUC980 uboot 版本 :尝试移植到 u-boot-2017.11,官方当前 u-boot 版本为 2016.11

问题描述

  • NK-980IOT 开发板的 Flash 是 SPI Nand Flash,在 u-boot 2017.11 这个版本上,需要做简单的移植才能识别

  • 识别了 SPI Nand Flash 后,发现 没有 saveenv 等命令,并且 系统无法跳转,也就是烧写到 SPI Nand Flash 中的 env.txt 没有生效,是默认的 env 环境变量

NUC980 IBR 20180813
Boot from SPI-NAND
DDR-OK
finish SPI dow▒load

 SPL load main U-Boot from SPI NAND Flash! (May 14 2023 18:07:33)


U-Boot 2017.11-ga356251-dirty (May 14 2023 - 18:07:33 +0800)

CPU: NUC980
Board: NUC980
DRAM:  64 MiB
NAND:  SF: unrecognized JEDEC id bytes: ff, ef, aa
spi_nand: Id could not be mapped
0 MiB
MMC:
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   Net Initialization Skipped
No ethernet found.
=>
  • 跟正常的 u-boot 启动信息对比,这里有个 Using default environment 的提示

解决方法

  • 因为正常移植了 u-boot 2017.05,env 正常,所以对比 默认配置文件:这里是 nuc980_iot_defconfig,发现一致

  • 在代码里面搜索 Using default environment 的提示,发现有个宏没有定义,obj-$(CONFIG_ENV_IS_IN_SPI_FLASH) += env_sf.o,也就是 SPI nand flash env 的操作没有使能编译

  • 【解决方法】:开启 CONFIG_ENV_IS_IN_SPI_FLASH,通过 搜索 ENV_IS_IN_SPI_FLASH,很快找到了配置选项,选择后,重新编译,烧写到板子上,发现 env 变量正常了

在这里插入图片描述

在这里插入图片描述

env 正确启动信息

NUC980 IBR 20180813
Boot from SPI-NAND
DDR-OK
finish SPI dow▒load

 SPL load main U-Boot from SPI NAND Flash! (May 14 2023 18:49:24)


U-Boot 2017.11-gec2249d (May 14 2023 - 18:49:24 +0800)

CPU: NUC980
Board: NUC980
DRAM:  64 MiB
NAND:  info->id[0x21aaef], id[0x2121aaef], info->id_len[3]
spi nand jedec : 0xaa21
SF: Detected W25N01GV with page size 2 KiB, erase size 128 KiB, total 128 MiB
128 MiB
MMC:
info->id[0x21aaef], id[0x2121aaef], info->id_len[3]
spi nand jedec : 0xaa21
SF: Detected W25N01GV with page size 2 KiB, erase size 128 KiB, total 128 MiB
In:    serial
Out:   serial
Err:   serial
Net:   Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot:  0

NAND read: device 0 offset 0x200000, size 0x100000
 1048576 bytes read: OK
## Starting application at 0x00000000 ...

 \ | /
- RT -     Thread Operating System
 / | \     5.0.1 build May  6 2023 22:17:14
 2006 - 2022 Copyright by RT-Thread team
lwIP-2.1.2 initialized!
[I/I2C] I2C bus [i2c0] registered
[I/I2C] I2C bus [i2c2] registered
[I/spinand_flash] Found: [00EFAA21] Winbond 128MB: 2048+64@64@1024.
[I/spinand_flash] Enabled BUF, HWECC. Unprotected.
[I/sal.skt] Socket Abstraction Layer initialize success.
[I/utest] utest is initialize success.
[I/utest] total utest testcase num: (0)
MAC address: 82:06:21:53:94:53
nu_igmp_mac_filter add 224.0.0.1 01:00:5E:00:00:01

小结

  • u-boot 的每个版本,都有一定的变更,所以移植的时候需要注意,尤其是一些【宏定义】的配置问题

  • 当前 nuc980 可以正常的移植到 u-boot 2017.11 版本(前进了一年),后面继续移植到更新的版本

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

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

相关文章

科普 “平均工资又涨了”

周四晚上做了一个图,发了一则朋友圈,科普了一下为什么平均工资一直在涨: 曲线是 drawio 画的,不是类似 geogebra 画的精确数学函数,误差比较大,但大概就是这个意思。 收入应该是无标度分形的幂律分布&am…

孙鑫VC++第三章 4.窗口类、窗口类对象与窗口三者之间关系

目录 1. 创建CWnd 2. WinMain 3. 创建CButton 1. 创建CWnd 模拟CWnd类的封装过程。在解决方案ch04下添加一个新的空项目,项目名称为:WinMain,在项目创建完成后,将WinMain项目设为启动项目。 接下来在WinMain项目中添加一个名…

【C++ 学习 ④】- 类和对象(下)

目录 一、初始化列表 1.1 - 定义 1.2 - 使用初始化列表的原因 1.3 - 成员变量的初始化顺序 二、静态成员 2.1 - 静态成员变量 2.2 - 静态成员函数 三、友元 3.1 - 友元函数 3.2 - 友元类 四、内部类 五、匿名对象 5.1 - 匿名对象的特性 5.2 - 匿名对象的使用场景…

3.View的绘制流程

View是在什么时候显示在屏幕上面的?(如:MainActivity的布局文件activity_main.xml) setContentView最终的结果是将解析的xml文件中的View添加到DecorView中. 那么这个DecorView是什么时候添加到Window(PhoneWindow)的呢? DecorView是在ActivityThread.java的handleResumeA…

2-Zookeeper单机版安装

2-Zookeeper单机版安装 本文介绍的是 Linux 系统下 Zookeeper 安装方式 ① 下载 进入官网 https://zookeeper.apache.org/ 点击下载按钮 进入下载页 https://zookeeper.apache.org/releases.html 后选择 最新的稳定版本,如下: 3.7.1 为最新的稳定版本…

号称分割一切的图片分割模型开源了——Segment Anything Meta SAM

头条号:人工智能研究所 微信号:启示AI科技 微信小程序:AI人工智能工具 以前,要解决任何类型的分割问题,有两类方法。第一种是交互式分割,允许分割任何类别的对象,但需要人通过迭代细化掩码来指导。第二种,自动分割,允许分割提前定义的特定对象类别(例如,猫或椅子),…

【计算机系统】指令

leaq指令 一元指令 二元指令 例子 指令addq 指令subq 指令incq 指令subq 移位指令 移位指令用途 特殊运算指令

LitCTF2023 郑州轻工业大学首届网络安全赛 WP 部分

LitCTF2023 郑州轻工业大学首届网络安全赛 WP 部分 前言:Web:我Flag呢?导弹迷踪:Follow me and hack me:PHP是世界上最好的语言!!作业管理系统:Vim yyds:Ping&#xff1a…

Java基础-面向对象总结(2)

这篇文章主要讲解 Java中的 变量方法代码块访问修饰限定符Java 是值传递,还是引用传递?类和对象的生命周期..... 希望给您带来帮助 目录 变量 成员变量与局部变量的区别 静态变量和实例变量的区别?静态方法、实例方法呢? 可以…

数据分析06——Pandas中的数据抽取

1、前言: 在Pandas中进行数据抽取主要有两种方法,一种是loc方法,一种是iloc方法;在获取数据时可以获取的数据有三种形式,一种是Series类型,一种是DataFrame类型,还有一种是直接获取数据值&…

Nginx make报错处理

文章目录 make报错:fatal error:sys/sysctl.h:No such file or directory问题处理 make 报错:error: this statement may fall through [-Werrorimplicit-fallthrough]问题处理 make报错:error: struct crypt_data has no member named curre…

DCGAN--Keras实现

文章目录 一、Keras与tf.keras?二、keras中Model的使用三、使用Keras来实现DCGan1、导入必要的包2.指定模型输入维度:图像尺寸和噪声向量 的长度3、构建生成器4、构造鉴别器5、构建并编译DCGan6、对模型进行训练7、显示生成图像8、运行模型 总结 一、Ker…

力扣sql中等篇练习(二十)

力扣sql中等篇练习(二十) 1 寻找面试候选人 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 分为以下两者情况,分别考虑,然后union进行处理(有可能同时满足,需要去进行去重) # ①该用户在 三场及更多…

软件测试八股文,软件测试常见面试合集【附答案】

PS:加上参考答案有几十万字,答案就没有全部放上来了,高清打印版本超过400多页,评论区留言直接获取 1、你的测试职业发展是什么? 2、你认为测试人员需要具备哪些素质 3、你为什么能够做测试这一行 4、测试的目的是什么? 5、测…

一图看懂 attrs 模块:一个在类定义时可替换 `__init__`, `__eq__`, `__repr__`等方法的样板,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 attrs 模块:一个在类定义时可替换 __init__, __eq__, __repr__等方法的样板,资料整理笔记(大全) 🧊摘要&#x1…

吴恩达|chatgpt 提示词工程师学习笔记。

目录 一、提示指南 写提示词的2大原则: 模型的限制 二、迭代 三、总结 四、推断 五、转换 六、扩展 七、对话机器人 吴恩达和openai团队共同开发了一款免费的课程,课程是教大家如何更有效地使用prompt来调用chatgpt,整个课程时长1个…

ctfshow周末大挑战2023/5/12

本周周末大挑战用到的函数讲解 parse_url() 作用:解析URL,返回其组成部分 语法: parse_url ( string $url [, int $component -1 ] ) 参数: url:要解析的 URL。无效字符将使用 _ 来替换。 component: …

Sentinel———隔离和降级

FeignClient整合Sentinel SpringCloud中,微服务调用都是通过Feign来实现的,因此做客户端保护必须整合Feign和Sentinel。 第一步 修改OrderService的application.yml文件,开启Feign的Sentinel功能(消费者服务) feig…

算法基础第二章

算法基础第二章 第二章:数据结构1、链表1.1、单链表(写邻接表:存储图和树)1.2、双链表(优化某些问题) 2、栈与队列2.1、栈2.1.1、数组模拟栈2.1.2、单调栈 2.2、队列2.2.1、数组模拟队列2.2.2、滑动窗口(单调队列的使用…