habrahabr

Прощай, ChromeOS: долгий путь к Linux с самодельным Suzy-Q-кабелем и прошивкой BIOS

  • вторник, 24 сентября 2024 г. в 00:00:11
https://habr.com/ru/companies/ru_mts/articles/844122/

Привет, Хабр! Это Кирилл из МТС Диджитал. После того как мне удалось научить хромбук запускаться с флешки, о чем я рассказывал в посте «Chromebook: жизнь после EOS», стало казаться, что нет смысла прошиваться на альтернативную прошивку. Но после очередной попытки установки Linux я обратил внимание на интересный момент: утилита inxi показывала вместо серийного номера просто цифры от 0 до 9. 

Есть и еще несколько технических нюансов: некоторые дистрибутивы Linux отказывались корректно определить разрешение экрана, а Gentoo вис при запуске с минимального образа. Я предположил, что, скорее всего, BIOS/UEFI может мешать нормальному использованию альтернативных операционных систем. И как потом оказалось, так оно и есть. Поэтому я решил заняться прошивкой. Казалось бы, элементарная вещь — есть специальный скрипт и гайды в интернете. Что могло пойти не так? Рассказал об этом под катом.


Прежде чем перейти к теме поста, напомню, что я уже писал про свой хромбук:

  1. Chromebook: жизнь после EOS

  2. Ищем адекватную замену ChromeOS для устаревшего Chromebook. Несколько интересных экспериментов 


Попытка найти простое решение проблемы

Сначала я решил изучить опыт других людей: почитать форумы и посмотреть видеоролики на YouTube. Из них в общих чертах складывалась такая картина. BIOS/UEFI в таких устройствах делится на две части. Первую можно легко перешить на что угодно, что я уже и сделал. А вот у второй части есть защита от записи, которая может быть реализована разными способами — от выкручивания специального болта до покупки дебаг-кабеля Suzy-Q: он позволял залезть в дебаг-консоль и оттуда отключить защиту программно.

Когда я разбирал хромбук, внимательно изучил материнскую плату — никаких болтов для снятия защиты не обнаружил. Значит, защита реализована иначе. На сайте MrChromeBox.tech есть раздел поддерживаемых устройств. Напротив моей модели стояли две галочки, что означает поддержку перепрошивки — как частично, так и целиком. А в качестве метода снятия защиты указывалось Cr50 (battery). На том же ресурсе есть раздел, где детально описана последовательность шагов для отключения защиты:

  1. Отключить хромбук.

  2. Отключить его от блока питания.

  3. Снять нижнюю крышку.

  4. Отключить батарею.

  5. Поставить крышку обратно.

  6. Подключить к блоку питания — минимум 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 и пользоваться любыми приложениями без ограничений. Кстати, весь этот пост целиком написан именно на нем — небольшом компактном хромбуке, который уже семь лет исправно выполняет свои обязанности. Так что я ни о чем не жалею!