最近由于项目需要,需要在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系统上实现双版本的更多相关文章

  1. windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2

    windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2 1.官网下载python3.6.2https://www.python.org/ftp/p ...

  2. Redis进阶实践之三如何在Windows系统上安装安装Redis(转载)

    Redis进阶实践之三如何在Windows系统上安装安装Redis 一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...

  3. Redis进阶实践之二如何在Linux系统上安装安装Redis(转载)(2)

    Redis进阶实践之二如何在Linux系统上安装安装Redis 一.引言 上一篇文章写了“如何安装VMware Pro虚拟机”和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我 ...

  4. 如何在Windows系统上利用Telnet协议连接Linux服务器

    Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家 ...

  5. Redis进阶实践之二如何在Linux系统上安装安装Redis

    一.引言      上一篇文章写了"如何安装VMware Pro虚拟机"和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我们才可以在该系统上安装Redis. ...

  6. 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据

    http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...

  7. Redis进阶实践之三如何在Windows系统上安装安装Redis

    一.Redis的简介        Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合 ...

  8. 设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识 zz

    原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...

  9. [转]设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识

    原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...

随机推荐

  1. flask上传图片或者文件

    在flask unittest自动化测试中如何上传图片或者文件 import StringIO picture = StringIO.StringIO(open('/home/admin/Pictur ...

  2. windows下 memcached 和 redis 服务器安装

    memcached 安装: 1.下载memcached 文件: 2.拷贝到运行目录: 3.命令行进入到程序目录: 运行命令: memcached -d install 如果没有报错说明安装成功 4.打 ...

  3. jquery面向对象写法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  4. 让你的Photoshop编辑制作ICO格式图标文件(ICOFormat支持图标文件插件)

    相信非常多制图的朋友都喜欢用PS,可是你能用Photoshop保存为ICO格式图标文件吗?默认肯定不行.不知道是什么原因,大名鼎鼎的图像编辑软件Adobe Photoshop一直不支持导入导出ico格 ...

  5. Maven中setting.xml配置Demo

    <!-- 指定本地默认仓库 --> <localRepository>G:\Java\apache-maven-3.5.2\repository</localReposi ...

  6. UML类图介绍(转载)

    UML类图详细介绍   类图主要描述程序对象以及他们之间的关系.一般来说,类.接口.抽象类这些程序对象的区别很容易,但是他们之间六种关系以前总是理解不够深刻,这次进行了一次复习,顺便写成博文以便加深理 ...

  7. iOS设备定位服务开启判定

    应用CLLocationManager 的两个方法 [CLLocationManagerlocationServicesEnabled] 判断设备是否开启定位功能 [CLLocationManager ...

  8. vue - .gitignore

    描述:npm官方屏蔽上传文件编写文件. 举例(屏蔽的文件/文件夹记得分行) 屏蔽文件:yarn.txt 屏蔽文件夹:/dist/

  9. 算法笔记_089:蓝桥杯练习 7-2求arccos值(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[-1, 1],返回值为[0, PI].要求结果准确 ...

  10. vue 不能监测数组长度变化length的原因

    由于 JavaScript 的限制,Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue 当你修改数组的长度时,例如: ...