Полная последовательность не проверялась на втором, чистом устройстве. Это описание того, как собран рабочий планшет, поэтому будьте готовы что-то адаптировать. Вы действуете на свой риск.
Понадобятся: компьютер с Linux, кросс-компилятор ARM, USB-клавиатура, флешка и сам Surface 2. Все файлы лежат в архиве со страницы проекта.
0. Подготовка к откату
Сделайте это до любых изменений.
- Создайте загрузочную флешку восстановления.
- Сохраните весь загрузочный раздел.
- Проверяйте каждое ядро и каждый 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 link5. Камеры
make -C /path/to/kernel M=$PWD/modules/tegra-video modules
make -C /path/to/kernel M=$PWD/modules/sensors modules- Добавьте
cma=384Mвcmdline.txt: с меньшим значением потоку не хватает памяти. - Загружайте
tegra-videoс параметромmc_api=1. - Примените
camera/libcamera/*.patchк libcamera и установитеcamera/libcamera-configuration.yaml. - Настройки модулей лежат в
camera/surface-camera.conf.
Проверка:
cam -l
cam -c 1 --capture=106. 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