AutumnBox icon indicating copy to clipboard operation
AutumnBox copied to clipboard

【建议】新增AB槽位切换功能

Open HikariCalyx opened this issue 4 years ago • 16 comments

AB无缝更新机制如今已成为主流。 判定槽位可通过以下命令实现:

fastboot getvar current-slot

如果需要输出到文本文档以便读取,则需要

fastboot getvar current-slot 2>path\to\current-slot.txt

如果返回结果为: current-slot: a 或 current-slot: b 则可以启用此功能,执行命令为:

fastboot --set-active=b

fastboot --set-active=a

但如果返回结果为空: current-slot:

则此为传统的单分区机型,可以不启用此功能。 批处理的实现方式仅供参考:

fastboot getvar current-slot 2>%temp%\cslot.txt
set /p cslot=<%temp%\cslot.txt
del %temp%\cslot.txt
if "%cslot%"=="current-slot: " (
echo Unsupported.
goto EOF
)
if "%cslot%"=="current-slot: a" (
fastboot --set-active=b
if not %errorlevel%==0 goto failed
) else (
fastboot --set-active=a
if not %errorlevel%==0 goto failed
)
goto EOF
:failed
echo ERROR: Slot switch failed. Please check if you have unlocked bootloader.
:EOF

HikariCalyx avatar Apr 15 '20 16:04 HikariCalyx

了解

zsh2401 avatar Apr 16 '20 10:04 zsh2401

请问您是否还在,最近秋之盒将启动对这个功能的测试

zsh2401 avatar Aug 07 '20 19:08 zsh2401

没问题的,手中A/B槽位的机器很多,随时可以测试。

HikariCalyx avatar Aug 07 '20 23:08 HikariCalyx

没问题的,手中A/B槽位的机器很多,随时可以测试。

您现在可以下载最新的秋之盒canary版本,其中包含了切换ab槽位的模块,你可以开始测试了,目前来说其大概率是不可用的。

我手头没有相关设备,因此接下来的开发与测试需要您的密切配合。

zsh2401 avatar Aug 07 '20 23:08 zsh2401

果然不可用,主要是前面的 fastboot getvar current-slot 命令输出结果的判定有问题。 如果要将输出结果用于管道输出,那么就需要用 fastboot getvar current-slot 2>&1 。

我可以看到错误输出代码中显示 fastboot: usage: unknown command 2。

如果你手中只有 A-only 设备,测试能否读出输出结果可以使用其它存在的变量,例如 fastboot getvar unlocked。

HikariCalyx avatar Aug 07 '20 23:08 HikariCalyx

果然不可用,主要是前面的 fastboot getvar current-slot 命令输出结果的判定有问题。

如果要将输出结果用于管道输出,那么就需要用 fastboot getvar current-slot 2>&1 。

我可以看到错误输出代码中显示 fastboot: usage: unknown command 2。

如果你手中只有 A-only 设备,测试能否读出输出结果可以使用其它存在的变量,例如 fastboot getvar unlocked。

好的,我将在晚些继续开发,届时与你联系

zsh2401 avatar Aug 07 '20 23:08 zsh2401

说到这一点,你可以新增是否已经解锁bootloader的指示。 已知不论是搭载高通还是联发科处理器的机器,都可以通过 fastboot getvar unlocked 判定是否已经解锁 bootloader。 但对于高通处理器的机型,还可以使用 fastboot oem device-info 检查是否做关键分区(device critical unlocked)解锁:

C:\Users\HikariCal>fastboot oem device-info (bootloader) Verity mode: true (bootloader) Device unlocked: true (bootloader) Device critical unlocked: true (bootloader) Charger screen enabled: true OKAY [ 0.013s] Finished. Total time: 0.017s

HikariCalyx avatar Aug 07 '20 23:08 HikariCalyx

我发现一个严重的问题,我无法通过fastboot getvar获取任何变量

zsh2401 avatar Aug 08 '20 10:08 zsh2401

草,你先看看怎么获取 fastboot getvar all 输出结果

HikariCalyx avatar Aug 08 '20 11:08 HikariCalyx

你现在可以下载v2020.8.8.2-canary进行测试

zsh2401 avatar Aug 08 '20 13:08 zsh2401

仍然无法使用。提示不支持切换,错误内容输出:

System.NullReferenceException: Object reference not set to an instance of an object. at AutumnBox.Basic.ManagedAdb.CommandDriven.CommandProcedure.Cancel() in D:\a\AutumnBox\AutumnBox\src\AutumnBox.Basic.Shared\ManagedAdb\CommandDriven\CommandProcedure.cs:line 219 at AutumnBox.Basic.ManagedAdb.CommandDriven.CommandProcedure.Dispose(Boolean disposing) in D:\a\AutumnBox\AutumnBox\src\AutumnBox.Basic.Shared\ManagedAdb\CommandDriven\CommandProcedure.cs:line 276 at AutumnBox.Basic.ManagedAdb.CommandDriven.CommandProcedure.Dispose() in D:\a\AutumnBox\AutumnBox\src\AutumnBox.Basic.Shared\ManagedAdb\CommandDriven\CommandProcedure.cs:line 293 at AutumnBox.Basic.Calling.HestExecutor.Dispose(Boolean disposing) in D:\a\AutumnBox\AutumnBox\src\AutumnBox.Basic.Shared\Calling\HestExecutor.cs:line 148 at AutumnBox.Basic.Calling.HestExecutor.Dispose() in D:\a\AutumnBox\AutumnBox\src\AutumnBox.Basic.Shared\Calling\HestExecutor.cs:line 175 at AutumnBox.Basic.Device.DeviceExtension.GetVar(IDevice device, String key) in D:\a\AutumnBox\AutumnBox\src\AutumnBox.Basic.Shared\Device\DeviceExtension.Management.cs:line 124 at AutumnBox.Extensions.Standard.Extensions.Fastboot.ESwitchABSlot.Run(ILeafUI ui, ICommandExecutor executor, IDevice device)

HikariCalyx avatar Aug 08 '20 15:08 HikariCalyx

功能得到实现了。 不知道前面报错是哪里出了问题。

因此关闭issue。

HikariCalyx avatar Aug 08 '20 15:08 HikariCalyx

呃,作者说还有一些问题需要跟进,先重新打开。

HikariCalyx avatar Aug 08 '20 15:08 HikariCalyx

目前发现刷入boot不支持ab分区,你这边有相应的对策以及命令吗?

zsh2401 avatar Aug 20 '20 03:08 zsh2401

同样的,还是想办法读出当前槽位结果,存入变量,假设变量是 slot。 如果当前槽位是a或b,命令就是 fastboot flash boot_%slot% D:\path\to\boot\image.img 槽位返回结果为空的话,命令就直接 fastboot flash boot D:\path\to\boot\image.img

HikariCalyx avatar Aug 20 '20 05:08 HikariCalyx

recovery的刷入也是类似的这样的吗? fastboot flash recovery_%slot% D:\path\to\boot\image.img

刷入rec后启动到rec是用这个吗? fastboot boot_%slot% D:\path\to\boot\image.img

zsh2401 avatar Aug 20 '20 06:08 zsh2401