如何在uboot上实现从网络下载版本镜像并直接在内存中加载之?

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

一块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
 

 

转载于:https://www.cnblogs.com/lagujw/p/4476199.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值