Меню
Linux на Microsoft Surface 2

Инструкция по установке

Пошагово: откат, сборка ядра, Wi-Fi, Bluetooth, камеры, GPU и частоты.

Полная последовательность не проверялась на втором, чистом устройстве. Это описание того, как собран рабочий планшет, поэтому будьте готовы что-то адаптировать. Вы действуете на свой риск.

Понадобятся: компьютер с Linux, кросс-компилятор ARM, USB-клавиатура, флешка и сам Surface 2. Все файлы лежат в архиве со страницы проекта.

0. Подготовка к откату

Сделайте это до любых изменений.

  1. Создайте загрузочную флешку восстановления.
  2. Сохраните весь загрузочный раздел.
  3. Проверяйте каждое ядро и каждый device tree одноразовой загрузкой, которая сама возвращает прежние настройки. Только после этого делайте их постоянными.

1. Разблокировка загрузки

Surface 2 загружает только подписанный код, пока не обойдён Secure Boot. Этот шаг не наша разработка, он описан в руководствах Open Surface RT:

Наш планшет загружает boot.efi из /boot/firmware, читает cmdline.txt, а файл device tree указан параметром dtb=.

2. Базовая система

Мы использовали Raspbian 12 Bookworm armhf с GNOME 50. Другие 32-битные ARM-дистрибутивы тоже должны подойти, но службы из архива рассчитаны на эту раскладку.

3. Сборка ядра

sudo apt install gcc-arm-linux-gnueabihf bison flex libssl-dev bc
git clone https://github.com/Open-Surface-RT/grate-linux
cd grate-linux
git checkout ba70522fd65244fae81d48838119cd77e39d7140
patch -p1 < ../linux-on-surface-2-kit-1.0.0/kernel/kernel-avp5.diff
cp ../linux-on-surface-2-kit-1.0.0/kernel/config-avp5 .config
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make olddefconfig
make -j"$(nproc)" zImage dtbs modules

В конфигурации задано -surface-avp5 в имени ядра, и служба Wi-Fi проверяет именно его.

4. Wi-Fi и Bluetooth

Получите прошивку по инструкции, затем примените патчи к mwifiex и соберите модули:

cd drivers/net/wireless/marvell/mwifiex
patch -p1 < .../kit/wifi/0001-wifi-mwifiex-sdio-fix-reset-deadlock-and-hard-reset-.patch
patch -p1 < .../kit/wifi/0002-wifi-mwifiex-support-SD8797-14.62-firmware-Windows-B.patch
cd -
make -j"$(nproc)" M=drivers/net/wireless/marvell/mwifiex modules

Соберите device tree camera/dts/surface-avp-safe-cameras-vi-mclk-bthsuart.dts компилятором dtc. В нём UART-D использует nvidia,tegra30-hsuart.

На планшете разложите файлы и включите службы. Файлы дистрибутива не меняются: прошивка и модули монтируются поверх них, поэтому отключение службы мгновенно возвращает всё назад.

sudo install -d /opt/surface-bt /etc/surface-bt
sudo cp out/sd8797-fp62win7-btuart.bin /opt/surface-bt/fw-win7.bin
sudo cp mwifiex.ko /opt/surface-bt/mwifiex-win7.ko
sudo cp mwifiex_sdio.ko /opt/surface-bt/mwifiex_sdio-win7.ko
cd /opt/surface-bt
sudo sh -c 'sha256sum fw-win7.bin mwifiex-win7.ko mwifiex_sdio-win7.ko > SHA256SUMS'
sudo install -m 755 .../kit/bluetooth/overlay.sh /opt/surface-bt/
sudo install -m 644 .../kit/bluetooth/surface-bt-*.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable surface-bt-overlay.service surface-bt-attach.service
sudo touch /etc/surface-bt/enabled

Выключите энергосбережение Wi-Fi скриптом tools/surface-wifi-ps.sh: с ним прошивка может зависнуть.

Проверка после перезагрузки:

dmesg | grep 'driver_version'   # 14.62.17.p215
hciconfig -a                    # hci0 UP RUNNING
iw dev mlan0 link

5. Камеры

make -C /path/to/kernel M=$PWD/modules/tegra-video modules
make -C /path/to/kernel M=$PWD/modules/sensors modules
  1. Добавьте cma=384M в cmdline.txt: с меньшим значением потоку не хватает памяти.
  2. Загружайте tegra-video с параметром mc_api=1.
  3. Примените camera/libcamera/*.patch к libcamera и установите camera/libcamera-configuration.yaml.
  4. Настройки модулей лежат в camera/surface-camera.conf.

Проверка:

cam -l
cam -c 1 --capture=10

6. GPU, видео и частоты

  • Примените gpu/patches по порядку к Mesa 22.2.4 с драйвером Grate.
  • modules/surface-v4l2 и modules/avp дают аппаратное декодирование и требуют файлы NVIDIA.
  • modules/dvfs управляет частотами. Для surface-emc нужна таблица с вашего устройства.

Запускайте смену частот только после загрузки системы и с защитой, которая отключает её после неудачного старта. Не понижайте VDD_CORE ниже 1100 мВ на EMC 792 МГц.

Правила, усвоенные на практике

  • Не читайте регистры FUSE через /dev/mem, если их тактирование выключено: шина зависает.
  • Не запускайте perf record -a на этом ядре: планшет зависает.
  • Не включайте cpuidle C7 без возможности выключить питание: планшет не отвечает.
  • Делайте копию перед каждой заменой прошивки или device tree и держите рабочий вариант загрузки под рукой.

Откат Wi-Fi и Bluetooth

sudo rm /etc/surface-bt/enabled
sudo systemctl disable surface-bt-overlay.service surface-bt-attach.service
sudo reboot