Boot Linux on the Switch without imx_usb_loader - Windows, Linux, Mac OS & Android
I am not reponsible in case you brick or blow up your Switch, its LCD screen or its battery. Use this at your own risks, as Linux is known to cause battery calibration and RTC desync as well as potential damage to the LCD display.
You have been warned.
It's Arch Linux ARM (ALARM) with the GNOME desktop manager and some utilities :
sudo
The default user is alarm
, its password is alarm
. The root password is root
.
The system comes with two scripts to see and select the current GPU clock profile. There are currently three profiles which can be enabled :
low
(03
) : normal undockedspeednormal
(0a
) : normal docked speedhigh
(0d
) : (not recommended) maximum speed, will cause power failuresThe system will reset to the normal profile at each reboot.
To see the current clock profile, run the get-gpu-clock-profile
command as root. It will list all the available profiles, with a star next to the one currently activated.
To set the current clock profile, use the set-gpu-clock-profile
command.
When booting for the first time, the system will expand the root partition to fill your entire SD card, and then reboot (like a Raspberry Pi). You will need to run the exploit again once the screen turns black to finalize the reboot process, like when enabling Wi-Fi.
When shutting down the Switch from Linux, it doesn't actually power it off. Press the power button for 10 seconds and reboot into Horizon before shutting down from there.
Follow this guide with your SD card and the image file you downloaded.
TL;DR : on Windows use Etcher, on Linux & Mac OS use dd
On Windows, you will first need to install the required driver :
Then, make sure that your Switch is plugged in your PC and in RCM mode. Open the folder of this repository (the one you downloaded and extracted) and run windows-boot.bat
(or windows-win32-boot.bat
on a 32bit machine). Voilà !
Having a Win32 error 31 is normal.
Install Python 3 (usually already installed). Open a terminal to install the required package : pip3 install pyusb==1.0.0
. I let you deal with permissions issues (hint : sudo
works on Linux).
Then, plug your switch in your PC and put it in RCM mode. You should use a blue "SS" port as these have a greater chance of success (EHCI controller doesn't work, XHCI controller works, blue ports have a greater chance of using XHCI).
Once ready, run the linux-macos-boot.sh
script from this repository's folder. Again, I let you deal with permissions issues (if it cannot find the module usb
it means that you have insufficient permissions). Voilà !
/storage/emulated/0/Android/data/io.mrarm.switchlinuxlauncher.noimx/files/shofel2
/sdcard/Android/data/io.mrarm.switchlinuxlauncher.noimx/files/shofel2
payloads
folder of the repository, copy the cbfs.bin
and coreboot.rom
files to the shofel2
folder on your Android device (the folder of the previous step)Restart
buttonWi-Fi : works after a reboot
Bluetooth : works partially
Touch screen : works
Audio : not working, even through Bluetooth headphones or speakers
Hardware graphics acceleration : works
switchpower
scriptWired Joy-Cons : to be implemented
Volume buttons : recognized but don't do anything since there is no audio device
Power button : only works to halt the system with a long-press
USB : not working
Dock : to be implemented
Power management : works partially
Gnome-terminal : Tofix ! It crash use xterm instead .
Follow the steps on fail0verflow's repository, but instead of using their fork of u-boot, use mine. If you already built everything, you will need to rebuild u-boot using my fork and then rebuild coreboot.
Then, make sure that the first partition of the console's SD card is FAT32 and create a boot
folder. Inside, put :
Image.gz
: the zipped Linux kerneltegra210-nintendo-switch.dtb
: the DTBboot.scr
: you can generate it by using the make.sh
script in the src
folder of this repositoryPut the SD card in the console.
Then, use shofel2 to run the coreboot you recompiled, like usual. Linux should boot immediately without the need to run imx_usb
!
You should probably put a rootfs in mmcblk0p2.