2024年4月22日发(作者:虎子帆)
文档说明:
本文档简述了openwrt sdk的升级功能流程,从页面传入升级文件到升级文件检测,
再到调用升级脚本进行升级,升级完成后,进行系统重启。最后简述了如何添加升级文件
标识,标识包括自己定义的字段,以及升级软件的md5值。达到防止用户用其他openwrt
sdk编译出来的固件刷新我们的系统,以及防止升级软件被破坏。
文档需要用到的文件及在sdk中的路径(某些文件路径可能随项目的不同而改动):
./package/ralink/ui/luci-mtk/src/modules/admin-full/luasrc/controller/admin/
./target/linux/ramips/image/ Makefile
./package/base-files/files/lib/upgrade/
./package/base-files/files/lib/
./package/base-files/files/sbin/sysupgrade
./target/linux/ramips/base-files/lib/
./target/linux/ramips/base-files/lib/upgrade/
文档正文:
1.从页面接受传过来的升级文件
作为整个流程的开始,功能实现在文件中。
这是一个lua文件,很容易在function index函数中找到系统升级功能的入口函数:
action_flashops。在这个函数中首先通过fp = (image_tmp, "w")打开升级临时
文件:/tmp/,打开后通过fp:write(chunk)写入页面传进来的升级文件。到
这里,接受升级文件完成 。
2.检测升级文件的合法性
实现同样在文件中。
在函数image_supported()中进行检测,这个函数通过image magic number来检
测升级文件是否合法。函数image_supported()会调用脚本中的
platform_check_image函数,
platform_check_image函数调用脚本中的ramips_board_name函数,
获取board name,ramips_board_name函数从文件 /tmp/sysinfo/board_name 中获
取board name,若没有则为unknown,并返回给调用者,我用的板是ralink-soc。
platform_check_image函数继续调用脚本中的get_magic_long函数,用
以获取升级文件magic,就是升级文件前4位。get_magic_long函数调用
脚本中的get_image函数用以获取文件/tmp/内容,其实就是cat
/tmp/. 获取到的内容,通过dd bs=4 count=1,来获取前4位,最后通过
hexdump -v -n 4 -e '1/1 "%02x"'处理以十六进制编码返回调用者。获取到的升级文件
2024年4月22日发(作者:虎子帆)
文档说明:
本文档简述了openwrt sdk的升级功能流程,从页面传入升级文件到升级文件检测,
再到调用升级脚本进行升级,升级完成后,进行系统重启。最后简述了如何添加升级文件
标识,标识包括自己定义的字段,以及升级软件的md5值。达到防止用户用其他openwrt
sdk编译出来的固件刷新我们的系统,以及防止升级软件被破坏。
文档需要用到的文件及在sdk中的路径(某些文件路径可能随项目的不同而改动):
./package/ralink/ui/luci-mtk/src/modules/admin-full/luasrc/controller/admin/
./target/linux/ramips/image/ Makefile
./package/base-files/files/lib/upgrade/
./package/base-files/files/lib/
./package/base-files/files/sbin/sysupgrade
./target/linux/ramips/base-files/lib/
./target/linux/ramips/base-files/lib/upgrade/
文档正文:
1.从页面接受传过来的升级文件
作为整个流程的开始,功能实现在文件中。
这是一个lua文件,很容易在function index函数中找到系统升级功能的入口函数:
action_flashops。在这个函数中首先通过fp = (image_tmp, "w")打开升级临时
文件:/tmp/,打开后通过fp:write(chunk)写入页面传进来的升级文件。到
这里,接受升级文件完成 。
2.检测升级文件的合法性
实现同样在文件中。
在函数image_supported()中进行检测,这个函数通过image magic number来检
测升级文件是否合法。函数image_supported()会调用脚本中的
platform_check_image函数,
platform_check_image函数调用脚本中的ramips_board_name函数,
获取board name,ramips_board_name函数从文件 /tmp/sysinfo/board_name 中获
取board name,若没有则为unknown,并返回给调用者,我用的板是ralink-soc。
platform_check_image函数继续调用脚本中的get_magic_long函数,用
以获取升级文件magic,就是升级文件前4位。get_magic_long函数调用
脚本中的get_image函数用以获取文件/tmp/内容,其实就是cat
/tmp/. 获取到的内容,通过dd bs=4 count=1,来获取前4位,最后通过
hexdump -v -n 4 -e '1/1 "%02x"'处理以十六进制编码返回调用者。获取到的升级文件