如何在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. 引入自定义的版本制作模块:即在原有版本文件基础上,加上自定义的版本头。

时间: 2024-12-07 19:36:34

如何在openWRT系统上实现双版本的相关文章

如何在Linux系统上安装字体

如何在Linux系统上安装字体 最后更新 2015年12月11日 分类 Linux 101 最新文章 标签 font linux 字体 一般电脑用户使用的字体大部分属于TrueType字体,TrueType字体文件的扩展名是.ttf,ttf就是TrueType Font的首字母缩写.这篇教程将向读者介绍如何在Linux系统上安装TrueType字体.本文先介绍通用的安装方式,不管你用的是哪个Linux发行版,都可以用这种方法来安装.然后介绍Debian系和Redhat系发行版安装字体的一些捷径或

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

Telnet协议是Internet远程登录服务的标准协议,它为用户提供了在本地计算机上完成远程主机工作的能力.很多终端使用者都习惯在计算机上利用Telnet会话来远程控制服务器.这里小编就分两步为大家演示如何在Windows系统上利用Telnet协议连接Linux服务器. 步骤一:在Windows系统上打开Telnet功能:  步骤二:在Linux系统上启用Telnet服务. 步骤一:Windows终端开启Telnet功能 1/由于在Windows Vista之后的版本默认并没有提供Telnet

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

http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPad等iOS设备或Android设备的网络通讯数据的方法 不管是iPhone的iOS还是Android系统上开发的应用App基本上都会需要使用网络通讯来传输数据.开发者有的时候可能会需要通过抓包的方式来了解应用具体在传输些什么数据,以及数据是否正确.今天给大家介绍一种如何在Windows操作系统上使用

阿里云服务器linux系统上安装git版本控制系统

Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.而国外的GitHub和国内的Coding都是项目的托管平台.而使用git的第一步就是安装一个git,下面就简单讲述一下在 Linux 系统上如何安装一个git 1.安装git依赖包 Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具. yum install curl-devel expat-devel gettext-devel

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

原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保证你的软件在授权后才能在特定机器上使用).软件License,设备标识,设备身份识别等.下面列举一下各种方法的优劣: (1)网卡MAC地址 MAC地址可能是最常用的标识方法,但是现在这种方法基本不可靠:一个电脑可能存在多个网卡,多个MAC地址,如典型的笔记本可能存在有线.无线.蓝牙等多个MAC地址,

如何在Linux系统上获取命令的帮助信息

在Linux系统中,获取命令帮助信息分为内部命令帮助获取和外部命令帮助两种: 使用help命令用于显示shell内部命令的帮助信息:help命令只能显示shell内部的命令帮助信息. 而对于外部命令的帮助信息只能使用man或者info命令查看. 内部命令帮助获取: 使用内建命令help+命令即可获取 命令格式:# help COMMAND例如使用 help cd 可以获得命令的cd命令的使用格式,详细功用描述,作用法则,常用选项,退出状态码等相关信息. 示例: [[email protected

如何在ONTAP系统中显示历史版本

勒索病毒爆发导致使用CIFS协议的Windows用户深受其害,那么我们如何来保护自己的数据免收攻击呢?我想有几个方法可以规避类似问题发生 安装防病毒保护软件,从客户端根源防护,如果是VDI应用可以使用vShield或NSX结合实现底层防护 存储层面采用Netapp SnapMirror.SnapVault结合复制数据卷历史版本,可随时恢复到可用的历史版本 管理员通过备份程序,采用NDMP结合磁盘.虚拟带库.重复数据删除设备,对CIFS数据实施保护 早在Windows 7微软已经在操作系统版本Wi

如何在OA系统上搭建一个报价系统

最后在做一个五金厂的报价系统,开始准备自已做,做着做着发现真的不是那么简单,报价界面有100多个栏位,有N多个公式,12个工序动态指定,然后带出对应的设备,表单还要经过五个部门协同操作,每一步骤操作的栏位不同,如果自已开发,得要有一个完整的权限控制.工作流表单设计.工作流程设计,而且还要很灵活,用户在系统使用初期可能会有很多调整,想想都头大了,于是想到了OA2015,说干就干,搭建环境后,开工. 一.设计表单 用了整整一天的时间,那栏位多得你都想吐血,你看图就知道了! 二.开始一个一个公式设置

#Mac技巧#如何在Mac系统上新建TXT文档,以及打开txt文稿的乱码问题如何解决

使用mac的朋友可能都有这样的疑问,mac系统下强大的文本编辑器居然不能保存常用的TXT格式? 又或者打开同事在windows上保存的TXT文件会出现如下情况: 最近Hans也被这些问题困扰着,于是便上网搜索了一下解决办法,特来给大家分享普及! 首先来说明一下 如何创建TXT文稿   我们平常打开mac的文本编辑器的时候是下面这个样子的此时按下shift?+command?+T就会变成下面这个情况 其实这个快捷键就是“菜单”--“格式”选项里面的”制作纯文本“快捷键 此时再次存储就是TXT格式了