如何在openWRT系统上实现双版本
最近由于项目需要,需要在AR9331芯片单板(原来是4MBFlash,后来扩充到16MB Flash)上,实现openwrt双版本机制。
双版本的好处,主要是:在升级版本过程中,如果遇到断电等情况,不至于导致设备无法启动。因为至少有一个版本是完好的,虽然可能旧了一点。
基于此需求,需要实现的功能,包括:
1.改造uboot,能识别此款16MB Flash
2.改造uboot,能找到Flash中的所有可引导的内核版本,以及对应的rootfs;并选择合适的(较新的)内核进行引导
3.在rootfs中,需要引入版本烧写模块:能够正确的选择当前不在使用的版本分区,进行擦除并烧入新的版本;
4.在openwrt自身编译产生的版本基础上(一般为XXX-squashfs-sysupgrade.bin),建议自定义版本头。除了识别所需版本外,还用于标识版本的新or旧
下面,就记录一下我的具体做法:
1. 改造uboot,能识别此款16MB Flash
我所用的Flash型号是: MX25L12835FM2I10G;对应uboot版本是:V1.1.4(来自AR9331原厂SDK自带的)。为了识别此款Flash,需要调整的代码文件,包括:
u-boot/include/flash.h -- 增加Flash ID硬编码定义,对应MX25L12835FM2I10G(擦写单元:64KB)
u-boot/board/ar7240/ap121/flash.c --- 修改flash_get_geom函数,增加对FLASH_MX25L128M的识别支持
2. 改造uboot,能找到Flash中的所有可引导的内核版本(寻找自定义版本头的特征值;对于双版本来说,则可以找到两个),并选择合适的(较新的)内核进行引导。这其中的主要改造就是:
A.识别出自定义版本头和选定要引导的内核是哪一个后,需要剥离该内核的自定义版本头,从而回归到uboot原有的vmlinux的识别机制和引导机制中;
B.在uboot中,需要将Flash中存放kernel和rootfs的位置,传递给内核;这样后续升级新版本时,才能知道应该擦写哪个分区;
3. 引入自定义的版本烧写模块:除了负责下载版本外(使用wget工具),还要实现:版本校验,选择Flash中的擦写位置,并实现实际的Flash擦写工作;
4. 引入自定义的版本制作模块:即在原有版本文件基础上,加上自定义的版本头。
如何在openWRT系统上实现双版本的更多相关文章
- windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2
windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2 1.官网下载python3.6.2https://www.python.org/ftp/p ...
- Redis进阶实践之三如何在Windows系统上安装安装Redis(转载)
Redis进阶实践之三如何在Windows系统上安装安装Redis 一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...
- Redis进阶实践之二如何在Linux系统上安装安装Redis(转载)(2)
Redis进阶实践之二如何在Linux系统上安装安装Redis 一.引言 上一篇文章写了“如何安装VMware Pro虚拟机”和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我 ...
- 如何在Windows系统上利用Telnet协议连接Linux服务器
Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家 ...
- Redis进阶实践之二如何在Linux系统上安装安装Redis
一.引言 上一篇文章写了"如何安装VMware Pro虚拟机"和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我们才可以在该系统上安装Redis. ...
- 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据
http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...
- Redis进阶实践之三如何在Windows系统上安装安装Redis
一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合 ...
- 设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识 zz
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
- [转]设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
随机推荐
- flask上传图片或者文件
在flask unittest自动化测试中如何上传图片或者文件 import StringIO picture = StringIO.StringIO(open('/home/admin/Pictur ...
- windows下 memcached 和 redis 服务器安装
memcached 安装: 1.下载memcached 文件: 2.拷贝到运行目录: 3.命令行进入到程序目录: 运行命令: memcached -d install 如果没有报错说明安装成功 4.打 ...
- jquery面向对象写法
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- 让你的Photoshop编辑制作ICO格式图标文件(ICOFormat支持图标文件插件)
相信非常多制图的朋友都喜欢用PS,可是你能用Photoshop保存为ICO格式图标文件吗?默认肯定不行.不知道是什么原因,大名鼎鼎的图像编辑软件Adobe Photoshop一直不支持导入导出ico格 ...
- Maven中setting.xml配置Demo
<!-- 指定本地默认仓库 --> <localRepository>G:\Java\apache-maven-3.5.2\repository</localReposi ...
- UML类图介绍(转载)
UML类图详细介绍 类图主要描述程序对象以及他们之间的关系.一般来说,类.接口.抽象类这些程序对象的区别很容易,但是他们之间六种关系以前总是理解不够深刻,这次进行了一次复习,顺便写成博文以便加深理 ...
- iOS设备定位服务开启判定
应用CLLocationManager 的两个方法 [CLLocationManagerlocationServicesEnabled] 判断设备是否开启定位功能 [CLLocationManager ...
- vue - .gitignore
描述:npm官方屏蔽上传文件编写文件. 举例(屏蔽的文件/文件夹记得分行) 屏蔽文件:yarn.txt 屏蔽文件夹:/dist/
- 算法笔记_089:蓝桥杯练习 7-2求arccos值(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[-1, 1],返回值为[0, PI].要求结果准确 ...
- vue 不能监测数组长度变化length的原因
由于 JavaScript 的限制,Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue 当你修改数组的长度时,例如: ...