openwrt升级功能流程简介_第1页
openwrt升级功能流程简介_第2页
openwrt升级功能流程简介_第3页
openwrt升级功能流程简介_第4页
openwrt升级功能流程简介_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文档说明 本文档简述了 openwrt sdk 的升级功能流程 从页面传入升级文件到升级文件检测 再到调用升级脚本进行升级 升级完成后 进行系统重启 最后简述了如何添加升级文件 标识 标识包括自己定义的字段 以及升级软件的 md5 值 达到防止用户用其他 openwrt sdk 编译出来的固件刷新我们的系统 以及防止升级软件被破坏 文档需要用到的文件及在 sdk 中的路径 某些文件路径可能随项目的不同而改动 package ralink ui luci mtk src modules admin full luasrc controller admin system lua target linux ramips image Makefile package base files files lib upgrade common sh package base files files lib functions sh package base files files sbin sysupgrade target linux ramips base files lib ramips sh target linux ramips base files lib upgrade platform sh 文档正文 1 从页面接受传过来的升级文件 作为整个流程的开始 功能实现在文件 system lua 中 这是一个 lua 文件 很容易在 function index 函数中找到系统升级功能的入口函数 action flashops 在这个函数中首先通过 fp io open image tmp w 打开升级临时文件 tmp firmware img 打开后通过 fp write chunk 写入页面传进来的升级文件 到这里 接受 升级文件完成 2 检测升级文件的合法性 实现同样在文件 system lua 中 在函数 image supported 中进行检测 这个函数通过 image magic number 来检测升级文件 是否合法 函数 image supported 会调用 platform sh 脚本中的 platform check image 函数 platform check image 函数调用 ramips sh 脚本中的 ramips board name 函数 获取 board name ramips board name 函数从文件 tmp sysinfo board name 中获取 board name 若 没有则为 unknown 并返回给调用者 我用的板是 ralink soc platform check image 函数 继续调用 common sh 脚本中的 get magic long 函数 用以获取升级文件 magic 就是升级 文件前 4 位 get magic long 函数调用 common sh 脚本中的 get image 函数用以获取文件 tmp firmware img 内容 其实就是 cat tmp firmware img 获取到的内容 通过 dd bs 4 count 1 来获取前 4 位 最后通过 hexdump v n 4 e 1 1 02x 处理以十六进制编码返回 调用者 获取到的升级文件 magic 在 platform check image 函数中与 27051956 做对比 这个值是在固件编译的时候已经定好了的 如果相等 就是合法的升级文件 继续升级动 作 不相等则为非法升级文件 做一些后续处理并终止升级动作 到这里检测升级文件合 法性完成 3 检测升级文件不合法后的处理 实现同样在文件 system lua 中 检测到不合法后 通过 nixio fs unlink image tmp 来删除临时文件 tmp firmware img 并通 过 image invalid true 设置检测失败 用以通知页面显示提示信息 终止升级 处理完成 4 检测升级文件合法后的处理 实现同样在文件 system lua 中 检测到升级文件合法后 会获取一些升级文件相关的信息 用以在页面显示 调用 image checksum 获取 checksum 调用 storage size 获取可用空间大小 调用 nixio fs stat image tmp size 获取升级文件大小 以及页面传过来的是否保存配置的值 其中 image checksum 函数用的是 md5sum 命令 storage size 函数是在系统文件 proc mtd 中找到 firmware 分区大小 接下来如果用户选择进行升级文件 则会现在页面上打印一些提示信息 用于提示用户 正在升级 不要断开电源等等 文件 system lua 最后的处理就是调用升级脚本 fork exec killall dropbear uhttpd sleep 1 sbin sysupgrade s q keep image tmp 这条语句 先清除 dropbear 和 uhttpd 进程 再等待 1 秒 最后调用升级脚本 sysupgrade 传过去的参数就是 keep 是否要保存配置 image tmp 升级文件 tmp firmware img OK 到这里 system lua 文件中关于升级前的准备工作都完成了 视线请转到升级脚本 sysupgrade 上 5 运行升级脚本 实现在文件 sysupgrade 中 脚本开始 像所有的主体处理程序一样 会对传进来的参数进行处理 下面对这些参数的 介绍 i开启交互模式 d重启前延迟 延迟秒数是传进来的 v会打印 sysupgrade 脚本中的一些信息 脚本中默认打印 q与 v 相反 n升级后不保存配置 默认保存配置 c保存所有的改动配置文件到 etc b用 sysupgrade conf 中指定的文件 创建 tar gz 格式备份文件 r用上步创建的 tar gz 文件 恢复配置 l列出将会备份的文件列表 f从 tar gz 恢复配置 F即使升级文件检测失败 也要升级 这个参数是危险的 慎用 T验证升级文件和 tar gz 配置文件 但不升级 h打印帮助信息 这些参数的使用在脚本中都有介绍 不再多讲 接下来 z ARGV a z NEED IMAGE o HELP gt 0 意思是 如果没有升级文件参数 且没有命令行参数 b create backup r restore backup 或者带有 h help 参数 则 打印帮助信息 这个条件为真的话 会在终端打印帮助信息 退出脚本 接下来 n ARGV a n NEED IMAGE 意思是 不要指定 b 或 r 创建配置 恢复 配置 的同时 指定升级文件 为真的话 打印提示信息 退出脚本 接下来 CONF BACKUP then add uci conffiles CONFFILES cat CONFFILES rm f CONFFILES exit 0 fi 如果需要列出配置文件列表 就 调用 add uci conffiles 函数生成列表 并打印到终端 函 数 add uci conffiles 找出需要保存的配置文件 通过在文件 etc sysupgrade conf 中 lib upgrade keep d 目录下 以及命令 opkg list changed conffiles 的输出中 找出配置 文件 其中 opkg list changed conffiles 列出用户修改的配置文件 接下来 if n CONF BACKUP then do save conffiles CONF BACKUP exit fi 如果需要创建配置备份文件 则调用函数 do save conffiles 生成配置文件 函数 do save conffiles 打包上一部列出的 配置文件 接下来 if n CONF RESTORE then 需要恢复配置 if CONF RESTORE then 判断所需要的配置文 件是否存在 echo Backup archive CONF RESTORE not found exit 1 fi VERBOSE gt 1 do eval check ARGV 通过 board name 和 image magic number 来判断升 级文件是否合法 if FORCE eq 1 then 检测失败了 但是因为设置了 F 选项 强制升级 停止检测 echo Image check check failed but force given will update anyway break else 检测失败 且不要求强制升级 脚本退出 停止升级 echo Image check check failed exit 1 fi done 做升级文件的检测 sysupgrade image check 就是 platform check image 这个 检测在升 级开始的 时候 已经做过了 这里又做了一遍 如果检测失败了 但是设置了 F 选项 强制升级 如果没设置 就脚本退出 停止升级 接下来 if n CONF IMAGE then 需要从文件中恢复配置 case get magic word CONF IMAGE cat in 获取文件内容 并拷贝 2 个字节 且转换为 16 进制输出 gz files 1f8b 检测文件失败 退出脚本 停止升级 echo Invalid config file Please use only tar gz files exit 1 esac get image CONF IMAGE cat CONF TAR export SAVE CONFIG 1 elif ask bool SAVE CONFIG Keep config files over reflash then 默认升级保存配置 TEST eq 1 do save conffiles export SAVE CONFIG 1 else export SAVE CONFIG 0 fi 这段的 意思是 如果需要从文件中恢复配置 就开始处理 这个文件是从命令行参数中传 进来的 get magic word 函数在文件 common sh 中 这个函数与前面所讲的 get magic long 函数实现基本一样 所 不同的是 get magic word 函数利用 dd bs 2 count 1 获取头 2 个字节 而不是 4 个 接下来 if TEST eq 1 then exit 0 fi 这段的意思是 如果设置了 T 选项 因为只是做了升级文件和 tar gz 配置文件的检测 不 需要升级 脚本退出 停止升级 接下来 run hooks sysupgrade pre upgrade 这句的意思是 运行函数 sysupgrade pre upgrade 先介绍下 run hooks 函数 定义在文 件 common sh 中 run hooks local arg 1 shift for func in do eval func arg done run hooks 函数是钩子函数 其中传过来的第一个参数是函数运行的参数 其余参数为要 运行的函数 再介绍 sysupgrade pre upgrade 函数 定义在 platform sh 文件中 append sysupgrade pre upgrade disable watchdog disable watchdog killall watchdog ps grep v grep grep dev watchdog include lib upgrade do upgrade 是 sysupgrade 脚本的最后一句 也是开始升级的地方 run ramfs 函数定义在 common sh 文件中 先是安装一些命令到 tmp root 下 再在 tmp root 下构建一个临时文件系统 最后调用 exec bin busybox ash c 来调用 do upgrade 函数 do upgrade 函数调用 platform do upgrade 函数 platform do upgrade 函数调用 default do upgrade 函数 default do upgrade sync if SAVE CONFIG eq 1 then get image 1 mtd MTD CONFIG ARGS j CONF TAR write PART NAME image else get image 1 mtd write PART NAME image fi 介绍一下这个函数 sync 命令的作用是 将有关文件系统的存储器常驻信息送入物理介质 内 以确保文件系统的完整性 然后就是根据是否需要保存配置去分别调用 mtd 命令 去 完成升级 接下来 v Upgrade completed n DELAY then echo Warning KDIR output name is too big else CP KDIR output name BIN DIR output name tmp fi echo 100msh BIN DIR mykey md5sum BIN DIR output name tmp cut d f 1 BIN DIR mykey cat BIN DIR mykey BIN DIR output name tmp BIN DIR output name rm rf BIN DIR output name tmp rm rf BIN DIR mykey endef 行前有 号的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论