Привет, Хабр! Это Кирилл из МТС Диджитал. После того как мне удалось научить хромбук запускаться с флешки, о чем я рассказывал в посте «Chromebook: жизнь после EOS», стало казаться, что нет смысла прошиваться на альтернативную прошивку. Но после очередной попытки установки Linux я обратил внимание на интересный момент: утилита inxi показывала вместо серийного номера просто цифры от 0 до 9.
Есть и еще несколько технических нюансов: некоторые дистрибутивы Linux отказывались корректно определить разрешение экрана, а Gentoo вис при запуске с минимального образа. Я предположил, что, скорее всего, BIOS/UEFI может мешать нормальному использованию альтернативных операционных систем. И как потом оказалось, так оно и есть. Поэтому я решил заняться прошивкой. Казалось бы, элементарная вещь — есть специальный скрипт и гайды в интернете. Что могло пойти не так? Рассказал об этом под катом.
Прежде чем перейти к теме поста, напомню, что я уже писал про свой хромбук:
Попытка найти простое решение проблемы
Сначала я решил изучить опыт других людей: почитать форумы и посмотреть видеоролики на YouTube. Из них в общих чертах складывалась такая картина. BIOS/UEFI в таких устройствах делится на две части. Первую можно легко перешить на что угодно, что я уже и сделал. А вот у второй части есть защита от записи, которая может быть реализована разными способами — от выкручивания специального болта до покупки дебаг-кабеля Suzy-Q: он позволял залезть в дебаг-консоль и оттуда отключить защиту программно.
Когда я разбирал хромбук, внимательно изучил материнскую плату — никаких болтов для снятия защиты не обнаружил. Значит, защита реализована иначе. На сайте MrChromeBox.tech есть раздел поддерживаемых устройств. Напротив моей модели стояли две галочки, что означает поддержку перепрошивки — как частично, так и целиком. А в качестве метода снятия защиты указывалось Cr50 (battery). На том же ресурсе есть раздел, где детально описана последовательность шагов для отключения защиты:
Отключить хромбук.
Отключить его от блока питания.
Снять нижнюю крышку.
Отключить батарею.
Поставить крышку обратно.
Подключить к блоку питания — минимум 45W.
После того как процесс перепрошивки с помощью скрипта будет завершен, сделать все в обратном порядке, вернув на место батарею и собрав хромбук. Вроде бы элементарщина, но как только я отключил батарею и собрал все обратно, на кнопку питания хромбук попросту не реагировал. Почитав еще разные форумы, понял, что есть модели, которые вообще не рассчитаны на работу только от блока питания. На моей памяти так себя вел мой старенький MacBook Air, которому тогда пришлось докупать батарею: без нее он банально не включался.
Если честно, я грешил и на блок питания. Оригинальный давно отправился в утиль, а вместо него я использую 65W GaN от Xiaomi. Мощности там в избытке, но я предположил, что оригинальный блок питания как-то связывается с контроллером внутри хромбука и позволяет (или не позволяет) запустить его без батареи. Окей, иду на Amazon и заказываю оригинальный блок питания, благо эта штука недорогая и привезут быстро. Но пока он в пути, решил поискать альтернативный способ.
Suzy-Q
Самым перспективным показалось приобрести или собрать кабель Suzy-Q (Suzy-Qable). Но выяснилось, что компания SparkFun в 2021 году прекратила их выпуск, а редкие, оставшиеся в продаже, экземпляры стоят неадекватных денег. Есть и вторая опция — собрать его самому, используя модуль USB Type-C, где каждая линия разведена для удобства пайки:
Такие модули я давным-давно заказывал на Aliexpress, и все это время они ждали своего часа. Осталось найти схему, но, как оказалось, Google сам выложил ее для всех желающих:
Первую версию кабеля я спаял буквально на коленке, но поскольку резисторов нужного номинала у меня не было, пришлось использовать последовательное соединение из нескольких. Проверил мультиметром, вроде бы сошлось. Обратите внимание, что кабель этот работает только в одном порту USB-C (на моей модели левом) и только в одном положении. Если кабель перевернуть, ничего не получится.
Окей, попробовал, собрал, подключил. В одном положении ноль эмоций. Зато воткнув его обратной стороной, я получил неожиданный эффект: хромбук тупо завис и перезапустился. Стало ясно, что я где-то ошибся, а USB-порт от короткого замыкания спасла защита. На всякий случай решил достать резисторы нужного номинала и отправился в местный магазин радиотоваров. Взял еще один модуль, но перед тем как паять, решил убедиться в том, что схема правильная. И сразу же наткнулся на тред, где участники обсуждали как раз именно этот вопрос:
Оказалось, что на моей плате эти два контакта перевернуты, точнее, маркировка контактов выполнена не для USB-C Male, а для USB-C Female. Один из участников написал, что решил проблему, причем даже с более простой распиновкой:
A5: D+;
B5: D-;
A8: 22K resistor to VCC;
B8: 56K resistor to VCC.
На его устройстве точки VBUS и GND даже не пришлось подключать. Ну окей, делаю так же, переворачивая А8 и B8. За качество пайки просьба не бить, паялось тем, что было под рукой:
Подключаю — уже ничего не перезагружается, но ничего и не происходит. Помню о том, что штекер будет работать только в одном положении, переворачиваю… и снова тишина. В логах dmesg висели ошибки о том, что невозможно корректно распознать подключенное устройство. Значит, придется вновь создавать полную схему. Но у меня оставался лишь один модуль, и я решил пока что отложить эту затею. Чуть позже я все же спаял финальный вариант, но снова те же ошибки о невозможности определить тип USB-устройства. Вновь тупик.
На самом деле, если бы Suzy-Qable сработал корректно, то это дало бы мне доступ к консоли CCD (Closed-Case Debug) и одной командой удалось бы снять защиту. Но увы, я вновь вернулся к мысли, что снимать защиту нужно методом отключения батареи. Тут ко мне доехал оригинальный блок питания, и я в тот же день снова разобрал хромбук. Отключив батарею, попробовал запустить его, как было сказано в гайде. Но меня ждало разочарование: ноутбук без батареи не запускался.
Экстремальный способ
Дальше стал прикидывать варианты. Можно попробовать еще раз сделать Suzy-Q-кабель просто на макетной плате, но на тот момент у меня не было подходящей длины «гребенки». Тогда в голову пришла мысль: а что, если отключить батарею прямо наживую при подключенном блоке питания. По логике, если с контроллером батареи что-то случится в процессе работы, то схема зарядки должна перейти в режим сбоя. Но при этом продолжить работать, давая пользователю возможность сохранить результаты работы и отключить устройство штатным образом. После этого, разумеется, устройство уже не включится.
Да, затея опасная, но это мое устройство, и я был морально готов к тому, что оно полностью выйдет из строя. Поэтому, сняв заднюю крышку и подключив блок питания, я одним точным движением выдернул батарею из разъема. Индикатор зарядки, как я и предполагал, заморгал оранжевым, сигнализируя о сбое батареи, а дроссель питания противно зажужжал на грани слышимости. Хромбук при этом продолжал работать, и, не теряя ни минуты, я запустил скрипт перепрошивки.
Спустя пару секунд я увидел, что шалость удалась и защита отключена. Скрипт пару раз предупредил, что я не смогу после этой процедуры вернуться на ChromeOS, на всякий случай заставил подключить флешку и сделал на нее бэкап дампа. После этого началась перепрошивка, и система сообщила, что я могу перезагружаться. Разумеется, после выключения хромбук просто потух и стал ждать, пока я вновь не подключу батарею.
Вернув на место батарею, подключил блок питания — и, о чудо, теперь вместо белого экрана загрузчика ChromeOS красовался кролик, логотип LinuxBIOS aka coreboot:
Помимо того, что у меня появился полноценный доступ к BIOS, я попробовал запустить установочный диск Gentoo, и он спокойно запустился. Другие дистрибутивы, такие как Debian 12 и Ubuntu 22.04, стали корректно определять разрешение экрана при запуске. Все проблемы на этом были решены. Осталась только пара вопросов, которые не давали мне покоя, — а что же это за Cr50?
Что за Cr50
Тут можно легко нагуглить. Cr50 — название прошивки для контроллера СrOS EC (Embedded Controller). Но вот что это за контроллер, было неясно ровно до того момента, пока я не наткнулся на PDF-презентацию чипа Google Security Chip H1. Сам документ был удален еще в 2021 году, но благодаря Архиву Интернета его все еще можно посмотреть через Wayback Machine.
Оказалось, что внутри хромбука живет фактически еще один компьютер на базе ARM SecurCore SC300:
По скорости эта штука довольно медленная. В хромбуках ее тактовая частота всего лишь 24 MHz, но вот завязано на нее многое. Судите сами:
Во-первых, она обеспечивает работу механизма верифицированной загрузки ОС, выполняя роль TPM. Во-вторых, на нее завязана работа дебаг-консоли, той самой CCD. В-третьих, она может при необходимости подать сигнал на отключение батареи, а также гарантировать полную перезагрузку всех систем хромбука. Ну и разумеется, именно эта штука защищает SPI-флешку BIOS/UEFI от перезаписи.
Более того, реализация Google Security Chip H1 предусматривает, что он может работать аппаратным ключом защиты U2F, то есть использоваться для двухфакторной аутентификации. Словом, этот замечательный чип полностью контролирует систему, живя своей незаметной жизнью внутри устройств на базе ChromeOS. Его единственное слабое место — зависимость от подключенной батареи. Именно поэтому, как только батарея была отключена, чип больше не мог обеспечить защиту от перезаписи SPI-флешки. Это и дало возможность беспрепятственно прошить туда стороннюю прошивку.
Вместо заключения
Кто-то скажет, что выдергивать батарею «наживую» — своего рода надругательство над техникой. Наверное, можно было продолжить попытки отключения защиты через CCD. Но в моем случае этот риск был оправдан, поскольку хромбук не рассчитан на работу только от блока питания без батареи.
Для хромбуков других вендоров эта проблема будет вообще неактуальна. Я встречал в сети много упоминаний о том, что их хромбуки прекрасно себе запускались без батареи и спокойно работали. Ну и многим действительно удалось собрать рабочий Suzy-Q-кабель и подключиться к CCD-консоли.
Стоила ли игра свеч? Однозначно да. Теперь мой хромбук стал полноценным компьютером, на котором можно спокойно установить актуальную версию Linux и пользоваться любыми приложениями без ограничений. Кстати, весь этот пост целиком написан именно на нем — небольшом компактном хромбуке, который уже семь лет исправно выполняет свои обязанности. Так что я ни о чем не жалею!
AVX
Весьма интересно, однако, очень много лишних телодвижений, банально из-за отсутствия какого-то опыта по перепрошивке и ремонту ноутбуков вообще (мне так показалось). Всякие шаманства с батареей и последовательностью подключения и отключения - не самые хорошие способы что-то там обойти.
Вообще, в ноутбуках обычно делают две прошивки - одна для EC, вторая основная. Их расположение может отличаться у разных вендоров и моделей. Вариантов несколько: внутри одного SPI чипа (одна область вычитывается EC и им выполняется, вторая - считывается процессором и выполняется далее); в другом варианте одна часть (для EC) находится в отдельном носителе (тут тоже ещё два варианта: внутри EC или отдельная SPI), вторая часть на SPI, который считывает процессор. В обоих случаях основную прошивку можно без проблем сменить - выпаять эту флешку SPI, прошить на программаторе. С прошивкой EC могут быть варианты - либо нужно вторую флешку прошить (и ещё найти нужный дамп, что не всегда получается), либо искать программатор на этот EC (зачастую прошивается прямо на плате, без отпайки).
Про защиту от записи SPI - на самом деле, реальная защита от записи в SPI есть только в одном случае - если SPI работает не в quad режиме (а это в основном старые устройства, ибо с новыми загрузка устройства будет весьма долгой, т.к. прошивки уже стали заметно жирнее), второй момент - нужно чтобы при прошивке SPI была включена программная защита от записи, И третий - чтобы на плате третий вывод этой SPI был на 4й закорочен (т.е. на нём был 0). Если что-то из этого не соблюдено - считай защиты нет или она не полная, т.к. может быть снята программно. В quad SPI вообще нельзя использовать в целях защиты от записи 3й вывод, он используется для данных. На программаторе же вообще без разницы - защита снимается и проблем нет - пиши что угодно.
m0tral
Я считаю что программатором это любой дурак сможет, тут все просто и элементарно, это топорно, как лопатой работать, а вот используя какой либо интерфейс, это уже техника, знания и спорт в конце концов.
Ratenti
Чтобы микросхемы снять нужна паяльная станция же?
AVX
SPI флешку? Там планарная с 8 выводами обычно. Просто паяльника достаточно чаще всего. Можно со спец насадкой. Но никто не запрещает и паяльной станцией.
EC - только паяльной станцией снять. В каком виде тут именно, я не знаю, не смотрел. Но обычно это штука со 128 ножками. И паять довольно муторно это (снять проще, чем поставить, не всегда все ножки чëтко припаиваются с первого раза).