Das U-Boot

U-Boot for Surface RT.

How to build u-boot

Get source code

You can use U-boot for tegra git clone https://github.com/OE4T/u-boot-tegra; cd u-boot-tegra or U-boot Mainline git clone https://gitlab.denx.de/u-boot/u-boot.git; cd u-boot

Add/change Devicetree

THIS IS VERY IMPORTANT!!! If you skip this step you can damage your device Use the devicetree below. Don't use the devicetree from Devicetree page.

Replace the content of ./arch/arm/dts/tegra30-cardhu.dts with following code:

#include "tegra30.dtsi"
/ {
model = "NVIDIA Cardhu";
compatible = "nvidia,cardhu", "nvidia,tegra30";
chosen {
stdout-path = &uarta;
aliases {
mmc0 = "/[email protected]";
mmc1 = "/[email protected]";
memory {
device_type = "memory";
reg = <0x80000000 0x40000000>;
status = "okay";
cd-gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
wp-gpios = <&gpio TEGRA_GPIO(T, 3) GPIO_ACTIVE_HIGH>;
power-gpios = <&gpio TEGRA_GPIO(D, 7) GPIO_ACTIVE_HIGH>;
bus-width = <4>;
status = "okay";
bus-width = <8>;
clocks {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
clk32k_in: [email protected] {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <32768>;
&uarta {
status = "okay";

Build U-Boot

Now you can build U-Boot: make cardhu_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- Now you should find the file./u-boot-dtb-tegra.bin This your Uboot Image which contains the SPL and Uboot.

Boot script

Booting Linux from UART is tedious and you may dont have UART access. To automate the boot process a boot script can be used. Create a file:

echo 'Linux is booted from boot.scr'
setenv kern_addr 0x80008000
fatload mmc 1:1 ${kern_addr} /zImageSRT
bootz ${kern_addr}

Compile it using: mkimage -A arm -O linux -a 0 -e 0 -T script -C none -n "SurfaceRT Boot Script" -d boot.script boot.scr

Place boot.scr on the SD Card next to the kernel. Tip: Don't hit any key to stop autoboot