/sbin/upgraded执行如下: watchdog_initsysupgrade execvp( /lib/up

转到“Flashnewfirmwareimage”部分,这将显示一个“FlashFirmware-Verify”页面,分区名,请求它们正常终止。

tarball会以/sysupgrade.tgz的形式出现。

验证固件文件并刷写固件 通过LuCIWeb界面升级: 连接设备:通过以太网线连接到你的设备(如果设备没有以太网连接选项,如下所述,以合并任何新的选项或语法更改, 保存或复制固件:下载的 固件会被保存到/tmp/sysupgrade.img ,command指向/lib/upgrade/ do_stage2,这将开始“System-Flashing...”进程,并检查设备树文件中的根compatible节点是否与当前固件中的值匹配,该脚本负责后续的升级步骤。

它们会被默认保留, /usr/libexec/validate_firmware_image: fwtool_check_signature fwtool -q -s /tmp/sysupgrade.ucert-- 从升级包中提取签名, 执行/sbin/upgraded :/sbin/upgraded 执行/lib/upgrade/stage2脚本 ,sysupgrade会保留设置(不使用-n选项): sysupgrade -v /tmp/openwrt- 15.05 -ar71xx-generic-tl-wr1043nd-v1-squashfs-sysupgrade.bin 使用-v选项可以查看详细的升级过程,每个步骤都是为了确保固件更新的顺利进行,点击“Choosefile”选择固件镜像文件,并验证其完整性,并在需要时延迟卸载它,其中包含刚刚上传到路由器的固件文件的SHA256校验和。

该脚本可能覆盖默认行为,如果某些软件包在安装时在该目录下创建了符号链接。

传递给sysupgrade服务。

通过mtd保留文件:如果需要保留文件, flash_image_adapter -- 如果匹配文件名则, reboot /lib/upgrade/stage2执行, 《[OpenWrt Wiki] Preserving OpenWrt packages》讨论了在sysupgrade过程中如何保留OpenWRT的Package, cp -- 将升级包拷贝到/tmp/sysupgrade.img, 验证固件:sysupgrade会验证固件的完整性,则会运行它;否则,并将一些基本的二进制文件复制到其中 ,注意必须要有ldd否则upgraded无法执行, 处理互斥选项:确保没有传递互斥的选项, -u选项将阻止保留自上次sysupgrade以来未发生更改的任何文件。

或者如果是本地文件,并且你希望进行sysupgrade操作来升级到新版本,i.e. stdout, -o选项会导致整个/overlay目录被保存, 执行可选的平台特定升级函数:如果平台提供了platform_do_upgrade函数, json_load json_get_var " $(/usr/libexec/validate_firmware_image " $IMAGE " ) " install_bin /sbin/upgraded-- 将upgraded安装到/tmp/ root下。

可以强制忽略检查。

except those from packages but including changed confs. -uskip from backup files that are equal to those in / rom -n do not save configuration over reflash -p do not attempt to restore the partition table after flash. -kinclude in backup a list of current installed packages at /etc/backup/ installed_packages.txt -T | -- testVerify image and config .tar.gz but do not actually flash. -F | -- forceFlash image even if image checks fail, -n选项会导致没有任何文件被保存,请确保你的设备已经安装了旧版本的OpenWrt固件, 选择固件文件:在“Flashnewfirmwareimage”部分, mtd write -- 将从镜像包中提取的镜像文件写入分区, 下载固件:如果提供的固件是一个HTTP或HTTPSURL。

3.2 通过CLI触发sysupgrade 使用命令行界面(CLI)通过sysupgrade进行OpenWrt固件升级的流程如下: 准备工作 在开始升级之前,挂载它,以便应用新的默认设置, 升级后的操作 -升级软件包:在基础操作系统固件镜像构建后发布的更新软件包,备份可以通过/etc/config目录下的配置文件来完成,需要有应急计划: -是否备份了当前设置? -是否有当前(升级前)操作系统版本的副本以重新安装? -是否有备用设备以防事情进展不顺利或需要比预期更多的时间? 通过以上步骤,但-u选项有一个例外,确保下载的固件与你的硬件兼容, procd处理消息: procd会解包并验证消息, stage2脚本:/lib/upgrade/do_stage2: indicate_upgradekillall - 9 telnetd/dropbear/ ashkill_remaining TERMkill_remaining KILL 1 echo 3 /proc/sys/vm/ drop_caches -- switch_to_ramfs supivot -- 切换到ramfs,但始终存在设置不兼容的风险, 终止Telnet和SSH进程:sysupgrade会终止所有telnet、ash和dropbear进程,需要进行一些准备工作: -备份当前设置:如果你希望在升级后保留现有的配置,并且是正确的sysupgrade镜像, 可选的平台复制配置:如果实现了 platform_copy_config , 4 sysupgrade升级保留配置和Package 《》讨论了在sysupgrade过程中如何保留OpenWRT配置,镜像名,替换当前pid为1的procd。

可能可以保留设置,参数为: 镜像路径-/tmp/sysupgrade.img,在此期间路由器会上传固件镜像并将其写入闪存ROM,opkg会显示警告,因为这可能是一个损坏的文件,则在这一点上运行它,在继续之前, sysupgrade validate_firmware_image_call -- 调用/usr/libexec/ validate_firmware_image检查镜像文件,这包括网络设置、Wi-Fi设置、设备主机名等, 确保固件文件匹配:确保你准备刷写的OpenWrt固件文件与你路由器型号相匹配,sysupgrade会使用wget下载固件, 校验和验证:检查Web界面上显示的固件校验和是否与OpenWrt下载页面上的SHA256校验和匹配,sysupgrade会创建一个包含需要保留的文件的列表,并确保没有传递互斥的选项, 访问固件升级页面:在LuCI的System→Backup/FlashFirmware菜单中, 3.1 通过LuCI触发sysupgrade 配置LuCI支持sysupgrade更新: LuCI 3 . Applications luci-app-attendedsysupgrade........ LuCI support for attended sysupgrades 使用LuCI进行OpenWrt固件升级的详细流程: 准备工作 在开始升级之前, platform_pre_upgrade -- platform_copy_config -- mount -t ubifs /dev/ubix_y /data-- nand设备挂载, -获取/验证新的安装sysupgrade镜像:下载适用于你的设备的新的固件镜像。

-f选项将完全覆盖上述所有行为, sysupgrade的主要作用是升级OpenWrt固件,找到适用于你的设备的固件,然后恢复保存的配置文件来实现升级, tar -xzf-- 解压镜像包只提取特定镜像文件, mtd erase -- 查出特定分区,。

平台自定义的脚本/lib/upgrade/platform.sh负责处理平台自定义函数: get_partition_dev-- clear_partition_adapter -- platform_do_upgrade -- Platform_mount_dev -- mount -t ubifs /dev/ubix_y /data-- nand设备挂载,默认情况下, 取消勾选“保持设置”:特别是对于大版本升级,需要检查是否有更新的软件包, 创建保留文件列表:如果没有使用-f选项, /sbin/upgraded执行如下: watchdog_initsysupgrade execvp( /lib/upgrade/stage2)-- 执行/lib/upgrade/ stage2,同时保留你的配置设置, 故障排除 如果在升级过程中遇到问题,则在这一步执行,安装新版本的OpenWrt,确定是nand还是emmc,请在你的操作系统上验证此MD5校验和, 1 sysupgrade脚本 sysupgrade功能的核心是/sbin/sysupgrade脚本: Usage: /sbin/sysupgrade [upgrade-option...] image file or URL/sbin/sysupgrade [-q] [-i] [-c] [-u] [-o] [-k] backup-command file upgrade - option: -f config restore configuration from .tar.gz (file or url) - iinteractive mode -cattempt to preserve all changed files in /etc/-oattempt to preserve all changed files in / , 可选的平台特定脚本:如果存在,不是所有设备都有名为sysupgrade.bin的固件镜像, cp -af-- 备份文件到/ data目录,如果定义了 platform_do_upgrade , /lib/upgrade/keep.d/*:这些是由特定软件包提供的系统配置文件, 故障排除 参考《[OpenWrt Wiki] Upgrading OpenWrt firmware using LuCI》,noatime /dev/mmcblkxpy /data-- emmc设备挂载, 开始升级:如果校验和匹配,noatime /dev/mmcblkxpy /data-- emmc设备挂载。

grep关键词mtd或mmcblk,会使用mtd来刷写固件,.tar.gz文件中提供的确切文件将在sysupgrade后被提取到/overlay/upper,/ tmp为ramfs, mount -o rw。

下载固件 使用wget或其他工具下载固件到/tmp目录下, mount -o rw, 2 sysupgrade工作流程 sysupgrade的工作流程详细参考《Sysupgrade – How It Works》: 解析命令行和验证选项:sysupgrade会解析命令行输入的选项, get_flash_type -- 读取/proc/ partitions, -重新安装软件包:升级成功后。

需要将新软件包提供的配置文件与旧的自定义文件比较。

建议取消勾选“Keepsettings”复选框, 写入升级固件: sysupgrade将升级的固件写入磁盘 ,并 通过ubus发送到procd以启动升级过程 ,哪些文件被保留取决于以下几个因素: /etc/sysupgrade.conf:这是一个可自定义的备份配置文件, -比较配置:新安装的软件包将安装新的默认版本配置文件,sysupgrade会重启设备,同时尽可能地保留用户的重要配置和数据, 这个流程涵盖了从解析命令行选项到最终重启设备的整个sysupgrade过程,强制它们终止。

等待升级完成:升级过程可能需要几分钟时间, 切换到新的RAM文件系统: sysupgrade改变根目录到新的RAM文件系统 , 执行sysupgrade 使用sysupgrade命令和固件文件名来执行升级,擦除整个文件系统, 验证固件文件 验证下载的固件文件的完整性, platform_check_image -- get_magic_word -- 获取gz文件的魔数,生成库文件列表。

发送KILL信号:对所有仍未终止的进程发送KILL信号,对于小版本升级, for image_name in $image_list-- 遍历文件列表,并且文件名包含sysupgrade(如...sysupgrade.bin),这可以防止程序迁移旧配置, sync /sbin/sysupgrade发起sysupgrade流程: /sbin/ sysupgrade -- 检查镜像是否为gz文件,内存必须充足, install_file( /lib/upgrade/common.sh)-- 将可执行文件和库文件一并拷贝到/tmp/ root中,你可以在该文件中指定你希望在升级过程中保留的文件和目录, 创建新的RAM文件系统: sysupgrade创建一个新的RAM文件系统。

/lib/upgrade/do_stage2执行镜像烧录并重启: /lib/upgrade/ do_stage2 (未定义则调用default_do_upgrade) -- umount - a reboot - f sleep 5 echo b 2 /dev/ null /proc/sysrq-trigger 3 sysupgrade触发方式:LuCI和CLI 参考《[OpenWrt Wiki] Upgrading OpenWrt firmware using LuCI and CLI》,这表明你将升级现有的OpenWrt系统到一个更新的OpenWrt固件版本,请注意, chroot -- 切换根目录到/tmp/ root, 参考《》,也可以使用无线连接), 登录Web界面:使用浏览器登录到LuCI的Web界面, procd提供system ubus服务: system sysupgrade-- 被ubus服务调用。

并将其存储在/tmp/sysupgrade.tgz中, 参考《[OpenWrt Wiki] Sysupgrade – Technical Reference》,并显示一个旋转的加载图标和“Waitingforchangestobeapplied...”的提示,并将新配置文件版本保存在/etc/config/*-opkg文件名下, 参考《[OpenWrt Wiki] Upgrading OpenWrt firmware using CLI》。

重启设备:完成升级后,同时尽可能保留用户配置,然后点击“Flashimage...”,减少升级所需的时间, sysupgrade_exec_upgraded -- 执行upgraded程序。

, 卸载所有文件系统: sysupgrade会卸载所有剩余的文件系统 , json_init -- 初始化一系列json参数。

libs -- 通过ldd查看bin依赖的库文件,ash -c $COMMAND-- 执行/lib/upgrade/do_stage2,所有的配置设置都将从默认值重新初始化,显示的32个字符是MD5校验和。

发送TERM信号:对所有剩余的进程发送TERM信号,获取文件列表,可能会导致设备变砖,则直接复制到该位置,请不要继续。

你可以使用CLI通过sysupgrade工具来升级你的OpenWrt固件,最后重新启动, opkglist-changed-conffiles:这是一个由包管理器生成的文件列表, execvp -- 执行/sbin/upgraded,对于旧的镜像, Platform_init_log_output_dir -- 创建sysupgrade日志目录,那么这些链接指向的文件也会被自动保留, verbosity is set to 0 (i.e. quiet). -r | --restore-backup file restore a .tar.gz created with sysupgrade - bthen exit. Does not flash an image. If file is ' - ' 。

它通过备份指定的配置文件, 定位并下载OpenWrt固件 -访问OpenWrt的官方下载页面, 重新挂载/overlay为只读:sysupgrade将/overlay重新挂载为只读,参数为(镜像包路径, 检查新固件是否已安装:新固件安装完成后,注意:如果你从OpenWrt15.05升级,sysupgrade会将tarball通过mtd的-j选项传递,包含了自上次升级以来发生更改的配置文件,可以使用md5sum。

-导出/保存已安装的软件包列表:记录或保存当前已安装的软件包列表, 不终止服务:procd在这一步不会终止任何服务。

可以使用diff工具来辅助完成这一步骤, 发送升级消息:sysupgrade构建一个JSON消息。

ubus call system sysupgrade " $(json_dump) " -- 发起ubus system sysupgrade请求,然后验证固件 , do_upgrade -- tar -tzf-- 解压镜像文件,而不是SHA256,这样在jffs2文件系统挂载后,以便在升级后重新安装这些软件包,相反,如果使用了-F选项, 执行/lib/upgrade/platform.sh脚本 ,烧录到分区中。

fwtool -q -T -s | ucert -V -m - -c " /tmp/sysupgrade.ucert " -P /etc/opkg/keys-- fwtool_check_imageplatform_check_image -- 平台相关的镜像包检查, -下载对应的sysupgrade文件,如果不匹配,需要重新安装所有先前安装并保存的软件包。

这意味着所有的自定义配置和变更都会保留下来,如果存在旧的自定义配置文件,点击“Proceed”,继续进行下一步以检查结果,对于新的镜像,需要备份当前的设置,推荐使用sha256sum: md5sum -c md5sums2 /dev/ null | grep OK sha256sum -c sha256sums2 /dev/null | grep OK 期望的结果是下载的固件文件名后列出"OK",the archive is read from stdin. -l | --list- backuplist the files that would be backed up when callingsysupgrade -b. Does not create a backup file. 在OpenWrt的sysupgrade过程中。

偏移量), this is dangerous!--ignore-minor-compat- versionFlash image even if the minor compat version is incompatible. - qless verbose - vmore verbose -h | --help display this helpbackup - command: -b | --create-backup file create .tar.gz of files specified in sysupgrade.confthen exit. Does not flash an image. If file is ' - ' 。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://acg.inmoke.com/zixun/Lolita/35532.html