如何在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 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
随机推荐
- Azkaban配置
1,新建azkaban目录,用于安置azkaban程序 2,azkaban web服务器安装 解压 azkaban-web-server-2.5.0.tar.gz tar -zvxf azkaban ...
- 【Docker】利用数据卷容器来备份、恢复、迁移数据卷
利用数据卷容器来备份.恢复.迁移数据卷 可以利用数据卷对其中的数据进行进行备份.恢复和迁移. 备份 首先使用 --volumes-from 标记来创建一个加载 dbdata 容器卷的容器,并从主机挂载 ...
- 解决SSH窗口关闭,linux上的应用也关闭
最近在应用linux上的服务的时候发现一个问题 使用SSH远程连接启动的应用在SSH关闭的时候也死掉了,网上查了一下原因 大致是说SSH在关闭的时候会发送一个终止的指令给应用,然后就停了 简要的解决办 ...
- linux-文件系统基本概念
linux中全部数据都是用文件存储,存放在文件夹中,文件夹呈树状结构. (一)文件类型 1.普通文件 包含文本文件.源码文件及可运行文件等.linux中不区分文本和二进制文件. 2.文件夹 类似win ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-为什么无法打开官方范例的项目,打开tszip文件时提示尝试越过结尾怎么办
打开新的解决方案,找到tszip文件 提示错误Advanced Setting时越过结尾 到这里一般VS会卡死 但是我们已经可以得到解压出来的文件夹,其中包含PLC的完整项目文件夹,可以新 ...
- RAC环境下的堵塞(blocking blocked)
RAC环境下的堵塞不同于单实例情形,由于我们须要考虑到位于不同实例的session.也就是说之前查询的v$session,v$lock对应的应变化为全局范围来查找.本文提供了2个查询脚本,并给出实例演 ...
- 安装应用程序 报“ 997 重叠 I/O 操作在进行中”错解决办法
解决办法: 原因: Per Microsoft's blog, patch KB2918614 appears to have caused installation issues 按照微软的博客,补 ...
- android 中的 Handler 线程间通信
一. 在MainActivity中为什么只是类似的写一行如下代码就可以使用handler了呢? Handler handler = new Handler() { @Override public v ...
- MAC里“微软雅黑”字体标准体和粗体无法同时使用问题的解决方法
微软雅黑字体,有标准体和粗体两种字体,我用的系统是OSX10.9,adobe或者是office软件中,均无法同时使用.要么只能用标准体,粗体报错:要么就是能用粗体,标准体无法使用.很偶然找到了以下MA ...
- ubuntu:好用的help命令
以前光知道如何不清楚某个命令的用法可以打上后缀 ‘ --help' 现在刚发现,原来还有help命令来帮忙,如果你安装的是中文支持,在ubuntu上, 那么部分命令说明还是中文版哦. 举例: help ...