• 如何在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
     
  • 相关阅读:
    Python基础之迭代器、生成器
    Python基础之模块+异常
    Python基础之面向对象思维解决游戏《天龙八部》
    Oracle创建存储过程
    数据库范式
    Oracle条件判断
    Oracle的三种循环
    Oracle的pl/sql变量类型
    oracle如何实现去重和分页
    相关子查询和非相关子查询
  • 原文地址:https://www.cnblogs.com/lagujw/p/4476199.html
Copyright © 2020-2023  润新知