如何在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 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
随机推荐
- Python Matplotlib绘制气温图表
代码中数据从 www.wunderground.com/history/ 下载 #coding=utf-8 import csv from datetime import datetime from ...
- [转] copy_to_user和copy_from_user两个函数的分析
在内核的学习中会遇到很多挺有意思的函数,而且能沿着一个函数扯出来很多个相关的函数.copy_to_user和copy_from_user就是在进行驱动相关程序设计的时候,要经常遇到的两个函数.由于内核 ...
- WindowProc和DefWindowProc的差别
1. WindowProc是你给自己的窗体定义的窗体处理函数 DefWindowProc是windows平台提供的默认窗体处理函数 假设某些消息你不须要做特别的处理,调用DefWindowProc进行 ...
- 我的Android进阶之旅------>Android实现音乐示波器、均衡器、重低音和音场功能
本实例来自于<疯狂Android讲义>.要实现详细的功能,须要了解下面API: MediaPlayer 媒体播放器 Visualizer 频谱 Equalizer 均衡器 BassBoo ...
- 使用htmldom分析HTML代码
使用语言是Python 3.5.开发环境是Windows. 在使用HTMLParser库的时候,发现它不能正确的解析多重div元素嵌套的情况,因为这些div元素中又包含了a元素等其它元素. 这似乎是一 ...
- ResourceBundle的使用
ResourceBundle用来读取properties配置文件,配置文件的位置只能放到src根目录下,当然这个功能的目的是为了实现国际化. 代码如下: package com.comp.common ...
- docker-compose安装与使用
一.简介与安装 1.简介 Compose是定义和运行多容器Docker应用程序的工具,使用Compose,您可以使用YAML文件来配置应用程序的服务,然后,使用单个命令创建并启动配置中的所有服务 2. ...
- 【转】iBatis简单入门教程
1. iBatis 简介: iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快.如果不需要太多复杂的功能,iBatis 是能 ...
- HTTP缓存策略 304
1.图解缓存 示例: 200 (from disk cache): 200 (from memory cache) MemoryCache顾名思义,就是将资源缓存到内存中,等待下次访问时不需要重新下载 ...
- background-position 之剑走偏锋
转自:http://www.cnblogs.com/yizuierguo/archive/2009/03/10/1407860.html 在设置background-image属性时,经常会遇到一个b ...