Как повторно разблокировать загрузчик для OnePlus One

У меня OnePlus One с CyanogenMod 12 с завода и я решил обновиться до CM 13 (ночная сборка).
Для этого я сделал следующее из OSX:

  1. Разблокировать загрузчик (разблокировка fastboot oem)
  2. Загрузите TWRP (fastboot boot twrp-2.8.6.0-bacon.img)
  3. Из TWRP установил CM 13 (cm-13.0-20160105-NIGHTLY-bacon.zip) и GAPPS (open_gapps-arm-6.0-pico-20160105.zip)
  4. Я также установил последний Cyanogen Recovery (cm-13.0-20160105-NIGHTLY-bacon-recovery.img)
  5. Мне почему-то захотелось оставить все как есть, и я переблокировал загрузчик (fastboot oem lock)

Теперь я больше не могу разблокировать загрузчик, чтобы выполнять такие действия, как установка/загрузка пользовательского инструмента восстановления (например, TWRP).
Запуск «fastboot oem unlock» просто перезагружает устройство в режиме восстановления, но загрузчик остается заблокированным:

$fastboot oem device-info
...
(bootloader)    Device tampered: true
(bootloader)    Device unlocked: false
(bootloader)    Charger screen enabled: false
(bootloader)    Display panel:
(bootloader)    console_enabled: 0
(bootloader)    exec_console_unconsole: 0

Решение было бы признательно, но мне также любопытно, почему оно ведет себя так после ручной блокировки.
Как было предложено @Firelord, здесь, похоже, есть решение для пользователей Windows: https://forums.oneplus.net/threads/important-bootloader-wont-unlock-after-relock.324398/

Вы пробовали решение, упомянутое в этой теме: загрузчик не разблокируется после повторной блокировки?
@Firelord, я вижу, что этот инструмент для Windows, я использую OSX.

Ответы (2)

В своих поисках я наткнулся на интересную ветку , которая была связана, но для того, чтобы установить их скрипт, вам нужно установить специальный инструмент восстановления или иметь возможность загрузиться в него (например, fastboot boot recovery.img).

У меня был стандартный инструмент восстановления Cyanogen, и я не мог загрузиться в TWRP из-за моей реальной проблемы (больше не могу разблокировать загрузчик), поэтому я копался в их скрипте и использовал содержимое, предназначенное для сброса битов блокировки и вмешательства в загрузчик.

Теперь я мог запускать команды вручную, если у меня был root-доступ , и, к счастью, в CM 13 ROM вы можете включить его в меню «Параметры разработчика».

Вот команды, которые я использовал после включения root-доступа для ADB:

adb root # перезапустить демон adbd с правами суперпользователя
adb shell # запустить удаленную оболочку в интерактивном режиме
dd bs=1 count=1 skip=1048080 if=/dev/block/platform/msm_sdcc.1/by-name/aboot 2>/dev/null | ххд | cut -c 10- # вывести состояние бита блокировки (00 - заблокировано, 01 - разблокировано)
эхо -ne "\x01" | dd bs=1 count=1 seek=1048080 of=/dev/block/platform/msm_sdcc.1/by-name/aboot # установить бит блокировки на разблокированный (01)
dd bs=1 count=1 skip=1048084 if=/dev/block/platform/msm_sdcc.1/by-name/aboot 2>/dev/null | ххд | cut -c 10- # вывести состояние бита тампера (00 - не изменено, 01 - изменено)
эхо -ne "\x00" | dd bs=1 count=1 seek=1048084 of=/dev/block/platform/msm_sdcc.1/by-name/aboot # установить бит тампера на untampered(00)

Результат:

$fastboot oem device-info
...
(bootloader)    Device tampered: false
(bootloader)    Device unlocked: true
(bootloader)    Charger screen enabled: false
(bootloader)    Display panel:
(bootloader)    console_enabled: 0
(bootloader)    exec_console_unconsole: 0

Я предполагаю, что бит тампера изменяется при первой разблокировке загрузчика (разблокировка fastboot oem), и после того, как вы заблокируете его обратно (блокировка fastboot oem), он не позволит вам повторно разблокировать.

Если xxdи cutне существуют в местах, доступных в $ PATH (как это было в моем случае), префикс busyboxв этих командах.

# print the lock bit state (00 - locked, 01 - unlocked)
dd bs=1 count=1 skip=1048080 if=/dev/block/platform/msm_sdcc.1/by-name/aboot 2>/dev/null | busybox xxd | busybox cut -c 10-     
# set the lock bit to unlocked(01)
echo -ne "\x01" | dd bs=1 count=1 seek=1048080 of=/dev/block/platform/msm_sdcc.1/by-name/aboot                  
# print the tamper bit state (00 - untampered, 01 - tampered)
dd bs=1 count=1 skip=1048084 if=/dev/block/platform/msm_sdcc.1/by-name/aboot 2>/dev/null | busybox xxd | busybox cut -c 10-     
 set the tamper bit to untampered(00)
echo -ne "\x00" | dd bs=1 count=1 seek=1048084 of=/dev/block/platform/msm_sdcc.1/by-name/aboot   
Учитывая, что это всего лишь небольшое дополнение к принятому ответу, это должен быть комментарий или предлагаемое изменение, а не отдельный ответ.
Извините, я просто хочу поделиться своими 5 центами с другими, ваше решение действительно решает мою проблему.
Не жалей, что поделился. Я просто указал правильный способ обмена в этом случае. Используйте кнопку «Добавить комментарий» под моим ответом и добавьте свое примечание о том, что «busybox должен быть добавлен в начале, если xdd и cut не указаны в пути», и дайте небольшой пример, например: «busybox xdd», не дублируя все команды. Другой вариант — предложить редактирование.