openwrt升级功能流程简介

openwrt升级功能流程简介

ID:8790095

大小:25.00 KB

页数:9页

时间:2018-04-07

openwrt升级功能流程简介_第1页
openwrt升级功能流程简介_第2页
openwrt升级功能流程简介_第3页
openwrt升级功能流程简介_第4页
openwrt升级功能流程简介_第5页
资源描述:

《openwrt升级功能流程简介》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、文档说明:本文档简述了openwrtsdk的升级功能流程,从页面传入升级文件到升级文件检测,再到调用升级脚本进行升级,升级完成后,进行系统重启。最后简述了如何添加升级文件标识,标识包括自己定义的字段,以及升级软件的md5值。达到防止用户用其他openwrtsdk编译出来的固件刷新我们的系统,以及防止升级软件被破坏。文档需要用到的文件及在sdk中的路径(某些文件路径可能随项目的不同而改动):./package/ralink/ui/luci-mtk/src/modules/admin-full/luasrc/c

2、ontroller/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/

3、ramips/base-files/lib/upgrade/platform.sh文档正文:1.从页面接受传过来的升级文件作为整个流程的开始,功能实现在文件system.lua中。这是一个lua文件,很容易在functionindex函数中找到系统升级功能的入口函数:action_flashops。在这个函数中首先通过fp=io.open(image_tmp,"w")打开升级临时文件:/tmp/firmware.img,打开后通过fp:write(chunk)写入页面传进来的升级文件。到这里,接受升级文件完

4、成。2.检测升级文件的合法性实现同样在文件system.lua中。在函数image_supported()中进行检测,这个函数通过imagemagicnumber来检测升级文件是否合法。函数image_supported()会调用platform.sh脚本中的platform_check_image函数,platform_check_image函数调用ramips.sh脚本中的ramips_board_name函数,获取boardname,ramips_board_name函数从文件/tmp/sysinfo

5、/board_name中获取boardname,若没有则为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.获取到的内容,通过ddbs=4count=1

6、,来获取前4位,最后通过hexdump-v-n4-e'1/1"%02x"'处理以十六进制编码返回调用者。获取到的升级文件magic,在platform_check_image函数中与27051956做对比,这个值是在固件编译的时候已经定好了的。如果相等,就是合法的升级文件,继续升级动作;不相等则为非法升级文件,做一些后续处理并终止升级动作。到这里检测升级文件合法性完成。3.检测升级文件不合法后的处理实现同样在文件system.lua中。检测到不合法后,通过nixio.fs.unlink(image_tmp)

7、来删除临时文件/tmp/firmware.img,并通过image_invalid=true,设置检测失败,用以通知页面显示提示信息。终止升级。处理完成。4.检测升级文件合法后的处理实现同样在文件system.lua中。检测到升级文件合法后,会获取一些升级文件相关的信息,用以在页面显示:调用image_checksum(),获取checksum;调用storage_size(),获取可用空间大小;调用nixio.fs.stat(image_tmp).size,获取升级文件大小;以及页面传过来的是否保存配置的

8、值;其中,image_checksum()函数用的是md5sum命令,storage_size()函数是在系统文件/proc/mtd中找到firmware分区大小。接下来如果用户选择进行升级文件,则会现在页面上打印一些提示信息,用于提示用户:正在升级,不要断开电源等等。文件system.lua最后的处理就是调用升级脚本:fork_exec("killalldropbearuhttpd;sleep1;/sbin/s

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。