Lenovo Thinkpad X220 — одна из обожаемых мною моделей ноутбуков (вторая из обожаемых — это Panasonic Toughbook CF-19). Прекрасная семирядная клавиатура, где нашлось место для всех необходимых кнопок — есть даже отдельные кнопки для Home, End, Pause1 и Insert! Прочный корпус из магниевого сплава, покрытый чем-то вроде резины для лучшей «хватабельности». Запоминающийся внешний вид — угловатый чёрный прямоугольник, который выглядит строго и в то же время достаточно ретро-футуристично. И сравнительно мощное железо, которым можно пользоваться и по сей день.

Ах, если бы он ещё был произведён не Lenovo, а IBM, имел клавиатуру и модульность как у IBM Thinkpad 760XD, а ещё механическую клавиатуру; и трекбол как у Thinkpad 220 — то цены бы ему не было!

Автор: Matthew S. Smith / Lifewire

Thinkpad X220 приглянулся мне ещё со времён университета. К сожалению, в те давние времена такой ноутбук для безработного студента по стоимости не сильно отличался от крыла для Боинга. Но годы шли и в один прекрасный момент я смог таки побаловать себя и купил одну из машинок с «той самой» каноничной клавиатурой с синим Enter’ом — дабы закрыть гештальт, так сказать.

Благо к 2019 году цены на бывший в употреблении Thinkpad X220 перестали быть заградительными и я достаточно быстро нашёл ноутбук из Европы примерно за 19000 рублей (около 300$). Это была машина с четырёхъядерным Intel Core i7 на 2.7 GHz, 8 Gb оперативной памяти и с SSD. К счастью, его предыдущий владелец был аккуратен и у ноутбука было лишь несколько светлых пятен на матрице2 от случайных ударов и микроскопические потёртости на углах крышки.

Идеальных вещей в этом мире не существует — в противном случае эта статья не появилась бы, а инженеры умерли бы от скуки. За 4 года использования своего ноутбука я столкнулся с рядом неудобств:

  • Вышеупомянутые пятна на экране. Это лечится, очевидно, заменой дисплея на исправный.
  • Разрешение экрана 1366x768 — обрабатывать фотографии на нём тяжело, потому что пиксели видно! В то же время я видел как люди спокойно обрабатывают фотографии на макбуке с чуть большей диагональю экрана — ведь у него разрешение 2560×1600 и фотографии выглядят достаточно чётко.
  • Whitelist в BIOS — не даёт подключать «не одобренные производителем» WiFi-карты и прочую внутреннюю периферию, которая может быть даже лучше, чем то, что было «одобрено».
  • Клавиатура с британской раскладкой, тогда как я привык к американской.

Ну и конечно же мне не давало покоя шило в известном месте. Модифицировать столь популярный у технарей ноутбук это как устанавливать моды на Skyrim — всегда можно добавить ещё что-нибудь интересное.

В современном скучном мире, когда в ответ на вышеупомянутые вызовы большинство людей просто пожмёт плечами и купит новый ноутбук, по форме напоминающий плоский кусок мыла и неотличимый от своих собратов на полке магазина — у всех одинаково глянцевый экран, одинаково несъёмный аккумулятор, плоская островная клавиатура, не дающая приятных тактильных ощущений при печати, и тачпад с закосом под макбук — должен же кто-то продолжать делать весёлые вещи?

Установка нового 2K экрана

Естественно, я начал с того, что беспокоило меня больше всего — с дисплея. Хотелось, чтобы у моего X220 был экран с разрешением как у макбука и чтобы он был матовым — такой экран не будет бликовать и отпечатки пальцев на нём будут менее заметны. Раньше у меня уже был Asus F6E с глянцевым дисплеем — все отражения от окон, потолочных ламп и прочих источников освещения были моими. Но когда привыкаешь — кажется будто всё удобно и проблем нет: «просто яркость побольше сейчас выкручу и всё» 🤡.

Мне было известно, что некто nitrocaster делает HD-модификации для Thinkpad X220 — но сейчас они уже out of stock в его магазине. Также, какой-то китаец делал материнские платы с современным железом и (вроде как) 30-pin LVDS разъёмом, который подходит для подключения современных дисплеев без применения паяльника. Но, как я читал на Reddit’е, он устал и временно прекратил приём заказов.

К счастью, на AliExpress нашлись платы расширения для Thinkpad, добавляющие на выбор поддержку FHD, 2K или 4K экранов. Инструкция по установке этих плат ничем не лучше переведённых китайских даташитов на электронные компоненты, но это меня не остановило — немедленно была куплена плата 2K-модификации, кабель для дисплея и сам дисплей (уже у другого продавца). Повезло, ориентируясь исключительно на отзывы вида: «купил этот дисплей для 2K-модификации своего ThinkPad, всё работает, спасибо» — отыскать подходящий мне Sharp LQ125T1JW02.

В силу отсутствия хорошей документации, пришлось одним глазом смотреть в китайскую инструкцию, другим в PDF от nitrocaster, а третьим — обращаться к здравому смыслу и навыкам, полученным в университете (тот момент, когда пририсовывание опыта в резюме — не поможет, фьюить-ха).

Самое простое это разборка ноутбука — его можно разобрать практически вслепую, при помощи одной лишь отвёртки, по мануалу. А вот дальше начинается самое интересное, несмотря на чёткое следование всем инструкциям…

Я снял резистор R318 и припаял по одной медной жиле к конденсаторам C137 и C584 — эти жилы потом будут припаяны к плате модификации. Оказалось, что очень важно использовать всего одну тоненькую жилу — даже несколько жил, свитых вместе, легко оторвут контактную площадку вместе с самим конденсатором. В первую попытку модификации X220 у меня именно это и случилось — пришлось подпаиваться к переходному отверстию, куда уходила оторванная дорожка от конденсатора C137:

Оторванный конденсатор и пайка к переходному отверстию

К счастью, этот конденсатор оказался не особо нужен, ибо дорожка от него уходила на разъём Display Port док-станции, чьи линии уже заняты платой 2K модификации:

Дальше я взялся за китайскую плату. Мой экземпляр потребовал небольшой обработки напильником надфилем и кусачками, ибо она была неаккуратно выкушена из панели с платами после травления дорожек. Ещё были залужены две контактные площадки (отмечены стрелками на фото), куда будут припаиваться жилы от конденсаторов:

Китайская плата 2K-модификации для Thinkpad X220

После этого я аккуратно установил плату расширения на материнскую плату, проверил, что ноги от разъёма для док-станции попадают в нужные отверстия:

И начал паять. Что именно надо паять понять просто — у соответствующих отверстий есть золотое напыление. Для маленьких круглых отверстий пришлось воткнуть в паяльник самое тонкое и острое жало, чтобы дотянуться до ножек разъёма для док-станции и прогреть припой вокруг них.

Поскольку к 2011 году всех, кто производит потребительскую электронику, уже успели перевести на бессвинцовый припой — естественно ничего не прогрелось и не припаялось. Пришлось немного повысить температуру паяльника и подмешать нормальный, т.е. свинцовый, припой к месту пайки, чтобы олово начало плавиться. Только после этого у меня что-то да получилось. Естественно, использовался подходящий для микроэлектроники флюс (не канифоль, не кислотный и не ЛТИ 120) — без него вообще бы ничего не получилось.

Припаянная плата 2K-модификации

Как видно, тут я отклеил плёнку от места для пайки, припаял плату 2K-мода, а потом закрыл всё плёнкой, прорезав окошко для разъёма LVDS. Таким образом, случайно пролитая вода не попадёт ни на одну из плат и спокойно уйдёт в сточные отверстия, как и задумывалось инженерами IBM.

Установленная и закрытая защитной плёнкой плата 2K-модификации

С первого раза 2К экран конечно же не заработал. Сначала внешний дисплей даже не включался и отсутствовал в выводе xrandr, но после того как я постучал пластмассовой палочкой по плате расширения — он внезапно появился в выдаче утилиты. Дальнейшее стучание по плате привело к тому, что изображение на новом дисплее начало моргать и пошло разноцветными полосами — как при повреждённом видеокабеле. Поскольку «электроника это наука о контактах» — очевидно, что одно из миниатюрных круглых отверстий не соединилось с ножкой разъёма на материнской плате. Или, вероятно, пайка была плохой и треснула от ударов. Пришлось снова отсоединять материнскую плату от периферии и ещё раз пропаивать плату 2K мода. В процессе выяснилось, что при первой пайке паяльник не был достаточно горячим — иногда он прилипал к олову только что запаянного отверстия — но в первый раз я не обратил на это внимания.

После повторной пайки контактов новый дисплей сразу же заработал и никак не реагировал на стучание по плате расширения:

Впрочем, разноцветные полосы на экране — не единственный признак проблем с контактами. У меня новый дисплей иногда не включался и распознавался xrandr как имеющий разрешение 640x480. А ещё, после выключения обоих дисплеев для энергосбережения — основной дисплей включался, а на новом включалась только лишь подсветка, но изображение не появлялось. Все эти проблемы также решились повторной пропайкой круглых контактов на плате расширения.

Но на этом мои приключения с паяльником не закончились, ибо я случайно сжёг материнскую плату…

Впервые, за всё то время что этот ноутбук был у меня, я установил на него Windows. После такого кощунства3 он намертво завис — да так, что даже не реагировал на долгое нажатие кнопки включения питания. Ну а я взял и необдуманно выдернул из работающего ноутбука аккумулятор — и дальше он уже не включался, просто моргал один раз кнопкой включения питания и всё…

Если оставить плату полежать полдня на верстаке, чтобы фиксики отдохнули без напряжения — она всё-таки включалась. Правда примерно на полчаса, после чего симптомы зависания повторялись, увы, уже в любой операционной системе. В попытках починить всё, я дошёл до микросхемы контроля питания для ноутбуков (U59) — успел проверить, что все линии питания, подходящие к этой микросхеме, действительно это питание подают — и 3.3 В, и 5 В, и 17 В, и 20 В.

Хэппи-энда увы не будет. Когда я начал проверять, что там на сигнальных входах, у меня дрогнула рука и линия питания на 17 В была замкнута на одну из сигнальных линий. После чего, скорее всего что-то сгорело либо в схеме, идущей от разъёма зарядки/внешнего питания, либо где-то в районе преобразователей напряжения на 3.3/5 В. Шёл уже седьмой день копания в нерабочей плате (сначала я думал, что проблема в BIOS’е и экспериментировал с ним), всё это меня изрядно задолбало — и я просто поступил согласно сервисному мануалу от Lenovo — закинул в угол сломанную плату и поставил заведомо рабочую. Мне повезло найти оригинальную работающую плату с Core i7 на Авито, у человека, который продавал свой старый ноутбук.

Поскольку рука уже была набита — на вторую материнскую плату я припаял всё что надо не приходя в сознание и 2K модификация заработала с первого раза. Так что могу сказать, что это не самый сложный этап модификации ноутбука, главное никуда не торопиться и аккуратно паять.

Прошивка coreboot

К сожалению, новый дисплей не работал ни в BIOS, ни в GRUB — только в Linux:

Настройка Config->Display в BIOS’е не помогала, а китайский продавец на вопросы отвечал с огромной задержкой, поэтому пришлось справляться своими силами. Я заметил, что дисплей включается, когда Linux переключает режим вывода с текстового на framebuffer. И предположил, что если BIOS тоже будет делать такое же переключение, то проблема решится.

Официальный BIOS, естественно, так делать не умеет. Но в половине историй про переделку Thinkpad X220 я встречал упоминание coreboot. И как раз, в вики этого проекта нашлось упоминание некоей libgfxinit, которая умеет устанавливать другой видеорежим, помимо текстового.

К счастью, прошивать coreboot оказалось гораздо проще, чем перепрошивать оригинальный BIOS. В случае последнего надо где-нибудь найти Windows, установить её на ноутбук или сделать загрузочную флешку (dd тут увы не поможет), подключить аккумулятор, причём обязательно заряженный — иначе привередливая программа для обновления BIOS’а откажется что-либо делать.

Обновление BIOS на ThinkPad’е

А для coreboot нужно лишь следующее:

  • Физический доступ к чипу BIOS (в левом нижнем углу платы, рядом с корзиной для карты PCI-Express)
  • Программатор для чипов флэш-памяти с интерфейсом SPI, например CH341.

Судя по маркировке, у меня чип Macronix MX25L6406E

Процедура прошивки coreboot максимально простая и привычная для разработчика встраиваемых систем — плата отключается от питания и периферии и на неё с компьютера через программатор заливается бинарник с прошивкой. Делается всё это через утилиту flashrom, которой до лампочки какой там аккумулятор у ноутбука, насколько он заряжен и какая сейчас фаза Луны.

Первое время я использовал «прищепку» для корпуса SOP-8 — во всех гайдах рекомендовали использовать её «для удобства», чтобы ничего не пришлось паять:

«Прищепка» для подключения к чипу флеш-памяти

Но всеми этими советами: «как бы всё сделать без паяльника» — оказалась выложена дорога в ад. На второй материнской плате был установлен чип Winbond W25Q64CV — который, судя по сообщениям от людей, тоже пытавшихся залить на него coreboot — весьма требователен к качеству подводимых к нему сигнальных линий, в отличие от чипа от Macronix. Требуются максимально короткие линии одинаковой длины и надёжный контакт с ногами чипа — поэтому, в конечном итоге мне всё равно пришлось подпаиваться к микросхеме флеш-памяти — благо, нужно было всего лишь подпаяться к ногам с интерфейсом SPI и к питанию микросхемы.

Припаянный к чипу шлейф от программатора

С 30-сантиметровым же шлейфом от «прищепки», из чипа от Winbond у меня читалось непонятно что, а запись чаще всего заканчивалась с ошибками. Именно так, оригинальный BIOS от материнской платы №2 был навсегда утерян… Мне «повезло», что за два чтения дампа из чипа — неправильно прочитанные биты были в одних и тех же местах.

$ cd bios/
$ sudo flashrom -p ch341a_spi -r bios_thinkpad_x220_original.rom -V
$ sudo flashrom -p ch341a_spi -r 02.rom -V
$ md5sum *.rom
8e7e07cf8cf2f1e8df5fe66cfd92dcb8  02.rom
8e7e07cf8cf2f1e8df5fe66cfd92dcb8  bios_thinkpad_x220_original.rom

Видимо, именно поэтому после подключения программатора, советуют прочитать содержимое чипа как минимум три раза.

Дальнейшие мои действия опирались на вот эти посты: раз и два. После нескольких дней экспериментов с первой платой, пока она ещё не сгорела, выяснилось следующее:

  • coreboot с Legacy инициализацией видео и без Video BIOS не умеет отображаться на втором (2K) дисплее.

  • coreboot с Legacy инициализацией видео и с Video BIOS, который я скачал у человека, собиравшего coreboot для Thinkpad X220 — выдаёт зелёные квадраты на основном дисплее, второй дисплей в в принципе не работает. После зелёных квадратов coreboot виснет намертво.

  • coreboot с libgfxinit — не отображается на втором дисплее. И ещё не поддерживает загрузку ОС в текстовом режиме. Например, вместо текстового установщика FreeBSD в верхней части экрана видна узкая полоса с чем-то, наподобие видеопомех4.

  • китайский BIOS, который даунгрейднут до 1.44 и пропатчен особыми китайскими патчами именно для моей платы 2K модификации — тоже не умеет отображаться на втором дисплее.

После такого я полёз в исходники coreboot, где быстро выяснил следующее:

  1. Видеовыход DP3, к которому подключается мой 2K монитор через плату расширения — описан и в исходном коде coreboot, и в исходном коде libgfxinit.
  2. Если поправить код на языке Ада для libgfxinit, чтобы она инициализировала DP3 на старте вместо системного LVDS — мой 2K дисплей всё равно ничего не показывает.
  3. Если скачать даташит на дисплей, прописать в коде coreboot нужные тайминги в коде инициализации видео для платформы Lenovo X220 и инициализировать DP3 на старте в legacy видео-режиме — дисплей всё равно ничего показывать не будет.

Тут мне либо не хватило понимания языка Ада, либо документации об инициализации встроенного видеоядра Intel GMA 3000 на моём CPU («благо» пользовательскую документацию от Intel на это не самое свежее видеоядро теперь можно скачать разве что в даркнете 🤡🤡🤡) — в конечном итоге мой высокочёткий дисплей по прежнему заводился лишь внутри ОС.

Впрочем, смысл от coreboot на Thinkpad X220 по прежнему был. Во-первых, всё что мне надо от биоса, это:

  • уметь запускать загрузчик с жёсткого диска
  • уметь менять местами клавиши Ctrl и Fn — для меня Ctrl это обязательно левая нижняя клавиша клавиатуры. Это база.

Во-вторых, coreboot у меня запускался на порядок быстрее, чем оригинальный BIOS. Даже несмотря на добавленную паузу в две секунды, чтобы успеть выбрать другой диск для загрузки. В ситуации, когда у тебя дисплей начинает что-то показывать только в момент загрузки ОС — хочется проскочить загрузку BIOS’а и загрузчик ОС максимально быстро.

Подготовка к сборке coreboot достаточно проста и выполняется всего одной командой, которая распиливает дамп оригинального BIOS на бинарные, проприетарные блобы и отключает Intel ME:

git clone --recursive https://review.coreboot.org/coreboot.git && \
    git clone https://github.com/corna/me_cleaner.git && \
    cd coreboot/util/ifdtool && make && sudo make install && \
    cd ../../../bios && \
    python ../me_cleaner/me_cleaner.py -s bios_thinkpad_x220_original.rom -O working_copy.rom && \
    ifdtool -x working_copy.rom && \
    mkdir -p ../coreboot/3rdparty/blobs/mainboard/lenovo/x220/ && \
    mv flashregion_0_flashdescriptor.bin ../coreboot/3rdparty/blobs/mainboard/lenovo/x220/descriptor.bin && \
    mv flashregion_2_intel_me.bin ../coreboot/3rdparty/blobs/mainboard/lenovo/x220/me.bin && \
    mv flashregion_3_gbe.bin ../coreboot/3rdparty/blobs/mainboard/lenovo/x220/gbe.bin && \
    rm flashregion*.bin working_copy.rom

К счастью, мне повезло, и несмотря на то, что оригинальный BIOS со второй материнской платы был прочитан с ошибками из-за использования «прищепки» и впоследствии, после первой перепрошивки на coreboot, был утерян безвозвратно — нужные области в полученном бинарнике не пострадали.

Я настроил coreboot под ThinkPad X220 следующим образом:

CONFIG_VENDOR_LENOVO=y
CONFIG_LINEAR_FRAMEBUFFER_MAX_HEIGHT=768
CONFIG_LINEAR_FRAMEBUFFER_MAX_WIDTH=1366
CONFIG_CONSOLE_POST=y
CONFIG_SEABIOS_PS2_TIMEOUT=3000
CONFIG_HAVE_IFD_BIN=y
CONFIG_BOARD_LENOVO_X220=y
CONFIG_PCIEXP_L1_SUB_STATE=y
CONFIG_PCIEXP_CLK_PM=y
CONFIG_H8_SUPPORT_BT_ON_WIFI=y
CONFIG_H8_FN_CTRL_SWAP=y
CONFIG_HAVE_ME_BIN=y
CONFIG_CHECK_ME=y
CONFIG_HAVE_GBE_BIN=y
CONFIG_GENERIC_LINEAR_FRAMEBUFFER=y
CONFIG_DRIVERS_PS2_KEYBOARD=y
CONFIG_COREINFO_SECONDARY_PAYLOAD=y
CONFIG_MEMTEST_SECONDARY_PAYLOAD=y

И залил в материнскую плату №2 получившийся бинарник. И тут, внезапно, началось время чудес! Почему-то coreboot отобразился на 2K дисплее! Ту же самую конфигурацию coreboot я уже применял на первой плате и там что-то показывалось только на оригинальном дисплее. Более того, в отзывах на AliExpress один человек тоже писал, что у него не отображается coreboot на 2K экране.

Также, в рассылке coreboot я видел человека с аналогичной проблемой. И единственный выход, который ему подсказали — либо дизассемблировать и патчить оригинальный Video BIOS, чтобы он выводил видео не на LVDS, а на нужный интерфейс. Либо переходить на libgfxinit и править её исходный код, чтобы при старте системы использовался нужный видеовывод.

Почему вдруг всё заработало на второй материнской плате, которая отличается от первой исключительно маркой чипа Flash-памяти для BIOS, и без каких-либо правок исходного кода coreboot — я не знаю 🤷‍♂️.

Возможно, с момента ответа на вышеупомянутое письмо в рассылке, разработчик libgfxinit уже успел реализовать графический вывод на все, имеющиеся на плате, интерфейсы. А с моей материнской платой №1 ничего не работало из-за того же, из-за чего она в конечном итоге и померла. Возможно, при повторной пересборке coreboot «с нуля» я включил пару опций, которых вроде как раньше не было. Чтобы понять, что произошло — мне нужно немного больше оборудования, чем у меня есть сейчас, и ещё несколько материнских плат и плат 2K-модификации для тестирования. Проверять свои гипотезы на единственной (из двух) работающей плате — я уж точно не готов.

Установка нового дисплея

Осталось … установить дисплей на его законное место.

Сначала я разобрал оригинальный дисплейный модуль по сервисному мануалу5 и вытащил оттуда всё ненужное:

  • Видеокабель к старому дисплею (проходит через левую петлю)
  • Сам дисплей
  • Провода к антеннам от WWAN-модуля — синий и красный (зачем я их снимал — написал ниже, в разделе про WiFi-модуль)
  • Провод к антенне от WiFi-карты — чёрного цвета.

Ну и снял соответствующие антенны, ибо там, куда мы отправляемся — эти антенны нам не понадобятся.

Отклеивание ненужных WiFi антенн

В итоге, у меня получилась такое:

Через левую петлю пойдёт видеокабель от нового дисплея. А через правую петлю всё так же будет идти шлейф от камеры и от LED-board, вместе с кабелем от последней оставшейся WiFi антенны.

Для того чтобы сюда влез новый дисплей — я занялся слесарными работами. Нижняя часть моего 2K дисплея немного шире, чем у оригинального и, чтобы всё поместилось внутрь крышки ноутбука, надо срезать металлические направляющие для проводов рядом с петлями.

Эти направляющие, рядом с обеими петлями, надо срезать

У меня был лишь Dremel, отрезные диски по металлу и абразивные насадки для шлифовки. Этого хватило, чтобы «слизать» ненужные направляющие. Но если вдруг у вас завалялся фрезерный станок, то проще воспользоваться им! Говорят, что результат будет ещё лучше и красивее.

Срезанные направляющие для проводов

Также, небольшой доработки напильником потребовала рамка для дисплея — надо было немного подточить пластик, рядом с петлями, чтобы он не упирался в новый дисплей. И ещё я откусил кусачками пару пластмассовых защёлок, ответные части для которых были только что срезаны Dremel’ем.

Сам новый дисплей, увы, не имел никаких точек крепления. Это просто плоский тонкий прямоугольник, в коробку с которым была вложена пара полосок двустороннего скотча. Естественно, я не собирался уподобляться современным производителям ноутбуков и вклеивать дисплей в крышку, чтобы потом всячески мучиться при необходимости снять его — а снимать его придётся практически для любых действий с антенной, камерой, подсветкой клавиатуры и т.д. и т.п.

И тут мой взгляд упал на снятый оригинальный дисплей — ведь он «лежит» в такой удобной металлической рамке, в которой уже есть «ушки» под винты, вкручивающиеся в крышку ноутбука:

Кроме того, эта рамка позволяла легко выставить требуемую высоту нового дисплея внутри крышки — его лицевая сторона должна быть на одном уровне с проушинами, по аналогии с оригинальным дисплеем:

Старый дисплей был немедленно разобран на полезные составляющие — на металлическую рамку, от которой были отпилены крепления снизу для управляющей платы оригинального дисплея и П-образный загиб в нижней «перекладине». И на кусок прозрачного пластика, который идеально дополнял по высоте новый дисплей. Всё это было склеено друг с другом клеем «Момент» и двусторонним скотчем — и в итоге на свет появился новый 2K дисплейный модуль, который при желании можно снять одной лишь крестовой отвёрткой, без фена и лишних страданий.

«Корзина» для 2K-дисплея

Установленный новый дисплей

Остался финальный штрих. Я оторвал логотип Lenovo с крышки и залил выемку под него эпоксидкой. С логотипом под дисплеем всё не так просто — белая краска там идёт по всей толщине пластика в рамке и оторвать или зашлифовать логотип не получится — тут только заклеивать. После, я заказал в типографии стикеры с логотипом IBM на матовой бумаге, раскроил их ножом под нужные мне размеры и приклеил куда надо:

Очевидно, что после всех «нововведений» Lenovo, когда они то уничтожают 7-рядную красивую клавиатуру, то убирают отдельные кнопки для трэкпойнта, то убирают возможность подцеплять снизу к ноутбуку док-станцию и аккумулятор — то есть старательно превращают Thinkpad в обычный ноутбук «как у всех», обосновывая это «будущим», «инновациями» и тем, что старые фанаты Thinkpad’ов должны приспосабливаться (🤡) — мне они не очень-то и нравятся.

Новый дисплей и FreeBSD

Естественно, что новая плата, припаянная к материнке, и новый дисплей потребовали определённых изменений и в софте. Сначала я настроил DPI по инструкции (вот так), чтобы можно было работать за ноутбуком без лупы.

Чтобы не вводить каждый раз vbe on в загрузчике и видеть лог загрузки FreeBSD на новом дисплее, а не узкую полоску «видеопомех» вверху экрана — в /boot/loader.conf я добавил пару строк:

hw.vga.textmode="0"
vbe_max_resolution=2560x1440

Чтобы отключить вывод LVDS при старте X-сервера — использовал стандартные утилиты xrandr и backlight:

xrandr --output LVDS-1 --off
xrandr --output DP-3 --primary
backlight 0

Для изменения яркости стандартными кнопками на клавиатуре Thinkpad, пришлось покопаться в системе чуть побольше. Китайцы сделали очень затейливую регулировку яркости для нового дисплея — короткое нажатие на кнопку питания циклически меняет яркость с минимума на максимум и обратно. Драйвера, которые возвращают нормальную регулировку яркости по кнопкам на клавиатуре — есть только под Windows и работают они только с китайским, пропатченным BIOS’ом. В Linux и *BSD придётся справляться своими силами (не к ChatGPT же за советом тут обращаться 😄…).

Сначала пришлось продираться сквозь тонны глупых советов с форумов, где предлагали регулировать яркость внешних (относительно LVDS в ноутбуке) дисплеев через xbacklight, xgamma, redshift и прочие утилиты, которые просто меняют цветовую гамму и не трогают реальную физическую подсветку… Такое «изменение» яркости никак не повлияет на скорость разрядки батареи ноутбука.

Потом я нашёл вот эту очень полезную ветку на форуме владельцев Thinkpad: x220 x230 FHD WQHD 2K mSATA USB3.0 (они зачем-то заблокировали доступ пользователям из РФ 🤡, так что просто так ссылка не откроется). Содержимое этой ветки подтолкнуло меня в сторону копания в USB-интерфейсе, который используется платой 2K-модификации. К сожалению, к этому моменту я уже собрал ноутбук и очень не хотел его разбирать обратно, поэтому доступа к припаянной плате 2K-модификации, чтобы прозвонить линии разъёма CN15, идущего к док-станции — у меня не было.

Зато, у меня было кое-что получше — фотография контактов порта для док-станции с припаянной к ним платой расширения! А также сгоревшая материнская плата №1 и принципиальная электрическая схема ноутбука. На первый взгляд кажется, что ловить тут нечего:

Разъём CN15 для док-станции

А потом я вспоминаю, что смотрю на плату с обратной стороны, зеркалю чертёж — и уже вырисовывается что-то похожее на правду:

Отзеркаленный разъём CN15

В итоге, у меня получилось легко и просто сматчить ноги реального интерфейса и его символ на электрической схеме:

Теперь, по фотографии платы 2K-расширения уже можно понять какие именно линии CN15 использует китайская плата:

Из интересного тут:

  • Линии I2C интерфейса Display Port к новому монитору: DOCKB_DP_DDC_DATA, DOCKB_DP_DDC_CLK.
  • Линии от USB-интерфейса к плате 2K-модификации: USBP8- и USBP8+. Другим концом они уходят в Platform Controller Hub (PCH, U14).

В выхлопе sudo usbconfig list было несколько интересных строчек:

ugen0.2: <vendor 0x8087 product 0x0024> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)
ugen2.2: <vendor 0x8087 product 0x0024> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA)
ugen0.3: <AGAN X230> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (64mA)
ugen2.3: <vendor 0x8087 product 0x0a2b> at usbus2, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (100mA)

Первые две строчки и последняя оказались девайсами от Intel (см. ссылку):

8087  Intel Corp.
    0020  Integrated Rate Matching Hub
    0024  Integrated Rate Matching Hub
    0a2b  Bluetooth wireless interface

А вот поиск по AGAN X230 привёл к GitHub-репозиторию одного тайваньца и далее к его сайту, посвящённому модификации Thinkpad’ов. Оттуда я узнал больше подробностей о своём 2K-моде — оказывается, его сделал некий китайский моддер 阿甘, известный в миру как a.gain. А из GitHub-репозитория стало понятно, что я нахожусь на верном пути и яркость 2K-дисплея можно менять через USB-интерфейс платы.

К сожалению, код из вышеупомянутого репозитория не отличался совершенством, поэтому я написал свою программу, поглядывая одним глазом в репозиторий xy-tech/agan_brightness_X230_X330. У меня есть:

  • Причёсанный код на C.
  • Разбор опций командной строки через libpopt (а не вручную, через atoi; заодно и красивый вывод --help автоматически генерируется).
  • Сборка через autotools.
  • Man-страница.
  • Правило для devd, чтобы утилитой можно было пользоваться без повышения привилегий до root.

Программа написана под FreeBSD, но, вероятно, при наличии установленной библиотеки libusbhid и её заголовочных файлов — она заработает и под Linux. Правда, вместо правила для devd придётся изобретать что-то своё.

Проверял я её только под FreeBSD 14.0 — на моей машине всё работает 😊. Исходники скачать можно вот тут: https://github.com/eugeneandrienko/brightness_x220_agan2k, там же лежит и инструкция по использованию.

Замена WiFi модуля

Дальше меня было уже не остановить. Заменив оригинальный BIOS на coreboot, я столкнулся с тем, что могу воткнуть в ноутбук любое подходящее периферийное устройство и не мучиться с whitelist’ом.

Начал я с WiFi. Изначально в Thinkpad X220 установлена карта на 2.4 GHz и на 300 Mbps (802.11b/g/n). К счастью, после избавления от whitelist’а (и от оригинального BIOS’а) можно установить совсем другой WiFi модуль (TL-8260D2W) — с поддержкой диапазонов 2.4 и 5 GHz, со скоростью примерно на 800-900 Mbps и с поддержкой стандартов 802.11b/g/n/ac. Главное заклеить 51 пин, иначе встроенный Bluetooth не заработает.

Раз отдельная Bluetooth daughter card6 в ноутбуке больше не нужна — я снял её и поставил в освободившийся разъём переходник с BDC на USB — и в итоге получил внутри ноутбука ещё один USB-разъём, к которому можно что-нибудь подключить. Что именно — я пока так и не придумал. Два WiFi-модуля мне не нужны, втыкать туда флешку слишком скучно, а GPS-донгл не поместится целиком внутри корпуса.

Внутренний USB вместо Bluetooth

Слева от WiFi-модуля у меня был установлен WWAN-модуль. Устанавливать для него сим-карту я и не собирался, поэтому этот модуль тоже был снят, а его антенны демонтированы. Вместо него был установлен SSD на полтерабайта, с интерфейсом mSATA.

Также, я снял одну из антенн для WiFi-модуля. Вместо этой антенны будет стоять внешняя антенна. Хоть я и не занимаюсь всяким пентестингом и дальнобойность ноутбучного WiFi мне не сильно важна — но ноутбук с внешней антенной будет выглядеть просто офигенно!

Под разъём для внешней антенны как раз есть место рядом с Kensington-lock’ом:

Рядом с предполагаемым отверстием есть винт, но если сверлить по чертежу, то этот винт не будет мешать:

Чертёж отверстия (⌀ 6 мм) для разъёма RP-SMA

Чтобы разъём можно было вставить в отверстие — была выфрезерована перемычка внутри корпуса:

Просверленное отверстие и выфрезерованная перемычка внутри корпуса

C Dremel’ем и с тремором — результат у меня получился не особо аккуратным. Но всё равно всё будет закрыто кабелями, поэтому я лишь обточил все острые углы надфилем и заизолировал открытый металл на всякий случай.

Ну а дальше удалось отыскать внешнюю антенну на 2.4 и 5 GHz в цветах Thinkpad’а и 18-сантиметровый pigtail с RP-SMA с одной стороны и с U.FL-разъёмом с другой стороны.

Разъём RP-SMA в корпусе Thinkpad (вид сбоку)

Разъём RP-SMA в корпусе Thinkpad (вид сверху)

Единственная сложная часть тут — проложить кабели правильным образом после их выхода из под keyboard bezel. Иначе палмрест не защёлкнется до конца, ему будет мешать кабель в канале для стока воды.

Тут кабели ещё не проложены как надо

Сама WiFi-карточка и встроенный в неё Bluetooth работают как часы — по крайней мере в Linux для этого не пришлось ничего настраивать. Во FreeBSD разве что пришлось установить пакет с бинарными, проприетарными блобами: iwmbt-firmware и прописать mode 11g в строку с ifconfig_wlan0= в /etc/rc.conf. К сожалению, поддержка стандарта 802.11ac для Intel 8260 во FreeBSD’шном iwlwifi ещё не зарелизилась, поэтому новая карточка раскрывается не полностью. Но по-крайней мере, в моём типовом сценарии использования — подключение к интернету через WiFi с телефона — она работает без нареканий.

Новая WiFi-карта и внешняя антенна

Замена клавиатуры

Изначально, на моём ноутбуке была установлена клавиатура с британской раскладкой7, которая мне очень не нравится — я всегда пользовался клавиатурами с американской раскладкой. Постоянно попадать пальцем по Enter, когда ты хочешь ввести символ пайпа — раздражает.

К счастью, китайцы всё ещё выпускают клавиатуры под X220 с кнопками-пирамидками и седьмым рядом, иначе этот мир был бы максимально проклят. Нет серьёзно, вы только почитайте эту статью или взгляните на этот ад:

Пока зумеры пишут на клавиатурах с фото выше всякий кринж про трекпойнты в духе: «did anyone ever actually use this thing?» — остальное прогрессивное человечество, использующее ThinkPad’ы не только лишь для срачей в Twitter X, нарабатывает бесценный опыт правильного движения пальцем по клитору!

К сожалению, у китайской клавиатуры для X220 был один фатальный недостаток. Она просто некачественная:

  1. Пластик не такой плотный и блестящий, как на старых клавиатурах. На ощупь там используется что-то другое — соответственно ощущения при печати будут уже не те.
  2. Вместо оригинального «клитора» бугорком, используется плоский трекпойнт.
  3. Символы на клавишах Enter, Backspace, Shift у китайцев зачем-то продублированы текстом.
  4. Вместо спокойного синего цвета для пиктограмм специальных функций — используется более яркий голубой.
  5. Над кнопкой включения питания тоже поиздевались — вместо мягкого зелёного света в глаза бьёт яркий зелёный светодиод (памятуя любовь китайцев к ярким и аляповатым штукам в дизайне — слава богу, что это не сверхъяркий синий светодиод).
  6. Мой экземпляр в целом не отличался качеством — несколько кнопок из верхнего ряда клавиатуры прожимались с трудом, металлическая крышка на обратной стороне клавиатуры была погнута.

К счастью, мне повезло найти оригинальную клавиатуру от ноутбука с британской раскладкой. Вот фото для сравнения (снизу оригинальная клавиатура, сверху китайская):

Про саму замену клавиатуры писать особо нечего — просто снимается старая клавиатура и устанавливается новая.

Ещё я очень хотел поменять местами клавиши Ctrl и Fn на новой клавиатуре. Они и так уже были поменяны местами в coreboot, но надписи на самих клавишах не давали мне покоя. Достаточно быстро выяснилось, что за десять лет никто так и не наладил производство нужных кейкапов для оригинальной семирядной клавиатуры. Пришлось справляться своими силами.

К счастью, клавиша Fn по размеру совпадает с правым Ctrl, так что тут всё просто — надо снять правый Ctrl со старой клавиатуры и поставить его на место левого Fn на новой. С левым Ctrl такой трюк уже не пройдёт — поэтому я снял клавишу и вручную заполировал надпись на ней. Заодно, так же поступил и с клавишей Super, на которой зачем-то нарисовали логотип Windows.

После публикации этой фотографии в офисе IBM начался сущий кошмар

Питание ноутбука

Здесь я начал с замены зарядника. В принципе, оригинальный зарядник прекрасен в своей надёжности и неубиваемости и менять его на что-то другое в общем-то и незачем. Но я как раз наткнулся на GaN-зарядники и на аккумуляторы с поддержкой протокола USB Power Delivery, а также на специальный кабель для зарядки ThinkPad’ов на AliExpress…

С одного конца у этого кабеля стандартный «бочонок» от thinkpad’овской зарядки, а с другой стороны USB-C. С ним можно заряжать ноутбук при помощи GaN-зарядника или аккумулятора с поддержкой протокола USB-PD. Главное, чтобы один из их USB-C портов мог выдавать 20 В и не меньше 3.25 А.

И тут мне пришла в голову идея, что со всеми этими нововведениями я смогу носить с собой один зарядник и один внешний аккумулятор и заряжать от них всё: и ноутбук, и телефон, и вейп со спиннером. Эта идея прошла проверку на практике после того как я купил зарядник и аккумулятор, оба на 140 Вт, от Baseus — действительно, они одновременно заряжают и ноутбук, и телефон. Причём последний ещё и в режиме турбозарядки, если использовать второй USB-C порт.

Ещё у меня была идея заменить стандартный «бочонок» на разъём USB-C (как в телефоне и прочих современных электронных устройствах). Но посмотрев на опыт других людей, модифицировавших таким образом свой ThinkPad — я отказался от этой затеи. Такой разъём не выглядит особо надёжным — уж лучше традиционный «бочонок», он как-то понадёжнее выглядит.

Battery recelling

У меня было два, пострадавших от времени, аккумулятора:

  1. Thinkpad Battery 29+ на 6 ячеек — с ним ноутбук жил около 55 минут.
  2. Thinkpad Battery 29++ на 9 ячеек — с ним ноутбук жил полтора часа.

Как заменять полумёртвые ячейки в аккумуляторе я не знал, как и о «подводных камнях» при выполнении такой операции. Знал лишь, что это опасно — если что-то замкнуть или перегреть, то ячейка может загореться. Поэтому их нельзя паять — допустима только точечная сварка. А ещё батареи немного теряют в ёмкости при нагреве паяльником. Также, от нагрева может отказать пластмассовый предохранительный клапан, расположенный в районе анода. Короче, просто не надо паять аккумуляторы 18650, что бы ни писали в различных статьях в Интернете.

Поиск привёл меня в следующие места с полезной информацией:

  • This should be illegal… Battery Repair Blocking — тут чуваки пересобирают аккумулятор от камеры и в процессе проходятся по разным граблям, чтобы по ним не пришлось проходиться мне.
  • X220 Battery Recelling — тут в конце топика есть много полезных советов от мастера, занимающегося заменой ячеек в ноутбучных аккумуляторах.
  • Replacing Lenovo laptop lithium batteries и Project Details — автор этих статей обновлял аккумулятор не от X220, но из его статьи можно почерпнуть полезные идеи о том, как провести замену ячеек в аккумуляторе. Также, в конце второй статьи он пишет о том, что ёмкость ячеек по видимому запрограммирована в BMS8 аккумулятора, поэтому нет смысла ставить ячейки с ёмкостью большей, чем с завода, если нет программатора и исправленной прошивки для BMS.
  • Recalibrate batteries — тут описана команда из набора утилит coreboot (./ectool -w 0xb4 -z 0x06) для калибровки батареи.

Вооружившись всеми этими знаниями, я принялся разбирать аккумулятор Thinkpad Battery 29+ — его жалко меньше всего. Да и гореть он будет наверное поменьше, чем большая батарея на 9 ячеек 😊.

Пришлось самостоятельно разбираться в том, как же аккуратно добраться до внутренностей аккумулятора — ибо в разных видео с ютуба, где чуваки из ЮВА якобы показывают как разобрать аккумулятор от Thinkpad, они по факту варварски раздербанивают батарею, оставляя после себя гнутый во все стороны пластиковый корпус и ошмётки никелевых шин. С тем же успехом можно было бы кинуть аккумулятор в камнедробилку…

Верхняя крышка аккумулятора — та что с надписями «не вскрывать» и с маркировкой — вклеена в основной корпус и дополнительно удерживается там пластмассовыми защёлками. Мне повезло и я смог подлезть в щель между крышкой и корпусом, в уголке — там где шов проходит сверху аккумулятора, а не сбоку. Сначала, я разделял эти две части металлической лопаточкой, не залезая глубоко внутрь, опасаясь как бы ничего не замкнуло и не загорелось.

Потом заточил палочку от мороженого, взял зубочистку и продолжил расклеивать аккумулятор, используя деревянные инструменты если нужно было залезть куда-то глубоко:

Со швами, которые идут по боку аккумулятора пришлось заморочиться — я не сразу понял как они устроены, в силу чего аккумулятор немного потерял свой товарный вид 😊. Шов, который идёт справа со стороны разъёма, пришлось раскрывать очень аккуратно — внутри корпуса там идёт изолированная шина, которую определённо не стоит повреждать.

В конечном итоге, у меня всё получилось:

Батарея 3S2P с подключенной платой BMS

На фото выше к средней нижней ячейке приклеен датчик температуры, перегрев которого приведёт к тому, что BMS сожжёт предохранитель (и, возможно, установит внутри себя какой-нибудь Permanent Failure Flag) — и в итоге аккумулятор совсем перестанет работать.

Оранжевые аккумуляторные ячейки на фото — LGABC21865, форм-фактор 18650, с ёмкостью 2800 mAh каждая. Каждый аккумулятор выдаёт 3.7 В в норме, максимально: 4.3 В — на эти числа стоит ориентироваться, чтобы ненароком не купить аккумуляторы, рассчитанные на 4.2 В, как поступил один чувак с Реддита, ненароком собравший ThinkBomb вместо ThinkPad.

Дальше самое сложное — надо так отключить старые аккумуляторы от BMS, чтобы он не залочился. В Интернете, увы, не нашлось никакой информации по успешной замене ячеек в аккумуляторах от Thinkpad X220. В основном находились лишь советы по другим моделям Thinkpad’ов: кому-то помогало отключение банок в нужном порядке, кто-то просто подключал 12 с лишним вольт от лабораторного источника питания к клеммам платы BMS и у них контроллер аккумулятора не лочился (непонятно почему — ведь на клеммах для контроля напряжения между ячейками тогда будет 0 В) и так далее.

Я попробовал разобраться во всём этом сам. Невосстанавливаемый предохранитель я нашёл быстро — это деталь F1:

Fuse 12AH3

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

Тут, в принципе, всё очевидно — надо временно отпаять вывод 4 от платы, чтобы «обезвредить» предохранитель на время замены ячеек. К сожалению, это SMD-деталь с выводами под ней, расположенная слишком близко к аккумуляторным ячейкам для того, чтобы можно было снять её феном, поэтому от этой затеи я отказался.

В даташите на чип BMS не нашлось ничего полезного, что могло бы натолкнуть меня на мысль: «а как завести батарею после замены ячеек?» Увы, но оставался лишь эксперимент с правильной последовательностью отключения банок от аккумулятора, как описано по одной из ссылок выше.

Для теста, я отключил только лишь плюсовой вывод (V+) аккумуляторной сборки и припаял его обратно. После этой операции на выходе аккумулятора, увы, было 0 В, хотя элемент F1 по прежнему проводил ток. Но тут я вспомнил про то, как «заводили» аккумуляторы от других Thinkpad’ов в одной из прочитанных статей. Надо замкнуть на время плюсовой вывод аккумуляторной сборки и плюсовой вывод разъёма аккумулятора. Я прозвонил и подпаял первый найденный на столе проводок к V+ и приложил его на секунду к нужному выводу разъёма.

На выходе аккумулятора всё равно было 0 В. Но тут я решил измерить напряжение между концом провода и «землёй» (V-) аккумуляторной сборки. Внезапно, там было не 12.2 В, а 4 В! Провод оказался сделанным из известной субстанции, был немедленно выкинут, а на его место припаян качественный медный провод. После повторения трюка с раъёмом акккумулятора — на его выходах появились столь желанные 11 с лишним вольт!

Так и был найден рабочий метод отключения аккумулятора:

  1. Убрать подальше от паяльника датчик температуры.
  2. Отпаять плюсовой контакт аккумуляторной сборки: V+.
  3. Отпаять следующий контакт: VH.
  4. Отпаять ещё контакт: VL.
  5. Отпаять минусовой контакт аккумуляторной сборки: V-.

Теперь плата BMS и аккумуляторы отсоединены друг от друга и можно заменять ячейки на свежие! После завершения этого действа, подключать всё нужно в обратном порядке:

  1. Припаять последовательно, друг за другом разъёмы от аккумуляторной сборки к соответствующим контактам: V-, VL, VH, V+.
  2. Припаять качественный медный провод к V+.
  3. Замкнуть на секунду второй конец провода и плюсовой контакт на разъёма аккумулятора (самый левый контакт).

Готово, BMS должен вновь завестись и выдать напряжение на соответствующие контакты разъёма аккумулятора.

К сожалению, я не могу утверждать что этот способ 100% рабочий, ибо не успел проверить его как следует. Оказалось, что моя «гениальная» идея поскорее почистить место пайки от флюса водкой, за неимением ничего более подходящего под рукой поздно ночью — привела к фатальному провалу. Спирт испарился, вода осталась и «внезапно» прямо на паяльной маске рядом с местом пайки — мультиметр вдруг стал показывать 4 В вместо нуля. Естественно, BMS такое не понравилось и он перестал работать — то ли залочился, то ли сгорел и повторное выполнение вышенаписанной инструкции уже не помогало…

В итоге, и так уже потратив кучу времени на эксперименты с этим аккумулятором — я решил потратить время на разбор отзывов к китайским аккумуляторам и купил себе реплику ThinkPad Battery 29++. Мне повезло, и полученная батарея оказалась нормальной — исправно заряжалась и обеспечивала 5-6 часов работы от аккумулятора при сёрфинге в Интернете.

Встраивание второго аккумулятора в ноутбук (незаконченное)

Уже очень давно я хотел добавить к ноутбуку вторую батарею — ThinkPad Battery 19+. Это большая, тяжёлая и надёжная батарея на 6 ячеек, которая крепится снизу, к разъёму для док-станции. Как говорил Борис Бритва: «Тяжесть это хорошо, тяжесть это надёжно».

Я, мягко говоря, не являюсь фанатом современного тренда на безудержное уменьшение толщины носимой техники любой ценой — ценой несъёмного вклеенного аккумулятора, одинаковых плоских клавиатур, ценой удаления Ethernet-порта и 3.5 мм джека. Всё наоборот — мне очень нравится эстетика техники из фильмов 1980-1990 годов, которая выглядит умеренно толстой, имеет много полезных кнопочек, индикаторов и портов:

Может быть, когда я стану 90-летним старцем, меня будут волновать лишние 500 грамм веса и лишние миллиметры толщины. Но сейчас, переноска в рюкзаке «лишних» полкило техники меня не парит — важнее, чтобы мой ноутбук выглядел как стильный кирпичик из 90-х и вызывал приятные тактильные ощущения.

Особых проблем с поиском вышеупомянутой батареи на вторичном рынке я не видел. Но, внезапно, оказалось, что в реальности такие аккумуляторы сейчас можно найти лишь на недоступном мне eBay. Даже на AliExpress или на Авито их нет.

Значит пришло время попробовать сделать такую батарею самому!

Для этого я купил док-станцию ThinkPad UltraBase Series 3. У меня была идея подключить к ней вторую батарею на 9 ячеек спереди, как у ноутбука Dell Latitude D630, чтобы она работала ещё и как palmrest. Свободное пространство в задней части док-станции, там где в ThinkPad Battery 19+ по видимому и лежит батарея на 6 ячеек, уже было занято платой с разнообразными разъёмами. Эту плату я убирать не собирался, ибо хотел иметь разъёмы сзади ноутбука. В итоге должен был получиться «стильный кирпич» в стиле 90-х, как я и хотел.

Для начала, я всё разобрал. Инструкции для этой док-станции я не нашёл, но смог отыскать пост про разборку похожей. С ним стало понятнее, что там вообще внутри стоит ожидать.

Сначала я открутил все винты, разщёлкнул пластиковые защёлки на верхней крышке и снял её:

15 винтов на верхней крышке док-станции

Внутри есть основная плата с docking-разъёмом и механика для соединения док-станции с ноутбуком:

Внутренности док-станции UltraBase Series 3

Под платой находится механическая часть док-станции и много смазки:

Осталось понять, как сюда подключить вторую батарею. Если взять основную батарею, то разъём для её подключения (CN23) на принципиальной схеме выглядит вот так:

Видно, что от батареи идёт 5 линий:

  • Питание: M-BAT-PWR_IN, он же BAT_VCC на разъёме
  • Земля
  • Линии интерфейса SMBus: I2C_CLK_BT0 и I2C_DATA_BT0
  • Сигнал M_TEMP от вывода TEMP на разъёме CN23.

На этом же листе со схемой, видны соответствующие линии, идущие от docking-разъёма:

  • Питание: S_BAT_PWR_A
  • Линии интерфейса SMBus: I2C_CLK_BT1 и I2C_DATA_BT1
  • Сигнал S_TEMP.

Эти же линии на листе с docking-разъёмом:

К сожалению, дальнейшие изыскания пришлось прекратить. «На третий день заточения индеец Соколиный Глаз заметил, что в сарае не хватает четвёртой стены» — оказалось, что есть только одно место в док-станции, куда я могу встроить батарею целиком — место, занятое платой с разъёмами. Эту плату я убирать не хотел, место слева было занято механизмом удержания ThinkPad’а в док-станции, место справа — корзиной под дисковод, которую я также убирать не хотел, ибо туда можно вставить Optibay и добавить третий жёсткий диск в систему при необходимости.

А спереди, куда можно было бы вставить батарейный отсек, вырезанный из корпуса ThinkPad’а — был слив для воды. Естественно, что убирать его и вставлять туда батарею — опасно, потому что вся пролитая вода потечёт прямиком на батарею.

Когда-нибудь я подумаю над проблемой встраивания аккумулятора в док-станцию, но не сейчас…

Дополнительные разъёмы и кнопочки

Тем не менее, можно по прежнему использовать док-станцию, чтобы всякие разъёмы были позади ноутбука — никакие провода не помешают мне поставить кружку с чаем сбоку от ноутбука.

Но, после установки платы 2K-модификации уже не получится просто так подключить док-станцию к ноутбуку! Как видно из раздела «Новый дисплей и FreeBSD», эта плата занимает линии интерфейса Display Port и пару линий USB. Следовательно, надо отсоединить линии Display Port от соответствующего разъёма на стороне док-станции. И заодно проверить — не использует ли USB-концентратор в доке те же линии, что и плата модификации.

К сожалению, я так и не нашёл в Интернете принципиальной схемы док-станции и пришлось прозванить схему от docking connector’а. Достаточно быстро выяснилось, что разъём Display Port на моей док-станции останется функциональным — он использует линии DOCKA_DP, тогда как плата 2K-модификации использует отдельные линии DOCKB_DP.

А вот линии USBP8 увы используются. Они подходят к контроллеру USB2514B от Microchip (чип U13), и использовать 4 USB2.0 порта сзади док-станции не получится. Линии USBP8 придётся отключить от разъёма.

USB-контроллер Microchip USB2514B (U13)

На схеме ноутбука видно, что к разъёму для док-станции подходят ещё линии USBP12 (DOCK_USB) — по идее, можно прямо на плате док-станции перерезать линии USBP8 и подпаять к ним витую пару с экраном, которая другим концом будет припаяна к контактам, идущим от линии USBP12 — и тогда USB-порты сзади док-станции снова будут работать. Но сделаю я эту модификацию уже как-нибудь в другой раз.

Ещё я собирался добавить к док-станции тумблер вместо кнопки включения и защитную крышку для тумблера. Я питаю нездоровый интерес к таким защитным крышкам — они приятно щёлкают и чувствуется сопротивление пружины при откидывании крышки.

К тому же, при каждом включении ноутбука ты чувствуешь себя как пилот звездолёта из фантастических фильмов 90-х:

Под тумблер и защитную крышку как раз есть подходящее место в левом боку док-станции, напротив рычага для снятия ноутбука:

Чертёж отверстия под тумблер

Провода от тумблера я подпаял к разъёму, который служит для подключения штатной кнопки включения. Можно было бы подпаяться прямо к docking connector’у, но его контакты находятся снизу платы и там же двигаются механические детали:

Заодно, как можно видеть, был убран кабель, идущий от основной платы до кнопки для сигнализации отключения док-станции от ноутбука. Отсоединять одно от другого во включенном состоянии я точно не буду.

Защитная крышка была просто приклеена поксиполом и в итоге получилась вот такая конструкция:

После тестового подключения уже собранной док-станции к ноутбуку, выяснилось, что я всё же что-то пропустил — на экране периодически возникали артефакты, а система, хоть и успешно загружалась до рабочего стола, вскоре перезапускалась как будто бы по watchdog’у. Поскольку снова разбирать док у меня не было никакого желания, а документации на проприетарный разъём к нему естественно не было — я взял сгоревшую материнскую плату и стал прозванивать контакты этого разъёма:

Разъём к док-станции (CN15), со снятой пылезащитной крышкой

Признаться, это был тот ещё геморрой — штырьковые контакты, распиновка которых мне известна, расположены с одной стороны платы, а контакты разъёма док-станции — на другой стороне и они крайне мелкие. У меня сломались глаза на попытке посчитать порядковый номер первого же контакта от шины DOCKB_DP. Пришлось сначала заклеивать кусочком изоленты контакты слева от «звонящегося», фотографировать часть разъёма на телефон, увеличивать фото и считать порядковый номер контакта уже на нём.

После пары вечеров такого «развлечения» я уже знал какие пины на разъёме относятся к линиям DOCKB_DP, а какие к USBP8:

Номер пина Сигнал
22 DOCKB_DP_DDC_CLK
23 DOCKB_DP_DDC_DATA
24 DOCKB_HPD
27 DOCKB_DP_0P
28 DOCKB_DP_0N
30 DOCKB_DP_1P
31 DOCKB_DP_1N
33 DOCKB_DP_2P
34 DOCKB_DP_2N
36 DOCKB_DP_3P
37 DOCKB_DP_3N
39 DOCKB_DP_AUXP
40 DOCKB_DP_AUXN

Номер пина Сигнал
21 USBP8+
22 USBP8-

И я просто заклеил пины, относящиеся к шинам DOCKB_DP и USBP8, в разъёме самой док-станции при помощи каптоновой ленты — в итоге глитчи и перезапуски системы на ровном месте исчезли. Разъёмы сзади: порт для зарядки, Ethernet-порт и аудио-джек — работали. USB порты естественно уже не работали.

Заклеенные пины в коннекторе док-станции

В итоге, вайб от работы за ноутбуком после такой модификации стал именно таким, какой я и хотел. Открывая ноутбук, ощущаешь что крышка с дисплеем это просто крышка, а снизу большая, надёжная и тяжёлая основная часть с клавиатурой, которую не надо придёрживать, чтобы она не отрывалась от стола. Тактильные ощущения при включении ноутбука через тумблер тоже на высоте, как и звуковое сопровождение этого действия. Ещё один неожиданный плюс — за счёт того, что ноутбук теперь стал немного выше, а клавиатура немного наклонена к пользователю — работать за ним стало немного удобнее.

Под конец я добавил к ноутбуку дополнительных разъёмов USB3.0 через Express Card. Сначала была куплена карточка FL 1100 у китайцев — у неё было аж три порта вместо двух и не требовался дополнительный провод для питания, как у прочих аналогичных карточек.

Всё работало, но карта грелась как утюг, не защёлкивалась в слоте и отключалась после десятка минут во включенной системе:

ugen1.1: <(0x1b73) XHCI root HUB> at usbus1 (disconnected)
unknown: at usbus1, port 1, addr 1 (disconnected)
usbus1: detached
xhci0: Controller reset timeout.
xhci0: detached
pci2: detached
pcib2: Timed out waiting for Data Link Layer Active

В итоге, пришлось таки воспользоваться картой ExpressCard BC398 с двумя USB3.0 портами и дополнительным разъёмом для внешнего питания от другого USB разъёма — на случай если надо будет подключить что-то энергоёмкое, вроде переносного жёсткого диска.

С этой картой уже не было никаких проблем — она фиксировалась внутри слота, не грелась и не отваливалась после 10 минут работы.

Прошивка нового чехла

С таким ноутбуком уже не хочется использовать обычный тряпичный чехол из массмаркета. Да и будем честны, чехол под такую машинку уже не найдёшь — всё что сейчас можно купить, рассчитано на современные тонкие ноутбуки.

Поскольку я умею работать с кожей — я просто сшил сам себе чехол. Для изготовления всяких чехлов к своей технике я когда-то купил полшкуры крупного рогатого скота — чёрного цвета и растительного дубления, чтобы её можно было формовать и делать оттиски логотипов «просто добавив воды».

Я не использую выкройки — обычно сначала придумываю что хочу, рисуя эскизы в блокноте:

Поскольку я привык запихивать ноутбук в рюкзак боком, он также будет вставляться и в чехол, тумблером вниз. Чтобы ноутбук не опирался на одну лишь защитную крышку тумблера, на дне чехла будет лежать немного поролона. Сверху всё это будет закрываться клапаном с парой кобурных кнопок, на которые будут накидываться два ремешка.

Сначала я хотел сделать переднюю и заднюю стенки из цельного куска кожи, чтобы мне надо было поменьше раскраивать. Но потом внезапно выяснилось, что остаток от купленной шкуры слишком маленький и вырезать из него пластину длиной в метр с лишним — уже не выйдет. Пришлось перерисовывать чертёж и вводить две отдельных детали для передней и задней стенок, которые будут сшиваться «встык».

Ну а дальше я уже просто разметил детали чехла на шкуре, тщательно проверяя по нескольку раз все размеры, и раскроил её.

Происходит это примерно так же, как и в слесарном деле. Даже немного проще — ведь кожу можно немного растянуть, если вдруг где-то ошибся на пару миллиметров.

Из забавных лайфхаков в процессе разметки: в качестве лекала для выреза на передней стенке прекрасно подходит обычная тарелка:

А для формирования полукруглых сгибов на дне и на крышке чехла — отлично подходят две высокие банки от Dr. Pepper, смотанные вместе при помощи скотча. По диаметру они как раз около 60 мм.

Передняя и задняя стенки соединяются швом «крест-накрест», как описывается в этом видео. Ну а боковые стенки пришиваются тем же методом, который описан в книге Al Stohlman: «The art of hand sewing leather»9.

Внутри чехол должен быть обязательно устлан подкладочной тканью. Бахтарма («изнанка» куска кожи) является абразивной и ноутбук со временем просто вытрется до металла, если её не закрыть. По хорошему, надо было сшить что-то вроде мешочка по размерам внутренней части чехла, но для ускорения процесса, я просто приклеил подкладочную ткань к изнанке соответствующих деталей.

В конечном итоге, после сшивания всех деталей вместе, полировки урезов и установки кобурных кнопок, получился вот такой чехол:

Ноутбук в него входит как влитой — очевидно иначе и быть не могло, если предварительно всё было тщательно измерено и рассчитано :-).

Итоговые результаты

Ноутбук до всех изменений

Ноутбук после модификации

  Было Стало
Дисплей 1366x768 2560x1440
WiFi 2.4 GHz, 300 Mbps, 802.11b/g/n 2.4 и 5 GHz, 800-900 Mbps, 802.11b/g/n/ac, плюс встроенная поддержка Bluetooth
Жёсткие диски 180 GB SSD 0.5 TB SSD и 180 GB SSD, плюс можно подключить ещё один диск через Optibay
USB порты 1xUSB3.0, 2xUSB2.0 3xUSB3.0, 2xUSB2.0
Клавиатура Оригинальная, с британской раскладкой и кириллическими наклейками Оригинальная, с американской раскладкой
Время работы от батареи Примерно 1.5 часа 5-6 часов. При использовании внешнего powerbank — до 9 часов

В итоге, эта машинка послужит мне ещё как минимум следующий десяток лет. Единственное узкое место тут — всякий JavaScript с сайтов — если он начнёт по 8 Гб на вкладку отжирать, то придётся туго.


Примечания

  1. Кнопку Pause я использую, чтобы ставить на паузу приложения, грузящие процессор на 100%, если он мне нужен для чего-то другого. Заодно и для экономии заряда батареи — если Firefox используется через раз, то пока он мне не нужен, он стоит на паузе. Работает это примерно так

  2. Это проблема IPS матриц, используемых в этих Thinkpad’ах — при сильном ударе по крышке на экране появляется пятно, которое светится немного ярче, чем окружающий экран:

     

  3. На самом деле, первая материнская плата уже давно умирала, но поскольку ноутбуком я пользовался аккуратно — аналогичные «симптомы» проявлялись всего пару раз. А вмешательство во внутренности системы с паяльником — всего лишь ускорило неизбежную кончину. 

  4. В интернете пишут, что libgfxinit с framebuffer и установщики *BSD очень сильно не дружат. Но я нашёл способ их подружить — в процессе загрузки, когда на экране уже напечатаны строки:

    Booting from Hard Disk ...
    /
    

    … там на самом деле должен отображаться в текстовом режиме экран загрузчика. В этот момент, надо вслепую нажать на <Esc> и вбить команду vbe on. После этого на экране отобразится приглашение командной строки загрузчика и уже можно спокойно загружать FreeBSD командой boot

  5. Раздел «2010 LCD front bezel» (страница 88), «2050 LCD panel and LCD cable» (страница 99), «2020 LED board» (страница 89), «2040 Integrated camera» (страница 98) и «2070 LCD rear cover and wireless antenna cables» (страница 102). 

  6. См «2030 Bluetooth daughter card (BDC-2.1)» на странице 91 в сервисном мануале. 

  7. Глобально, есть две раскладки клавиатуры. Британская — где Г-образный Enter, короткий левый Shift и есть дополнительная кнопка с символами <, >, \ слева от кнопки z. И американская, где вытянутый Enter и длинный Shift. 

  8. Battery Management System 

  9. Секция «Sewing a miter joint», страница 22.