如何在uboot上实现从网络下载版本镜像并直接在内存中加载之?
2015-05-04 15:09
405 查看
这是作者近期项目上遇到的一个需求,描述如下:
一块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
一块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
相关文章推荐
- Android:ListView异步加载图片(实现网络下载、存储本地、缓存内存、压缩显示)
- 安卓开发中,如何在代码中实现第三方推送更新,下载好更新后,自动卸载旧版本再安装,而不是直接覆盖安装
- Android之ListView异步加载网络图片(优化缓存机制)和对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
- ANdroid如何实现网络重定向以及使用DownLoadManager类下载
- 易语言-从网络列表下载数据并加载到内存数组
- C#如何实现从内存中加载程序集
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
- Android 通过开源框架实现加载网络图片并下载到SD卡通知系统相册显示,(并实现分享图片功能)
- 如何解决R6034错误,实现在WIN7以上版本通过LoadLibrary加载msvcr90.dll等DLL
- 如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
- 如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
- ListView如何加载网络图片,防止内存溢出
- 教你如何封装异步网络连接NSURLConnection实现带有百分比的下载
- Android开发实践经验谈:如何让各式手机浏览器可以直接下载apk安装文件且实现自动安装APP
- 教你如何封装异步网络连接NSURLConnection实现带有百分比的下载
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
- 图片加载的优化 --- 实现图片的缓存、本地内存及网络的三重筛选之后的加载