All Projects → shinyquagsire23 → Switch Linux

shinyquagsire23 / Switch Linux

Device trees, patches, etc for Linux on Switch

Programming Languages

c
50402 projects - #5 most used programming language

Switch-Linux

It's Linux for Switch.

It's Linux for Switch

Should I Be Using This?

Probably not, this repo has no hardware acceleration and I didn't anticipate fail0verflow releasing their Linux sources so soon (I thought I'd probably be developing this for at least another month or so). Either way, you probably want this and I don't really plan on contributing here.

I'll leave the repo up though to at least showcase how far I got with ~a week of development, probably could have gotten farther with some more time, maybe this will end up being retrofitted later :)

Requirements

  • u-boot running from either TrustZone takeover or bootrom hax. Neither is provided currently, however Switch-compatible u-boot can be found here
  • A properly-formatted SD card. Instructions can be found below in Compiling, Installation and Setup

Notes on PSCI

  • Nintendo's Horizon OS TrustZone component can provide PSCI calls which work for Linux (given patches provided on the repo). By default, the device tree is configured for Linux running from u-boot packaged in Nintendo's package2, with all PSCI calls being sent to SMC #1 instead of SMC #0.
  • Use of other trusted firmwares with PSCI on SMC #0 should be able to remove the need for these patches, however it is untested currently.

Notes on debugging

  • By default, the right Joy-Con rail is used for UART logging output, with pin 5 being the console's TX, and pin 8 being the console's RX. See here for details.

Compiling, Installation and Setup

Installation of u-boot will depend on loading methods used. However once u-boot is installed, the following instructions can be used:

  • Make sure your SD card is formatted with MBR partitioning, with the first partition being FAT32/exFAT and a second for ext3/ext4. If ext4 has issues booting, try ext3.
  • Download the generic ALARM image here and follow the instructions provided to install the filesystem to the ext3/ext4 filesystem on your SD card. You may need a Linux box to do these steps.
  • Clone linux-next using git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
  • cd linux-next && git checkout v4.15
  • Apply the provided patches in the repo using git am -3 -k <patch file>
  • NVIDIA has microcode required for their host1x/DRM subsystems. This should be compiled into the kernel or initramfs for early screen init.
    • Download the linux-firmware package from here
    • mkdir extra_firmware
    • Copy nvidia/tegra210/vic04_ucode.bin and nvidia/tegra210/xusb.bin from the package to linux-next/extra_firmware/nvidia/tegra210/vic04_ucode.bin and linux-next/extra_firmware/nvidia/tegra210/xusb.bin
    • It should be noted that while this may be useful for easy debugging, generated kernel images will be dirty and not strictly GPL compliant. It is recommended that, for image-based releases, that these files be installed to the initramfs.
    • TODO: These are pulled from the actual root partition (with linux-firmware installed to it) if panels are loaded as modules.
  • Ensure that you have an AArch64 cross-compiler installed.
  • export ARCH=arm64
  • export CROSS_COMPILE=aarch64-linux-gnu-
  • mkdir -p build/hac-001/
  • make O=build/hac-001/ hac_defconfig
  • make O=build/hac-001/ -j4 Image
  • Copy the Image file from build/hac-001/arch/arm64/boot/Image to the boot/ folder on your SD card's FAT partition.
  • In this repo, mkimage -A arm -T script -O linux -d u-boot/boot.txt u-boot/boot.scr and copy boot.scr to the boot/ directory on the FAT partition of your SD card.
  • make O=build/hac-001/ -j4 modules
  • sudo -E make O=build/hac-001/ modules_install INSTALL_MOD_PATH=/path/to/ALARM/rootfs/
  • ALARM has a default initramfs which needs to be wrapped for u-boot. mkimage -A arm -T ramdisk -C gzip -d /path/to/initramfs-linux.img /path/to/FAT/boot/initramfs.uImage
  • In the repo, cd device-tree && sh build.sh && cp tegra210-hac-001.dtb /path/to/FAT/boot/
  • Your FAT boot/ directory should have Image, initramfs.uImage, and tegra210-hac-001.dtb
  • Boot through u-boot. If an error has occurred, it will open a USB mass storage device for the SD card.

TODO

  • Get USB working
  • Get WiFi/BT(?) working
  • Get nouveau working
  • Get audio working
  • Get touchscreen working
  • DVFS work?
  • DisplayPort? Switch dock drivers?
  • Probably a lot more stuff.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].