这是作者近期项目上遇到的一个需求,描述如下:

一块MT7620N的路由器单板,Flash中已存放一个版本并可以通过uboot正常加载并启动。现在需要:在uboot上电启动过程中,通过外部按键触发干涉,使得uboot可以从网络上下载一个临时版本,并直接在内存中启动之。即保证Flash中的原有版本不被更改

解决思路如下:

1. 利用单板上的Factory Reset按键,实现外部按键触发。

在uboot的board_init_r函数中,在调用main_loop死循环之前,检测Factory Reset按键是否被按下。如果按下,则进入新的分支处理流程。

2.  当检测到Factory Reset按键被按下后,则依次执行如下动作:

A. 调用setenv("autostart", "yes");  ---- 临时设置环境变量:autostart=yes  这样:后续通过tftpboot命令下载版本后就会自动下载;同时这样还不影响uboot下原有的下载并烧写版本的命令

B. eth_initialize(gd->bd);  --- 建立网络接口

C. sprintf(buf, "tftpboot 0x80c00000 xxxxxxx"); rc = run_command (buf, 0); --- 通过执行tftpboot命令,从网络下载执行镜像文件,并下载到指定内存地址:0x80c00000

特别提出:这里的0x80c00000 是通过和正常从Flash中加载版本的打印输出对比后得到的正确地址;若不是此地址,则会在lzma解压缩之前,报如下异常:

Uncompressing Kernel Image ... LZMA ERROR 1 -
must RESET board to recover

如何在uboot上实现从网络下载版本镜像并直接在内存中加载之?的更多相关文章

  1. angular 图片加载失败 情况处理? 如何在ionic中加载本地图片 ?

    1.angular 图片加载失败 情况处理 在directive中定义组件,在ng-src错误时,调用err-src app.directive('errSrc',function(){ return ...

  2. 如何在HTML中加载Flash(2种实现方法)_HTML/Xhtml_网页制作

    点评:如何在HTML中加载Flash,为网页添加更多的色彩,普通的网页以无法满足用户的需求,接下来为大家介绍下2种在HTML中加载Flash的方法,感兴趣的各位可以适当参考下,希望对你有所帮助 第一种 ...

  3. android优化从网络中加载图片速度。。

    从网络中加载图片主要要注意两个方面的问题: 1.内存管理:图片占的内存很大,假如图片数量多,很容易让系统抛出out of memory的异常. 同时我们也要注意不同android版本中内存管理的区别. ...

  4. 如何在Skyline中加载ArcGISServer发布的WMS和WMTS服务

    如何在Skyline中加载ArcGISServer发布的WMS和WMTS服务? 我这里的测试环境是ArcGISServer10.1和TerraExplorer Pro7.0,主要过程截图如下,

  5. 如何在maven工程中加载oracle驱动

    maven中引入oracle驱动报错Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0 时间:2015年09月22日  浏览:9361次 在maven ...

  6. 教你如何在Ubuntu上安装最新的Python版本

    参考链接:https://cloud.tencent.com/developer/news/343104

  7. 如何在Ubuntu上在多个PHP版本之间切换 (for swoole)

    摘要: 之前一直用Php7.0,今天想用7.2试下一些特性,安装完之后,切换回7.0却不能再使用7.0的swoole了,原来是切换方式出现了问题 一 从PHP 7.0 切换到 PHP 7.2 Apac ...

  8. 如何在CentOS上安装Tensorflow的gpu版本?

    系统配置 系统版本: Centos7.6 语言: Python3.5(anaconda3 4.2) 框架: Tensorflow 安装依赖 sudo yum install openjdk-8-jdk ...

  9. .Net语言 APP开发平台——Smobiler学习日志:如何在webview中加载网页

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的“Smobiler Components” ...

随机推荐

  1. Python Matplotlib绘制气温图表

    代码中数据从 www.wunderground.com/history/ 下载 #coding=utf-8 import csv from datetime import datetime from ...

  2. (转)Vue2.0 推荐环境

    Vue2.0 新手完全填坑攻略——从环境搭建到发布 http://www.jianshu.com/p/5ba253651c3b Jinkey原创感谢 showonne.yubang 技术指导Demo ...

  3. Elasticsearch的javaAPI之query dsl-queries

    Elasticsearch的javaAPI之query dsl-queries 和rest query dsl一样,elasticsearch提供了一个完整的Java query dsl. 查询建造者 ...

  4. android不同机型上界面适配问题

    android中长度有:dp(或者dip device independent pixels)一种基于屏幕密度的抽象单位.在每英寸160点的显示器上.1dp=1px. 不同设备有不同的显示效果.这个和 ...

  5. Android系统常用的权限

    开机自动允许  android.permission.RECEIVE_BOOT_COMPLETED,允许程序开机自动运行. 电量统计  android.permission.BATTERY_STATS ...

  6. EventBus的粘性事件

    下午赶去公司解决了电台业务首次语音搜台后(用到服务,但只出一个独立的Activity,主界面并没有打开)不能听歌识曲的问题. 排查到最后,去识别的消息确实是发出去了,但是却没有收到,没有收到消息当然不 ...

  7. VS报表图解《一》---菜鸟版

    与原先的开发环境VB.EXE不同VS2013自带了报表控件ReportViewer能够内部实现报表的设计,本文主要通过绑定数据集来实现报表的显示 1.加入:reportviewer控件,当将控件显示在 ...

  8. 算法笔记_166:算法提高 金属采集(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 人类在火星上发现了一种新的金属!这些金属分布在一些奇怪的地方,不妨叫它节点好了.一些节点之间有道路相连,所有的节点和道路形成了一棵树.一共 ...

  9. 【MySQL】玩转定时器

    1.前置条件,你需要将服务器和mysql的时间都设置成东八区,php.ini和my.cnf配置(参考上篇文章) 2.进入mysql客户端,推荐Navicat for mysql 3.首先查看是否开启了 ...

  10. log4j 配置(转)

    log4j是干什么的 log4j是Apache的一个开源项目,主要功能是打印日志信息,以各种形式在各种地方花式打印日志. 使用log4j的准备工作 使用log4j就必须要引入其jar包.附上官网地址h ...