Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
HikariCalyx opened this issue Apr 15, 2020 · 16 comments
Open

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

HikariCalyx opened this issue Apr 15, 2020 · 16 comments
Labels

Comments

@HikariCalyx
Copy link

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
@zsh2401
Copy link
Owner

zsh2401 commented Apr 16, 2020

了解

@zsh2401
Copy link
Owner

zsh2401 commented Aug 7, 2020

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

@HikariCalyx
Copy link
Author

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

@zsh2401
Copy link
Owner

zsh2401 commented Aug 7, 2020

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

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

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

@HikariCalyx
Copy link
Author

HikariCalyx commented Aug 7, 2020

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

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

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

@zsh2401
Copy link
Owner

zsh2401 commented Aug 7, 2020

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

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

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

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

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

@HikariCalyx
Copy link
Author

说到这一点,你可以新增是否已经解锁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

@zsh2401
Copy link
Owner

zsh2401 commented Aug 8, 2020

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

@HikariCalyx
Copy link
Author

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

@zsh2401
Copy link
Owner

zsh2401 commented Aug 8, 2020

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

@HikariCalyx
Copy link
Author

HikariCalyx commented Aug 8, 2020

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

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
Copy link
Author

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

因此关闭issue。

@HikariCalyx
Copy link
Author

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

@zsh2401
Copy link
Owner

zsh2401 commented Aug 20, 2020

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

@HikariCalyx
Copy link
Author

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

@zsh2401
Copy link
Owner

zsh2401 commented Aug 20, 2020

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants