AutumnBox
AutumnBox copied to clipboard
【建议】新增AB槽位切换功能
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
了解
请问您是否还在,最近秋之盒将启动对这个功能的测试
没问题的,手中A/B槽位的机器很多,随时可以测试。
没问题的,手中A/B槽位的机器很多,随时可以测试。
您现在可以下载最新的秋之盒canary版本,其中包含了切换ab槽位的模块,你可以开始测试了,目前来说其大概率是不可用的。
我手头没有相关设备,因此接下来的开发与测试需要您的密切配合。
果然不可用,主要是前面的 fastboot getvar current-slot 命令输出结果的判定有问题。 如果要将输出结果用于管道输出,那么就需要用 fastboot getvar current-slot 2>&1 。
我可以看到错误输出代码中显示 fastboot: usage: unknown command 2。
如果你手中只有 A-only 设备,测试能否读出输出结果可以使用其它存在的变量,例如 fastboot getvar unlocked。
果然不可用,主要是前面的 fastboot getvar current-slot 命令输出结果的判定有问题。
如果要将输出结果用于管道输出,那么就需要用 fastboot getvar current-slot 2>&1 。
我可以看到错误输出代码中显示 fastboot: usage: unknown command 2。
如果你手中只有 A-only 设备,测试能否读出输出结果可以使用其它存在的变量,例如 fastboot getvar unlocked。
好的,我将在晚些继续开发,届时与你联系
说到这一点,你可以新增是否已经解锁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
我发现一个严重的问题,我无法通过fastboot getvar获取任何变量
草,你先看看怎么获取 fastboot getvar all 输出结果
你现在可以下载v2020.8.8.2-canary进行测试
仍然无法使用。提示不支持切换,错误内容输出:
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)
功能得到实现了。 不知道前面报错是哪里出了问题。
因此关闭issue。
呃,作者说还有一些问题需要跟进,先重新打开。
目前发现刷入boot不支持ab分区,你这边有相应的对策以及命令吗?
同样的,还是想办法读出当前槽位结果,存入变量,假设变量是 slot。 如果当前槽位是a或b,命令就是 fastboot flash boot_%slot% D:\path\to\boot\image.img 槽位返回结果为空的话,命令就直接 fastboot flash boot D:\path\to\boot\image.img
recovery的刷入也是类似的这样的吗? fastboot flash recovery_%slot% D:\path\to\boot\image.img
刷入rec后启动到rec是用这个吗? fastboot boot_%slot% D:\path\to\boot\image.img