Jump to content

Microsoft Surface RT (microsoft-surface-rt): Difference between revisions

From postmarketOS Wiki
m rollbackEdits.php mass rollback
Tag: Rollback
Jethrob (talk | contribs)
m WiFi: add path to iw
 
(54 intermediate revisions by 11 users not shown)
Line 1: Line 1:
Released in 2012, the Surface RT was the first tablet and personal computer developed and manufactured by Microsoft. It ran on the extremely limited version of Windows, known as Windows RT 8, and that was its downfall, leading to eventual discontinuation in late 2013. Despite this, a community emerged to make the Surface RT more usable via jailbreaking and bypassing secure boot, allowing other armhf apps and even other Operating Systems such as postmarketOS to run.
{{Infobox device
{{Infobox device
| manufacturer = Microsoft
| manufacturer = Microsoft
| name = Surface RT
| name = Surface RT
| codename = microsoft-surface-rt
| codename = microsoft-surface-rt
| image = File:microsoft-surface-rt-demos.jpg
| image = File:SurfaceRT_pmOS_XFCE4.jpg
| imagecaption = Surface RT running postmarketos-demos
| imagecaption = Surface RT with the XFCE Desktop
| releaseyear = 2012
| releaseyear = 2012
| category = community
| prebuiltimages = yes
| originalsoftware = Windows RT
| originalsoftware = Windows RT
| originalversion = 8
| originalversion = 8
| extendedversion = 8.1 Update 3
| chipset = Nvidia Tegra 3 (T30)
| chipset = Nvidia Tegra 3 (T30)
| cpu = 4x 1.3 GHz Cortex-A9 (no support for L2 cache in kernel)
| cpu = 4x ARM Cortex-A9 @ 1300Mhz
| gpu = GeForce ULP
| gpu = Nvidia GeForce ULP @ 420Mhz
| storage = 32 / 64 GB
| storage = 32 / 64 GB
| display = 1366x768 IPS
| display = 1366x768 IPS
| memory = 2 GB
| memory = 2 GB
| architecture = armv7
| architecture = armv7
| type = detachable
| status_usbnet = -
| status_usbnet = -
| status_flashing = -
| status_flashing = -
Line 39: Line 45:
| status_sms = -
| status_sms = -
| status_calls = -
| status_calls = -
| status = supported in grate kernel, but not packaged
| status_otg = -
| status_otg = -
| status_nfc = -
| status_nfc = -
| status_cameraflash = -
| status_usba = Y
| status_usba = Y
| status_hdmidp = Y
| status_hdmidp = Y
Line 47: Line 53:
| status_touchpad = Y
| status_touchpad = Y
| status_irtx = -
| status_irtx = -
| status_irrx = -
| status_haptics = Y
| status_stylus = -
| status_ethernet = -
| status_trustzone = -
| status_trustzone = -
| status_fossbootloader = P
| status_fossbootloader = -
| status_emmc = Y
| status_sdcard = Y
| status_dvb = -
| status_uboot = yes
| status_uboot = yes
| status_uboot_primary = P
| status_uboot_primary = P
| status_uboot_secondary = N
| status_uboot_secondary = P
| status_uboot_mainline = Y
| status_uboot_mainline = Y
| status_uboot_internalstorage = Y
| status_uboot_internalstorage = Y
Line 61: Line 74:
| status_uboot_buttons = Y
| status_uboot_buttons = Y
| booting = yes <!-- The device is booting at all, can be yes/no *IMPORTANT* -->
| booting = yes <!-- The device is booting at all, can be yes/no *IMPORTANT* -->
| genericdevice=Nvidia Tegra armv7 (nvidia-tegra-armv7)
}}{{Based on SoC|Nvidia_Tegra_3_(tegra30)|Tegra 3}}
}}{{Based on SoC|Nvidia_Tegra_3_(tegra30)|Tegra 3}}
{{note|'''NOTE:''' However the table says you can daily drive this device, there are still some not implemented features: L2 Cache, CPU Idle, UHS MicroSD Cards, Suspend (suspend itself works and wakes up quickly, but it works with both CPU and Core voltages enabled and DRAM is not in self-refresh mode). This is all because of EFI Firmware which wants kernel to control these CPU and regulator features through ACPI, and we use Device-Tree instead. There is work in progress to bypass EFI at runtime and control these features in the kernel.}}
{{note|'''NOTE:''' Deep suspend does not work on this device.}}




Line 68: Line 82:


== How to boot from USB ==
== How to boot from USB ==
Power on the device with {{Button|Volume Down}} button pressed.
#Turn Off device
#Plug in USB Drive
#Hold the volume down button
#Press the power button for a second
#Wait until the surface logo appears
#Release volume down


== Installation ==
== Installation ==
Line 77: Line 96:
See the instruction on  [https://openrt.gitbook.io/open-surfacert/common/boot-sequence/uefi/secure-boot/surface-rt-and-surface-2-jailbreak-usb OpenRT GitBook].
See the instruction on  [https://openrt.gitbook.io/open-surfacert/common/boot-sequence/uefi/secure-boot/surface-rt-and-surface-2-jailbreak-usb OpenRT GitBook].


{{note|'''Note:''' Don't try to boot pmOS installation from USB when you already have installation on eMMC. It does not work this way. Although you still can boot pmOS ondev installer even if you have installed OS on eMMC. }}
{{note|'''Note:''' Device can't boot from a SD card. Boot with a USB storage.}}
{{note|'''Note:''' Device can't boot from a SD card. Boot with an USB.}}


==== Installation on USB storage ====
==== Installation on USB storage ====
Follow [https://wiki.postmarketos.org/wiki/Pmbootstrap Pmbootstrap] article. Do a normal SD card installation using USB storage as a target.
Unpack and flash a pre-built image to USB.
 
[https://images.postmarketos.org/bpo/edge/microsoft-surface-rt/ Edge Images]
 
Or
 
[https://images.postmarketos.org/bpo/v24.12/microsoft-surface-rt/ 24.12 Images]
 
Or
 
[https://images.postmarketos.org/bpo/v24.06/microsoft-surface-rt/ 24.06 Images]


==== Installation on eMMC ====
==== Installation on eMMC ====
# Follow [https://wiki.postmarketos.org/wiki/Pmbootstrap Pmbootstrap] article until <code>pmbootstrap install</code> command.
 
# Use <code>pmbootstrap install --no-sshd --ondev --sdcard=/dev/sdX</code>, where X is the number of your USB storage block device.
Install pmOS on USB firstly. Boot into it, connect to internet and perform:
#* Check other <code>pmbootstrap install</code> arguments, you may find something usable.
<syntaxhighlight lang="shell-session">
# Boot from the USB storage and follow on-device installer.
$ sudo apk add pmbootstrap
# Disconnect the USB storage before booting into installed system, otherwise installer will be booted from USB again.
$ pmbootstrap init # select "microsoft" vendor and "surface-rt" codename
$ pmbootstrap install --disk /dev/mmcblk0 --no-sshd # add --fde if you want FUll Disk Encryption
</syntaxhighlight>
 
To install pmbootstrap, you will be asked for a sudo password. This password is "147147"
 
For the best experience, use "xfce4" for your desktop environment
 
Sometimes you will get an error with exit code 1 or 2.
If you do, try installing to eMMC with Pmbootstrap again.
 
If it gets stuck at the same error over and over again, download a new image and flash your USB using the new image and try again.


== WiFi ==
== WiFi ==
The WiFi firmware will go to sleep and break after some time (12 hours or less) with driver log talking about command timeout. The WiFi interface (mlan0) will vanish and trying to unload and reload the driver will block forever at trying to unload it. So the only way to recover is to hard reset.
Upon device resuming from sleep mode / screen blanking the wifi does not receive proper instructions to do so due to incomplete devicetree for wifi reset. The driver will attempt to reload firmware onto the wifi chipset, but due to the wifi not being issued the reset commands the driver / chipset get out of sync. The driver log shows command timeouts, when this happens the WiFi interface (mlan0) will vanish and trying to unload and reload the driver will block forever at trying to unload it. So the only way to recover is to hard reset.


It seems this can be avoided by disabling power management on the WiFi device. With NetworkManager this is <code>nmcli connection modify <SSID> 802-11-wireless.powersave disable</code>, otherwise <code>iw dev mlan0 set power_save off</code>
This can be avoided by disabling power management on the WiFi device. With NetworkManager this is <code>nmcli connection modify <SSID> 802-11-wireless.powersave disable</code>, otherwise <code>iw dev mlan0 set power_save off</code> This is required every boot.


If this isn't enough, another thing to try is to disable and re-enable the WiFi device every so often through a cronjob:
Install iw with <code>apk add iw</code>


<syntaxhighlight lang="shell">>/etc/periodic/hourly/reset-wifi cat <<EOF
To make it automatic every boot add a script in <code>/etc/local.d/</code> with the contents of
<syntaxhighlight lang="shell">
#!/bin/sh
#!/bin/sh
 
/sbin/iw dev mlan0 set power_save off
ip link set mlan0 down
ip link set mlan0 up
EOF
chmod +x /etc/periodic/hourly/reset-wifi
service crond start
rc-update add crond default
</syntaxhighlight>
</syntaxhighlight>


Line 113: Line 147:
== U-Boot ==
== U-Boot ==


This device can run patched mainline U-Boot, see https://github.com/Open-Surface-RT/u-boot.
APX booting can be performed using generic [[Nvidia_Tegra_armv7_(nvidia-tegra-armv7)|Nvidia Tegra armv7]] device port.
 
== Other Issues ==
 
* Shutdown / reboot does not work properly
 
: When the device is told to shutdown / reboot via GUI or via `poweroff` command etc, the device does not fully power off and stays on a black screen. Hold the power button down to forcibly power it off and then press it once more to reboot. This is a recent (~2024) regression.


=== Primary bootloader ===
* Keyboard Issues (Microsoft Surface Keyboard Model 1535 and 1561)
It works as primary bootloader, but SPI is one time programmable. The only way to boot it is fusee-gelee. There were also successful attempts to replace SPI with non-OTP one with flashed U-Boot.


=== Secondary bootloader ===
: At least on XFCE4, the Super key (Windows key) seems to currently do nothing even when the keyboard preset is set to the "Surface Keyboard" preset.
Chainloading from EFI is not yet possible.


== Contributors ==
* Onboard Issues
===== Kernel, packages =====
* [[user:Jenneron|Jenneron]]
* CrackTheSurface
* Leander


===== Etc =====
: At least on XFCE4, Onboard (the On-Screen Keyboard) currently only works on the lock screen or when manually activated. There is no way to make it automatically appear when The device is in tablet mode.
* imbushuo (Yahallo exploit for disabling secure boot)
* jwa4 (convenient tool for enabling/disabling Golden Keys and Yahallo exploits)
* TheLorax (server for unofficial prebuilt images)


== Users owning this device ==
== Users owning this device ==

Latest revision as of 20:33, 24 February 2025

Released in 2012, the Surface RT was the first tablet and personal computer developed and manufactured by Microsoft. It ran on the extremely limited version of Windows, known as Windows RT 8, and that was its downfall, leading to eventual discontinuation in late 2013. Despite this, a community emerged to make the Surface RT more usable via jailbreaking and bypassing secure boot, allowing other armhf apps and even other Operating Systems such as postmarketOS to run.

Note This device is supported as part of a generic port. Refer to Nvidia Tegra armv7 (nvidia-tegra-armv7) for installation instructions and more information.
Microsoft Surface RT
Surface RT with the XFCE Desktop
Surface RT with the XFCE Desktop
Manufacturer Microsoft
Name Surface RT
Codename microsoft-surface-rt
Released 2012
Type detachable
Hardware
Chipset Nvidia Tegra 3 (T30)
CPU 4x ARM Cortex-A9 @ 1300Mhz
GPU Nvidia GeForce ULP @ 420Mhz
Display 1366x768 IPS
Storage 32 / 64 GB
Memory 2 GB
Architecture armv7
Software
Original software Windows RT
Original version 8
Extended version 8.1 Update 3
postmarketOS
Category community
Pre-built images yes
Generic port Nvidia Tegra armv7 (nvidia-tegra-armv7)
Features
Internal storage
Works
SD card
Works
Battery
Works
Screen
Works
Touchscreen
Works
Keyboard
Works
Touchpad
Works
Multimedia
3D Acceleration
Partial
Audio
Partial
Camera
Broken
Connectivity
WiFi
Works
Bluetooth
Broken
Miscellaneous
FDE
Works
USB-A
Works
SATA/eSATA
No data
HDMI/DP
Works
Sensors
Accelerometer
Works
Magnetometer
Works
Ambient Light
Works
Hall Effect
Works
Haptics
Works
U-Boot
Primary Bootloader
Partial
Secondary Bootloader
Partial
Mainline
Works
Internal Storage
Works
SD card
Works
USB Host
No data
USB Peripheral
Works
Display
Works
Keyboard
Broken
Buttons
Works
Note NOTE: Deep suspend does not work on this device.


How to boot from USB

  1. Turn Off device
  2. Plug in USB Drive
  3. Hold the volume down button
  4. Press the power button for a second
  5. Wait until the surface logo appears
  6. Release volume down

Installation

Preparation

Enable test signing and install yahallo to disable secure boot.

See the instruction on OpenRT GitBook.

Note Note: Device can't boot from a SD card. Boot with a USB storage.

Installation on USB storage

Unpack and flash a pre-built image to USB.

Edge Images

Or

24.12 Images

Or

24.06 Images

Installation on eMMC

Install pmOS on USB firstly. Boot into it, connect to internet and perform:

$ sudo apk add pmbootstrap
$ pmbootstrap init # select "microsoft" vendor and "surface-rt" codename 
$ pmbootstrap install --disk /dev/mmcblk0 --no-sshd # add --fde if you want FUll Disk Encryption

To install pmbootstrap, you will be asked for a sudo password. This password is "147147"

For the best experience, use "xfce4" for your desktop environment

Sometimes you will get an error with exit code 1 or 2. If you do, try installing to eMMC with Pmbootstrap again.

If it gets stuck at the same error over and over again, download a new image and flash your USB using the new image and try again.

WiFi

Upon device resuming from sleep mode / screen blanking the wifi does not receive proper instructions to do so due to incomplete devicetree for wifi reset. The driver will attempt to reload firmware onto the wifi chipset, but due to the wifi not being issued the reset commands the driver / chipset get out of sync. The driver log shows command timeouts, when this happens the WiFi interface (mlan0) will vanish and trying to unload and reload the driver will block forever at trying to unload it. So the only way to recover is to hard reset.

This can be avoided by disabling power management on the WiFi device. With NetworkManager this is nmcli connection modify <SSID> 802-11-wireless.powersave disable, otherwise iw dev mlan0 set power_save off This is required every boot.

Install iw with apk add iw

To make it automatic every boot add a script in /etc/local.d/ with the contents of

#!/bin/sh
/sbin/iw dev mlan0 set power_save off

Sound

All outputs (speakers, headphones, HDMI) work, but mics are not supported for now.

U-Boot

APX booting can be performed using generic Nvidia Tegra armv7 device port.

Other Issues

  • Shutdown / reboot does not work properly
When the device is told to shutdown / reboot via GUI or via `poweroff` command etc, the device does not fully power off and stays on a black screen. Hold the power button down to forcibly power it off and then press it once more to reboot. This is a recent (~2024) regression.
  • Keyboard Issues (Microsoft Surface Keyboard Model 1535 and 1561)
At least on XFCE4, the Super key (Windows key) seems to currently do nothing even when the keyboard preset is set to the "Surface Keyboard" preset.
  • Onboard Issues
At least on XFCE4, Onboard (the On-Screen Keyboard) currently only works on the lock screen or when manually activated. There is no way to make it automatically appear when The device is in tablet mode.

Users owning this device


See also