Windows Surface RT
Allgemeines
Ich habe hier noch zwei Windows Surface RT rumliegen. Eins laeuft mit der App Kiosk Browser als SmartHome-Display. Die App auf dem zweiten auch zu installieren will aber nicht so recht gelingen. Hawk Thua!
Also fliegt Windows RT 8.1 runter und wird durch Linux ersetzt. Das Surface als SmartHomeDisplay unter Linux ist bestimmt eine gute Idee.
Nachtrag 2024-12-28: Das Linux-Surface hat mittlerweile das Windows-Surface als Smarthome-Display ersetzt.
Nachtrag 2025-03-02: Gelegentlichen WLAN -Ausfaellen muss ich noch auf die Spur gehen. Das Problem ist bekannt und hier beschrieben und "geloest".
Hardware
Systemtyp: 32 Bit ARM basierter Prozessor Prozessor: NVIDIA TEGRA 3 Quad Core 1,3 GHz Hauptspeicher: 2 GB Physischer Speicher: 2 GB (gesamt: 1,95 GB, verfuegbar: 170 MB) Virtueller Speicher: 3,17 GB (verfuegbar: 1,31 GB Auslagerungsdatei (pagefile.sys) 1,2 GB) BIOS: NVIDIA v3.31.500 (24.01.2014) SMBIOS: 2.6 BIOS Modus: UEFI "Festplatte": 25,8 GB (32 GB ?) Startgeraet: \Device\HarddiskVolume2 Stift- und Toucheingabe: 5 Touchpunkte Bildschirmaufloesung: 1366 x 768 (60 Hz) (32 Bits/Pixel) Verbindungen: USB Bluetooth WLAN Netzwerk: Marvell AVASTAR Wireless-N Network Controller (SDIO) (Ethernet 802.3)
Weitere Hardware-Details [1]
PCR7-Konfiguration ?
ChatGPT meint dazu:
Secure Boot wird in den Systeminformationen als 'Sicherer Startzustand' angegeben.
Ausgangspunkt
Dieses [ https://www.youtube.com/watch?v=4HcYghFEGOE Youtube-Video] dient mir als Anleitung.
- Jailbreak Guide: https://windows-rt-devices.gitbook.io/windows/tools/tegra-jailbreak-usb
- Install Guide: https://openrt.gitbook.io/open-surfacert/surface-rt/linux/root-filesystem/distros/raspberry-pi-os
- Restore Guide: https://windows-rt-devices.gitbook.io/windows/miscellaneous/bare-metal-recovery
- Post-Install Upgrades: https://firesphere.dev/articles/on-the-surface-its-buster
Schritt 1 Jailbreak
Vorbereitung
Einen USB Stick mit mindestens 16 GB mit FAT 32 formatieren.
Tegra_Jailbreak_USB.zip herunterladen. [2][3]
Zip auf den USB-Stick entpacken.
Boot
Ziel ist es das Secure Boot von Windows auszuschalten.
Zum Booten drueckt man den Volume - Button (linke Seite) und drueckt kurz den Power Button (oben rechts).
In der Anleitung heiszt es, man soll den Power-Button (erst) wieder loslassen, sobald das Surface-Logo erscheint. Bei mir reichte ein einfaches Druecken des Power-Button und dann Loslassen des Vol- Button nach dem Erscheinen des Surface-Logos.
Vol - (halten bis Logo) -> Power-Button kurz druecken -> USB Boot Mode Vol + (halten bis Logo) -> Power-Button kurz druecken -> APX Boot Mode
Weiter Infos zum APX Mode [4]
Leider gibt es scheinbar keine Moeglichkeit vom internen SD-Karten-Slot zu booten. Der SD-Kartenslot (MiroSD) liegt etwas versteckt unter der Aufstellklappe auf der rechten Seite ueber dem Ladeanschluss.
Nach dem Installieren der Golden Keys und Yahallo war Windows ohne Wiederherstellungsschluessel (BitLocker), nicht wie im Video, nicht wieder bootbar.
Das Installieren der 'Golden Keys' und des 'Yahallo' benoetigt nur die Boot-Partition (dev/sda1)des USB-Sticks.
Boot Problem
Das Booten der Boot-Partition (/dev/sda1) funktionierte problemlos, aber nach erfolgreichem Deaktivieren des Secure-Boot verweigerte der Boot-Prozess das Einbinden der Root-Partition (dev/sda2) mit einem Kernel Panic.
Hier die Partitionen des USB-Sticks:
worker:/mnt/1.5T_RAID # fdisk /dev/sde
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sde: 29.24 GiB, 31393316864 bytes, 61315072 sectors
Disk model: Mass-Storage
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd9ebf26c
Device Boot Start End Sectors Size Id Type
/dev/sde1 8192 1056767 1048576 512M c W95 FAT32 (LBA)
/dev/sde2 1056768 10887167 9830400 4.7G 83 Linux
Command (m for help): q
worker:/mnt/1.5T_RAID # blkid
...
/dev/sde2: LABEL="rootfs" UUID="ca2be9ef-61a4-4400-a5a1-dc17d7ea790d" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="d9ebf26c-02"
/dev/sda1: PARTUUID="c766ec62-1a71-452d-bf51-d249284061ab"
worker:/mnt/1.5T_RAID #
Linux Kernel Parameter
Den Ort der Rootpartition kann mit der Option root angegegeben werden. Dazu stehen 3 Hardware-Orte zur Verfuegung (N steht jeweils fuer eine Partition auf dem Device).
- sdaN USB-Stick
- mmcblk0pN interner Flash-Speicher
- mmcblk1pN SD-Card im Slot
Da es scheinbar zu lange dauert, die rootfs-Partition des USB-Stick zu mounten kommt es zum Kernel-Panic. Auch die Option rootwait brachte keinen Erfolg. rootdelay wird scheinbar nicht unterstuetzt. Also habe ich kurzer Hand den Ort des rootfs (root=/dev/sda2) auf den SD-Kartenslot (root=/dev/mmcblk1p2)verschoben. Dazu einfach den raspi-Installation-Stick zweimal anfertigen, einmal "normal" als USB-Stick und einmal auf einer SD-Karte. Leider ist es nicht moeglich von der SD-Karte zu booten. Daher der Boot (Partition 1) vom USB-Stick und dann umsschalten auf das rootfs der SD-Karte (Partition 2). Klappte auf anhieb wunderbar. Den Rest (Installation auf dem internen Flash) dann wie oft beschrieben ausfuehren.
Schritt 2 Install Linux
Unter [7] habe ich ein neues Image gefunden, was fuer das Video noch nicht zur Verfuegung stand.
Unter 2024-05-18 gab es ein surface-rt-6.4-kernel-inc-modules.zip . Mal schauen, vielleicht ist das ein Vorteil.
Informationen
DTB Datei
DTB = Device Tree Binary
In dieser Datei ist die Hardwarestruktur des PI o.ä. codiert. Diese Datei ist binaer und somit nicht einfach lesbar. Hierzu schreibt Jeff Geerling:
How to customize the dtb (device tree binary) on the Raspberry Pi November 17, 2023
Every so often, when you're debugging weird hardware issues on SBCs like the Raspberry Pi, it's useful to get way down into the guts of how the Pi represents its hardware to Linux.
And the Linux kernel uses a method called Device Tree overlays to do it. On the Pi 5 (and other Pis), these overlays are stored as .dtb files inside the /boot/firmware directory, and there's an overlay for every major Raspberry Pi hardware model.
I've had to modify the dtb files in the past to increase the PCIe BAR space for early GPU testing on the Compute Module 4. And recently I've had to mess with how the PCIe address space is set up for testing certain devices on the Raspberry Pi 5.
The problem is, you can't just hand-edit a .dtb file—they're in a format readable only by the Linux kernel. You have to decompile the .dtb file to a .dts (source) file, edit it, then recompile it to a .dtb.
As an example, I needed to change the msi-parent for the Pi 5's external PCIe connector to allow for full MSI-X support for a Google Coral TPU (work on getting it to work is ongoing):
- Back up the current dtb
sudo cp /boot/firmware/bcm2712-rpi-5-b.dtb /boot/firmware/bcm2712-rpi-5-b.dtb.bak
- Decompile the current dtb (ignore warnings)
dtc -I dtb -O dts /boot/firmware/bcm2712-rpi-5-b.dtb -o ~/test.dts
- Edit the file
nano ~/test.dts
- Change the line: msi-parent = <0x2f>; (under `pcie@110000`)
- To: msi-parent = <0x66>;
- Then save the file.
- Recompile the dtb and move it back to the firmware directory
dtc -I dts -O dtb ~/test.dts -o ~/test.dtb sudo mv ~/test.dtb /boot/firmware/bcm2712-rpi-5-b.dtb
Check out elinux's Device Tree Reference for more useful background info.
I consider myself an absolute noob at Device Trees in Linux... but I've now done this enough times that I'd like a simple reference and most of the ones out there assume you are an expert-level wizard in all things Linux/hardware!